Merge branch 'feat/sk-31' into 'main'

add all message datatable and alertboxes instead of toast

See merge request jjimenez/safekat!609
This commit is contained in:
Alvaro
2025-03-25 19:15:09 +00:00
10 changed files with 62 additions and 41 deletions

View File

@ -443,16 +443,17 @@ class ChatController extends BaseController
{
$auth_user_id = auth()->user()->id;
$isAdmin = auth()->user()->inGroup('admin');
$query = $this->chatModel->getQueryDatatable($auth_user_id);
$query = $this->chatModel->getQueryDatatable();
return DataTable::of($query)
->edit('created_at', fn($q) => Time::createFromFormat('Y-m-d H:i:s', $q->created_at)->format("d/m/Y H:i"))
->edit('updated_at', fn($q) => Time::createFromFormat('Y-m-d H:i:s', $q->updated_at)->format("d/m/Y H:i"))
->add("creator", fn($q) => $this->chatModel->getChatFirstUser($q->id)->userFullName)
->edit("creator",fn($q) => $q->userId == $auth_user_id ? '<span class="badge text-bg-success w-100">'.lang("App.me").'</span>' : $q->creator)
->add("viewed", fn($q) => $this->chatModel->isMessageChatViewed($q->id, $auth_user_id))
->add("action", fn($q) => [
"type" => "direct",
"modelId" => $q->id,
"isAdmin" => $isAdmin,
"chatMessageId" => $q->chatMessageId,
"lang" => [
"view_chat" => lang('Chat.view_chat'),
"view_by_alt_message" => lang('Chat.view_by_alt_message')

View File

@ -35,6 +35,7 @@ return [
"global_next" => "Siguiente",
"global_save_file" => "Guardar ficheros",
"global_upload_files" => "Subir ficheros",
"global_all" => "Todos",
// LOGIN - Index
"login_title" => "Iniciar sesión en su cuenta",
"login_email" => "Correo Electrónico",

View File

@ -712,30 +712,39 @@ class ChatModel extends Model
->get()->getResultArray();
return $q;
}
public function getQueryDatatable(int $user_id): BaseBuilder
public function getQueryDatatable(): BaseBuilder
{
$query = $this->builder()
->select([
"chats.id",
"cm.id as chatMessageId",
"u.id as userId",
"cm.message",
"chats.created_at",
"cm.updated_at",
"chats.title",
"
(
SELECT cm2.updated_at
FROM chat_messages cm2
WHERE cm2.chat_id = chats.id
ORDER BY cm2.updated_at DESC LIMIT 1
) as updated_at",
"CONCAT(u.first_name,' ',u.last_name) as creator",
"chats.title as title",
])
->join("chat_users", "chat_users.chat_id = chats.id", "left")
->join("presupuestos", "presupuestos.id = chats.presupuesto_id", 'left')
->join("chat_messages cm", "chats.id = cm.chat_id", "left")
->where("chat_department_id", null)
->where("pedido_id", null)
->where("presupuesto_id", null)
->where("factura_id", null)
->where("chat_users.user_id", $user_id)
->where("cm.updated_at = (
SELECT cm2.updated_at
FROM chat_messages cm2
WHERE cm2.chat_id = chats.id
ORDER BY cm2.updated_at DESC LIMIT 1
)");
->join("users u", "u.id = cm.sender_id", 'left')
->groupStart()
->orWhere("chats.presupuesto_id is NOT NULL", NULL, FALSE)
->orWhere("chats.pedido_id is NOT NULL", NULL, FALSE)
->orWhere("chats.factura_id is NOT NULL", NULL, FALSE)
->groupEnd();
return $query;
if (auth()->user()->inGroup("admin") == false) {
$query->where('presupuestos.cliente_id', auth()->user()->cliente_id)
->where("chats.chat_department_id is NOT NULL", NULL, FALSE);
}
return $query->groupBy('chatMessageId');
}
public function getQueryDatatableMessagePresupuesto(int $user_id): BaseBuilder
{

View File

@ -14,7 +14,6 @@
</button>
</div>
</div>
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
<div class="accordion accordion-bordered" id="accordionChatDepartmentUser">
<div class="card accordion-item active">
<h2 class="accordion-header">

View File

@ -8,13 +8,13 @@
<!--Content Body-->
<div class="row" id="chatDepartmentEditContainer">
<div class="col-md-12">
<div class="card card-info">
<div class="card-header">
<h3 class="card-title"><?= $chat_department->display ?></h3>
</div>
<!--//.card-header -->
<div class="card-body">
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
<?= view("themes/vuexy/components/forms/chat_department", ["id" => "chatDepartmentForm", "entity" => $chat_department]) ?>
</div>
@ -35,4 +35,4 @@
<script src="<?= site_url("themes/vuexy/vendor/libs/formvalidation/dist/js/plugins/AutoFocus.min.js") ?>"></script>
<script src="<?= site_url('themes/vuexy/vendor/libs/sweetalert2/sweetalert2.js') ?>"></script>
<script type="module" src="<?= site_url('assets/js/safekat/pages/configuracion/messages/editChatDepartmentView.js') ?>"></script>
<?= $this->endSection() ?>
<?= $this->endSection() ?>

View File

@ -1,3 +1,7 @@
<?php
use Config\App;
?>
<?= $this->include('themes/_commonPartialsBs/select2bs5') ?>
<?= $this->include('themes/_commonPartialsBs/datatables') ?>
<?= $this->include('themes/_commonPartialsBs/_confirm2delete') ?>
@ -10,23 +14,25 @@
<div class="col-md-12">
<div class="nav-tabs-shadow nav-align-top">
<ul class="nav nav-tabs" role="tablist">
<!-- <li class="nav-item">
<button type="button" class="nav-link active" role="tab" id="navs-top-align-directos-tab" data-bs-toggle="tab" data-bs-target="#navs-top-align-directos">Directos</button>
</li> -->
<li class="nav-item">
<button type="button" class="nav-link active" role="tab" id="navs-top-align-presupuestos-tab" data-bs-toggle="tab" data-bs-target="#navs-top-align-presupuestos">Presupuestos</button>
<button type="button" class="nav-link active" role="tab" id="navs-top-align-all-tab" data-bs-toggle="tab" data-bs-target="#navs-top-align-all"><?=lang('App.global_all')?></button>
</li>
<li class="nav-item">
<button type="button" class="nav-link" role="tab" id="navs-top-align-pedidos-tab" data-bs-toggle="tab" data-bs-target="#navs-top-align-pedidos">Pedidos</button>
<button type="button" class="nav-link" role="tab" id="navs-top-align-presupuestos-tab" data-bs-toggle="tab" data-bs-target="#navs-top-align-presupuestos"><?=lang('App.permisos_presupuestos')?></button>
</li>
<li class="nav-item">
<button type="button" class="nav-link" role="tab" id="navs-top-align-facturas-tab" data-bs-toggle="tab" data-bs-target="#navs-top-align-facturas">Facturas</button>
<button type="button" class="nav-link" role="tab" id="navs-top-align-pedidos-tab" data-bs-toggle="tab" data-bs-target="#navs-top-align-pedidos"><?=lang('App.permisos_pedidos')?></button>
</li>
<li class="nav-item">
<button type="button" class="nav-link" role="tab" id="navs-top-align-facturas-tab" data-bs-toggle="tab" data-bs-target="#navs-top-align-facturas"><?=lang('App.menu_facturas')?></button>
</li>
</ul>
<div class="tab-content" id="message-datatables-container">
<div class="tab-pane fade show active" id="navs-top-align-presupuestos">
<div class="tab-pane fade show active" id="navs-top-align-all">
<?= view("themes/vuexy/components/tables/messages_table", ["id" => "tableAllMessages"]) ?>
</div>
<div class="tab-pane fade show" id="navs-top-align-presupuestos">
<?= view("themes/vuexy/components/tables/messages_table", ["id" => "tablePresupuestoMessages"]) ?>
</div>
<div class="tab-pane fade show" id="navs-top-align-pedidos">