diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 03ad8f11..5da5a2d7 100755 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -646,6 +646,8 @@ $routes->group('messages', ['namespace' => 'App\Controllers\Chat'], function ($r $routes->get('datatable/pedido', 'ChatController::datatable_pedido_messages', ['as' => 'getDatatablePedidoMessages']); $routes->get('datatable/factura', 'ChatController::datatable_factura_messages', ['as' => 'getDatatableFacturaMessages']); $routes->get('datatable/ots', 'ChatController::datatable_ot_messages', ['as' => 'getDatatableOtMessages']); + $routes->get('datatable/direct', 'ChatController::datatable_direct_messages', ['as' => 'getDatatableDirectMessages']); + $routes->post('direct', 'ChatController::store_new_direct_message', ['as' => 'storeNewDirectMessage']); $routes->post('direct/client', 'ChatController::store_new_direct_message_client', ['as' => 'storeNewDirectMessageClient']); diff --git a/ci4/app/Controllers/Chat/ChatController.php b/ci4/app/Controllers/Chat/ChatController.php index 1df0f469..2c70160d 100755 --- a/ci4/app/Controllers/Chat/ChatController.php +++ b/ci4/app/Controllers/Chat/ChatController.php @@ -363,14 +363,13 @@ class ChatController extends BaseController $query = $this->userModel->builder()->select( [ "id", - "CONCAT(first_name,' ',last_name,'(',username,')') as name" + "CONCAT(first_name,' ',last_name) as name" ] ) ->where("deleted_at", null) ->whereNotIn("id", [auth()->user()->id]); if ($this->request->getGet("q")) { $query->groupStart() - ->orLike("users.username", $this->request->getGet("q")) ->orLike("CONCAT(first_name,' ',last_name)", $this->request->getGet("q")) ->groupEnd(); } @@ -538,6 +537,23 @@ class ChatController extends BaseController ->toJson(true); } + public function datatable_direct_messages() + { + $auth_user_id = auth()->user()->id; + $isAdmin = auth()->user()->inGroup('admin'); + $query = $this->chatModel->getQueryDatatableDirectMessages($auth_user_id); + return DataTable::of($query) + ->edit('created_at', fn($q) => $q->created_at ? Time::createFromFormat('Y-m-d H:i:s', $q->created_at)->format("d/m/Y H:i") : "") + ->edit('updated_at', fn($q) => $q->updated_at ? Time::createFromFormat('Y-m-d H:i:s', $q->updated_at)->format("d/m/Y H:i") : "") + ->edit("creator",fn($q) => $q->userId == $auth_user_id ? ''.lang("App.me").'' : $q->creator) + ->add("viewed", fn($q) => $this->chatModel->isMessageChatViewed($q->chatMessageId)) + ->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') + ]]) + + ->toJson(true); + } public function get_notifications_not_viewed_from_message(int $chat_message_id) { $unviewedNotifications = $this->chatModel->getUsersNotificationNotViewedFromChat($chat_message_id); @@ -605,14 +621,13 @@ class ChatController extends BaseController $query = $this->userModel->builder()->select( [ "id", - "CONCAT(first_name,' ',last_name,'(',username,')') as name" + "CONCAT(first_name,' ',last_name) as name" ] ) ->where("deleted_at", null) ->whereNotIn("id", $chat_users_id); if ($this->request->getGet("q")) { $query->groupStart() - ->orLike("users.username", $this->request->getGet("q")) ->orLike("CONCAT(first_name,' ',last_name)", $this->request->getGet("q")) ->groupEnd(); } diff --git a/ci4/app/Language/es/Chat.php b/ci4/app/Language/es/Chat.php index 10458366..e7d0a29c 100755 --- a/ci4/app/Language/es/Chat.php +++ b/ci4/app/Language/es/Chat.php @@ -60,6 +60,7 @@ return [ "subscribe_admin_chat_wrong" => "Tienes que seleccionar un usuario.", "help_select_chat_department_user" => "Solamente son listados los usuarios que pertenecen al personal. Los clientes no son listados, para añadirlos a la conversación se realiza desde la sección de mensajería de las diferentes secciones(presupuesto,pedido,factura ...)", "store_department" => "Crear departamento", + "direct_messsages" => "Mensajes directos", "mail" => [ "mail_subject" => "Nuevo mensaje" ] diff --git a/ci4/app/Models/Chat/ChatModel.php b/ci4/app/Models/Chat/ChatModel.php index 5ac10631..bc3351c1 100755 --- a/ci4/app/Models/Chat/ChatModel.php +++ b/ci4/app/Models/Chat/ChatModel.php @@ -136,7 +136,7 @@ class ChatModel extends Model $chatDeparmentModel = model(ChatDeparmentModel::class); $ot = $model->find($orden_trabajo_id); return $this->insert([ - "title" => "[OT]".$ot->id . "[" . $chatDeparmentModel->getDisplay($chat_department_id) . "]", + "title" => "[OT]" . $ot->id . "[" . $chatDeparmentModel->getDisplay($chat_department_id) . "]", "orden_trabajo_id" => $orden_trabajo_id, "chat_department_id" => $chat_department_id ]); @@ -381,8 +381,7 @@ class ChatModel extends Model $row->title = $row->facturaId; $rows_new[] = $row; - } - elseif ($row->ordenTrabajoId) { + } elseif ($row->ordenTrabajoId) { // $row->model = $facturaModel->find($row->facturaId); $row->uri = "/chat/ot/" . $row->ordenTrabajoId . "#accordionChatOrdenTrabajo"; $row->avatar = "OT"; @@ -439,8 +438,7 @@ class ChatModel extends Model $row->chatDisplay .= "[INTERNAL]"; $row->title = $row->facturaId; $rows_new[] = $row; - } - elseif ($row->ordenTrabajoId) { + } elseif ($row->ordenTrabajoId) { $row->uri = "/produccion/ordentrabajo/edit/" . $row->ordenTrabajoId . "#accordionChatOrdenTrabajo"; $row->avatar = "OT"; $row->chatDisplay .= "[INTERNAL]"; @@ -847,7 +845,7 @@ class ChatModel extends Model ->join("users u", "u.id = cm.sender_id", 'left') ->where("chats.presupuesto_id is NOT NULL", NULL, FALSE); - if (auth()->user()->inGroup("cliente-administrador","cliente")) { + if (auth()->user()->inGroup("cliente-administrador", "cliente")) { $query->where('presupuestos.cliente_id', auth()->user()->cliente_id) ->where("chats.chat_department_id is NOT NULL", NULL, FALSE); } @@ -878,7 +876,7 @@ class ChatModel extends Model ->join("presupuestos", "presupuestos.id = pedidos_linea.presupuesto_id", 'left') ->where("chats.pedido_id is NOT NULL", NULL, FALSE); - if (auth()->user()->inGroup("cliente-administrador","cliente")) { + if (auth()->user()->inGroup("cliente-administrador", "cliente")) { $query->where('presupuestos.cliente_id', auth()->user()->cliente_id) ->where("chats.chat_department_id is NOT NULL", NULL, FALSE); } @@ -908,10 +906,10 @@ class ChatModel extends Model ->join("facturas", "facturas.id = chats.factura_id", "left") ->where("chats.factura_id is NOT NULL", NULL, FALSE); - if (auth()->user()->inGroup("cliente-administrador","cliente")) { - $query->where('facturas.cliente_id', auth()->user()->cliente_id) - ->where("chats.chat_department_id is NOT NULL", NULL, FALSE); - } + if (auth()->user()->inGroup("cliente-administrador", "cliente")) { + $query->where('facturas.cliente_id', auth()->user()->cliente_id) + ->where("chats.chat_department_id is NOT NULL", NULL, FALSE); + } return $query->groupBy('chatMessageId'); } public function getQueryDatatableMessageOrdenTrabajo(int $user_id): BaseBuilder @@ -938,10 +936,42 @@ class ChatModel extends Model ->join("ordenes_trabajo", "ordenes_trabajo.id = chats.orden_trabajo_id", "left") ->where("chats.orden_trabajo_id is NOT NULL", NULL, FALSE); - if (auth()->user()->inGroup("cliente-administrador","cliente")) { - $query->where('facturas.cliente_id', auth()->user()->cliente_id) - ->where("chats.chat_department_id is NOT NULL", NULL, FALSE); - } + if (auth()->user()->inGroup("cliente-administrador", "cliente")) { + $query->where('facturas.cliente_id', auth()->user()->cliente_id) + ->where("chats.chat_department_id is NOT NULL", NULL, FALSE); + } + return $query->groupBy('chatMessageId'); + } + public function getQueryDatatableDirectMessages(): BaseBuilder + { + $query = $this->builder() + ->select([ + "chats.id", + "cm.id as chatMessageId", + "u.id as userId", + "cm.message", + "chats.created_at", + " + ( + 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_messages cm", "chats.id = cm.chat_id", "left") + ->join("users u", "u.id = cm.sender_id", 'left') + ->where("chats.presupuesto_id", NULL) + ->where("chats.pedido_id", NULL) + ->where("chats.factura_id", NULL) + ->where("chats.orden_trabajo_id", NULL) + ->groupStart() + ->orWhere("cm.receiver_id",auth()->user()->id) + ->orWhere("cm.sender_id",auth()->user()->id) + ->groupEnd(); + return $query->groupBy('chatMessageId'); } public function createNewDirectChat(string $title, string $message, array $users) diff --git a/ci4/app/Views/themes/vuexy/form/mensajes/mensajesView.php b/ci4/app/Views/themes/vuexy/form/mensajes/mensajesView.php index f22cbaee..e89e19c9 100755 --- a/ci4/app/Views/themes/vuexy/form/mensajes/mensajesView.php +++ b/ci4/app/Views/themes/vuexy/form/mensajes/mensajesView.php @@ -15,26 +15,33 @@ use Config\App;