Merge branch 'dev/presu_cliente_v2' of https://git.imnavajas.es/jjimenez/safekat into dev/presu_cliente_v2

This commit is contained in:
2024-10-14 14:33:06 +02:00
28 changed files with 1353 additions and 416 deletions

View File

@ -149,6 +149,7 @@ class Chat {
this.domItem.find(".chat-history-header div.chat-contact-info h6").text(row.display)
this.domItem.find(".chat-history-header div.chat-contact-info small.user-status").text(row.display)
this._getChatMessage()
this._getChatTotalMessages(row.name)
this._getChatDeparmentUsers()
})
@ -213,13 +214,26 @@ class Chat {
${row.display}
</p>
</div>
${row.unreadMessages ? `<span
class="badge badge-center rounded-pill bg-primary messages-unread-contact">${row.unreadMessages}</span>` : ""}
<span class="badge badge-center rounded-pill bg-danger messages-unread-contact">0</span>
</a>
</li>
`
return chat
}
_getChatTotalMessages(row_name) {
let ajax = new Ajax(
`/chat/department/${this.chatType}/${this.chatDeparmentId}/${this.modelId}`,
null,
null,
(data)=> {
this.chatList.find(`#chat_${row_name} .messages-unread-contact`).text(data.count)
},
null
);
ajax.get();
}
_getChatMessage() {
let ajax = new Ajax(
`/chat/department/${this.chatType}/${this.chatDeparmentId}/${this.modelId}`,
@ -463,7 +477,11 @@ export const showNotificationMessages = (dom) => {
null,
(data) => {
dom.empty()
$("#chat-notification-number").text(data.totalMessages ?? 0)
$("#chat-notification-number")
if(data.totalMessages > 0){
$("#chat-notification-number").removeClass("d-none")
$("#chat-notification-number").text(data.totalMessages ?? 0)
}
data?.internals?.map((e) => {
let numberOfMessages = e.unreadMessages
if(numberOfMessages > 0){

View File

@ -0,0 +1,199 @@
import Ajax from "./ajax.js"
import Modal from "./modal.js"
import ClassSelect from "./select2.js"
const getInitials = (name) => name.split(" ").map(e => e.charAt(0)).join("")
const hebraList = (message) => `
<div class="list-group-item list-group-item-action d-flex align-items-center cursor-pointer">
<div class="avatar avatar-sm me-2">
<span class="avatar-initial rounded-circle bg-primary" title="${message.senderFullName}">${getInitials(message.senderFullName)}</span>
</div>
<div class="w-100 px-4">
<div class="d-flex flex-column">
<div class="d-flex align-items-center">
<p class="px-1">
<span class="ti ti-xs ti-clock"></span>
</p>
<p class="px-1">
${message.created_at}
</p>
<h6>
${message.senderFullName} (${message.senderUserName})
</h6>
</div>
<p class="text-start">${message.message}</p>
</div>
</div>
</div>
`
const hebraUsersList = (user) => `
<div class="avatar avatar-sm me-2">
<span class="avatar-initial rounded-circle bg-secondary" title="${user.userFullName}">${getInitials(user.userFullName)}</span>
</div>
`
class InternalMessages {
constructor(domItem) {
this.item = domItem
this.containerMessages = this.item.find("#container-internal-messages")
this.btnNewHebra = this.item.find(".btn-new-hebra")
this.btnNewHebraMessage = this.item.find(".btn-new-hebra-message")
this.modalNewMessage = new Modal($("#modalNewInternalMessage"))
this.selectUsers = this.item.find("#selectUsersHebra")
this.btnNewHebraSubmit = this.item.find("#submit_new_hebra")
this.textAreaMessage = this.item.find("#new-internal-message-text")
this.hebraTitle = this.item.find("#new-internal-message-title")
this.btnUpdateHebraSubmit = this.item.find("#submit_update_hebra")
this.message = ""
this.formNewValues = ""
this.formUpdateValues = ""
this.subjectHebra = ""
this.modelId = this.item.data("id")
this.type = this.item.data("type")
this.chatId = null
this.selectMessageUsers = new ClassSelect(this.selectUsers, '/chat/users/internal', "Seleccione un usuario",true)
}
init() {
this.selectMessageUsers.init()
this.item.on("click", ".btn-new-hebra", this.handleBtnNewHebra.bind(this))
this.item.on("click", ".btn-new-hebra-message", this.handleBtnUpdateHebra.bind(this))
this.modalNewMessage.item.on("click","#submit_new_hebra",this.handlePostNewHebra.bind(this))
this.modalNewMessage.item.on("click","#submit_update_hebra",this.handleUpdateHebra.bind(this))
this.handleGetInternalMessages()
}
handleGetInternalMessages() {
this.containerMessages.empty()
let ajax = new Ajax(
`/chat/hebra/${this.type}/${this.modelId}`,
null,
null,
this._handleGetInternalMessagesSuccess.bind(this),
this._handleGetInternalMessagesError.bind(this)
)
ajax.get()
}
handlePostNewHebra(){
this._handleUpdateFormNewHebraValues()
let ajax = new Ajax(
`/chat/hebra/${this.type}`,
this.formNewValues,
null,
this.handlePostNewHebraSuccess.bind(this),
this.handlePostNewHebraError.bind(this),
)
ajax.post()
}
handlePostNewHebraSuccess(data){
this.modalNewMessage.toggle()
this.handleGetInternalMessages()
}
handlePostNewHebraError(err){}
handleUpdateHebra(){
this._handleUpdateFormUpdateHebraValues()
let ajax = new Ajax(
`/chat/hebra/${this.chatId}`,
this.formUpdateValues,
null,
this.handleUpdateNewHebraSuccess.bind(this),
this.handleUpdateNewHebraError.bind(this),
)
ajax.post()
}
handleUpdateNewHebraSuccess(data){
this.modalNewMessage.toggle()
this.handleGetInternalMessages()
}
handleUpdateNewHebraError(err){}
handleBtnNewHebra(e) {
e.preventDefault()
this.chatId = null
this.modalNewMessage.item.find(".modal-title").text("Nueva hebra")
this.selectMessageUsers.reset()
this.textAreaMessage.val("")
this.hebraTitle.val("")
this.hebraTitle.parent().removeClass("d-none")
this.btnNewHebraSubmit.removeClass("d-none")
this.btnUpdateHebraSubmit.addClass("d-none")
this.modalNewMessage.show()
this._handleUpdateFormNewHebraValues()
}
handleBtnUpdateHebra(e) {
e.preventDefault()
this.chatId = $(e.currentTarget).data("id")
this.selectMessageUsers.reset()
this.textAreaMessage.val("")
this.hebraTitle.val("")
this.hebraTitle.parent().addClass("d-none")
this.modalNewMessage.item.find(".modal-title").text("Nuevo mensaje")
this.btnUpdateHebraSubmit.removeClass("d-none")
this.btnNewHebraSubmit.addClass("d-none")
this.modalNewMessage.show()
this._handleUpdateFormUpdateHebraValues()
}
_handleUpdateFormNewHebraValues() {
this.formNewValues = {
title : this.hebraTitle.val(),
users: this.selectMessageUsers.getVal(),
message: this.textAreaMessage.val(),
modelId : this.modelId
}
}
_handleUpdateFormUpdateHebraValues() {
this.formUpdateValues = {
users: this.selectMessageUsers.getVal(),
message: this.textAreaMessage.val(),
modelId : this.modelId
}
}
_handleGetInternalMessagesSuccess(data){
Object.values(data).map((k) => {
this._addHebraDOM(k.chatId,k.chatTitle,k.messages,k.users)
})
}
_handleGetInternalMessagesError(err){}
_addHebraDOM(key,chatTitle,messages,users) {
const itemHebra = $(`<div id="hebra-item-${key}"></div>`).addClass("border border-container flex-grow-0 container-p-y mt-4 p-5")
const headerHebra = $("<div></div>").addClass("d-flex justify-content-between align-items-center")
const contentHeaderHebra = $("<h4></h4>").text(`${chatTitle}`)
const btnNewHebra = $("<button></button>").attr("type", "button").addClass("btn btn-danger btn-sm btn-new-hebra")
btnNewHebra.append('<span class="ti-xs ti ti-git-branch"></span>')
btnNewHebra.append("Nueva hebra")
headerHebra.append(contentHeaderHebra,btnNewHebra)
itemHebra.append(headerHebra)
let itemMessagesHebraRow = $("<div></div>").addClass("row")
let itemMessagesHebraCol = $("<div></div>").addClass("col")
let itemMessagesListGroup = $("<div></div>").addClass("list-group")
itemMessagesHebraRow.append(itemMessagesHebraCol)
itemMessagesHebraCol.append(itemMessagesListGroup)
let itemFooterHebra = $("<div></div>").addClass("d-flex justify-content-between align-items-center")
let itemFooterUserFlex = $("<div></div>").addClass("d-flex justify-content-start ")
let itemFooterHebraUserFlexChildren = $("<div></div>").addClass("d-flex align-items-center avatar-group mb-4 mt-4")
itemFooterUserFlex.append(itemFooterHebraUserFlexChildren)
itemFooterHebra.append(itemFooterUserFlex)
users.map((user) => {
let avatarUsers = hebraUsersList(user)
itemFooterHebraUserFlexChildren.append(avatarUsers)
})
itemFooterHebra.append(`
<button class="btn btn-primary btn-md waves-effect waves-light btn-new-hebra-message" data-id="${key}">
<span class="ti-xs ti ti-message-2 me-1"></span>
Nuevo mensaje
</button>
`)
messages.map((message) => {
let messageContent = hebraList(message)
itemMessagesListGroup.append(messageContent)
})
itemHebra.append(itemMessagesListGroup)
itemHebra.append(itemFooterHebra)
this.containerMessages.append(itemHebra)
}
}
export default InternalMessages;

View File

@ -1,6 +1,11 @@
import Chat from '../components/chat.js'
import InternalMessages from "../components/internalMessagesSection.js"
let chat = new Chat($("#chat-factura"))
chat.init()
chat.initFactura()
chat._handleListContacts()
$(document).ready(() => {
let chat = new Chat($("#chat-factura"))
chat.init()
chat.initFactura()
let internalMessages = new InternalMessages($("#internal_messages_chat"))
internalMessages.init()
})

View File

@ -1,6 +1,11 @@
import Chat from '../components/chat.js'
import InternalMessages from "../components/internalMessagesSection.js"
let chat = new Chat($("#chat-pedido"))
chat.init()
chat.initPedido()
chat._handleListContacts()
$(document).ready(() => {
let chat = new Chat($("#chat-pedido"))
chat.init()
chat.initPedido()
let internalMessages = new InternalMessages($("#internal_messages_chat"))
internalMessages.init()
})

View File

@ -1,6 +1,11 @@
import Chat from '../components/chat.js'
import InternalMessages from "../components/internalMessagesSection.js"
let chat = new Chat($("#chat-presupuesto"))
chat.init()
chat.initPresupuesto()
chat._handleListContacts()
$(document).ready(() => {
let chat = new Chat($("#chat-presupuesto"))
chat.init()
chat.initPresupuesto()
let internalMessages = new InternalMessages($("#internal_messages_chat"))
internalMessages.init()
})