diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php
index 8ac4ad83..b40d287a 100644
--- a/ci4/app/Config/Routes.php
+++ b/ci4/app/Config/Routes.php
@@ -908,7 +908,7 @@ $routes->group('chat', ['namespace' => 'App\Controllers\Chat'], function ($route
$routes->post('department', 'ChatController::store_chat_department', ['as' => 'storeChatDepartment']);
$routes->delete('department/(:num)', 'ChatController::delete_chat_department/$1', ['as' => 'deleteChatDepartment']);
$routes->post('department/update/(:num)', 'ChatController::update_chat_department/$1', ['as' => 'updateChatDepartment']);
- $routes->get('departments', 'ChatController::get_chat_departments', ['as' => 'getChatDepartments']);
+ $routes->get('departments/(:alpha)/(:num)', 'ChatController::get_chat_departments/$1/$2', ['as' => 'getChatDepartments']);
$routes->get('departments/select', 'ChatController::get_chat_department_select', ['as' => 'getChatDepartmentSelect']);
$routes->get('department/presupuesto/(:num)/(:num)', 'ChatController::get_chat_presupuesto/$1/$2', ['as' => 'getChatPresupuesto']);
$routes->get('department/pedido/(:num)/(:num)', 'ChatController::get_chat_pedido/$1/$2', ['as' => 'getChatPedido']);
@@ -928,9 +928,7 @@ $routes->group('chat', ['namespace' => 'App\Controllers\Chat'], function ($route
$routes->get('(:num)', 'ChatController::get_chat/$1', ['as' => 'getChat']);
$routes->post('message/error/presupuesto', 'ChatController::store_chat_error_message', ['as' => 'storeChatErrorMessage']);
- $routes->post('message/presupuesto', 'ChatController::store_chat_message_presupuesto', ['as' => 'storeChatMessagePresupuesto']);
- $routes->post('message/pedido', 'ChatController::store_chat_message_pedido', ['as' => 'storeChatMessagePedido']);
- $routes->post('message/factura', 'ChatController::store_chat_message_factura', ['as' => 'storeChatMessageFactura']);
+ $routes->post('message/(:alpha)', 'ChatController::store_message/$1', ['as' => 'storeChatMessage']);
$routes->post('message/internal', 'ChatController::store_chat_message_single', ['as' => 'storeChatMessageSingle']);
$routes->get('contacts', 'ChatController::get_chat_internal_contacts', ['as' => 'getChatInternalContacts']);
$routes->get('contacts/(:num)', 'ChatController::get_chat_internal_contact/$1', ['as' => 'getChatInternalContact']);
@@ -939,15 +937,11 @@ $routes->group('chat', ['namespace' => 'App\Controllers\Chat'], function ($route
$routes->get('users/internal', 'ChatController::get_chat_users_internal', ['as' => 'getChatUsersInternal']);
$routes->get('users/all', 'ChatController::get_chat_users_all', ['as' => 'getChatUsersAll']);
- $routes->post('hebra/presupuesto', 'ChatController::store_hebra_presupuesto', ['as' => 'storeHebraPresupuesto']);
- $routes->post('hebra/pedido', 'ChatController::store_hebra_pedido', ['as' => 'storeHebraPedido']);
- $routes->post('hebra/factura', 'ChatController::store_hebra_factura', ['as' => 'storeHebraFactura']);
+ $routes->post('hebra/(:alpha)', 'ChatController::store_hebra/$1', ['as' => 'storeHebra']);
$routes->post('hebra/(:num)', 'ChatController::update_hebra/$1', ['as' => 'updateHebra']);
- $routes->get('hebra/presupuesto/(:num)', "ChatController::get_hebra_presupuesto/$1", ["as" => "getHebraPresupuesto"]);
- $routes->get('hebra/pedido/(:num)', "ChatController::get_hebra_pedido/$1", ["as" => "getHebraPedido"]);
- $routes->get('hebra/factura/(:num)', "ChatController::get_hebra_factura/$1", ["as" => "getHebraFactura"]);
+ $routes->get('hebra/(:alpha)/(:num)', "ChatController::get_hebra/$1/$2", ["as" => "getHebra"]);
- $routes->get('users/notifications-unviewed/(:num)','ChatController::get_notifications_not_viewed_from_chat/$1');
+ $routes->get('users/message/notifications-unviewed/(:num)','ChatController::get_notifications_not_viewed_from_message/$1');
});
diff --git a/ci4/app/Config/Services.php b/ci4/app/Config/Services.php
index 33330fa1..9309734f 100755
--- a/ci4/app/Config/Services.php
+++ b/ci4/app/Config/Services.php
@@ -2,6 +2,7 @@
namespace Config;
+use App\Services\ChatService;
use App\Services\FTPService;
use App\Services\MaquinaService;
use App\Services\MessageService;
@@ -53,4 +54,8 @@ class Services extends BaseService
{
return new MessageService();
}
+ public static function chat()
+ {
+ return new ChatService();
+ }
}
diff --git a/ci4/app/Controllers/Chat/ChatController.php b/ci4/app/Controllers/Chat/ChatController.php
index 840785ce..b54ec909 100644
--- a/ci4/app/Controllers/Chat/ChatController.php
+++ b/ci4/app/Controllers/Chat/ChatController.php
@@ -14,6 +14,7 @@ use App\Models\Facturas\FacturaModel;
use App\Models\Pedidos\PedidoModel;
use App\Models\Presupuestos\PresupuestoModel;
use App\Models\Usuarios\UserModel;
+use App\Services\ChatService;
use App\Services\MessageService;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\HTTP\RequestInterface;
@@ -34,7 +35,7 @@ class ChatController extends BaseController
protected ChatUser $chatUserModel;
protected ChatNotification $chatNotificationModel;
protected Validation $validation;
-
+ protected ChatService $chatService;
protected array $viewData;
protected static $viewPath = 'themes/vuexy/form/mensajes/';
@@ -56,12 +57,15 @@ class ChatController extends BaseController
$this->chatUserModel = model(ChatUser::class);
$this->chatNotificationModel = model(ChatNotification::class);
$this->validation = service("validation");
+ $this->chatService = service("chat");
+
}
public function index() {}
- public function get_chat_departments()
+ public function get_chat_departments(string $model,int $modelId)
{
- $data = $this->chatDeparmentModel->getChatDepartments();
+ $data = $this->chatService->getChatDepartments($model,$modelId);
+
return $this->response->setJSON($data);
}
public function get_chat_department_select()
@@ -73,6 +77,7 @@ class ChatController extends BaseController
{
$data = [
+ "department" => $this->chatDeparmentModel->find($chat_department_id),
"chat" => null,
"messages" => null,
"count" => 0,
@@ -82,6 +87,7 @@ class ChatController extends BaseController
$data["messages"] = $this->chatMessageModel->get_chat_messages($chat->id);
$this->chatMessageModel->set_chat_department_messages_as_read($chat->id);
$this->chatModel->setAsViewedChatUserNotifications($chat->id, auth()->user()->id);
+
$data["count"] = count($data["messages"]);
}
$data["chat"] = $chat;
@@ -91,6 +97,7 @@ class ChatController extends BaseController
{
$data = [
+ "department" => $this->chatDeparmentModel->find($chat_department_id),
"chat" => null,
"messages" => null,
"count" => 0,
@@ -110,6 +117,7 @@ class ChatController extends BaseController
{
$data = [
+ "department" => $this->chatDeparmentModel->find($chat_department_id),
"chat" => null,
"messages" => null,
"count" => 0,
@@ -200,115 +208,15 @@ class ChatController extends BaseController
$data = $this->chatModel->getChat($chat_id);
return $this->response->setJSON($data);
}
- public function store_chat_message_presupuesto()
+ public function store_message($model)
{
$data = $this->request->getPost();
- // $data = $this->chatModel->createChatPresupuesto();
- $existChat = $this->chatModel->existChatPresupuesto($data["chat_department_id"], $data["model_id"]);
- if ($existChat == false) {
- $chatId = $this->chatModel->createChatPresupuesto($data["chat_department_id"], $data["model_id"]);
- } else {
- $chat = $this->chatModel->getChatPresupuesto($data["chat_department_id"], $data["model_id"]);
- $chatId = $chat->id;
- }
- $chat_message_id = $this->chatMessageModel->insert(["chat_id" => $chatId, "sender_id" => auth()->user()->id, "message" => $data["message"]]);
- $dataResponse = $this->chatMessageModel->find($chat_message_id);
- $chatDepartmentUsers = $this->chatDeparmentModel->getChatDepartmentUsers($data["chat_department_id"]);
- if (auth()->user()->inGroup('admin')) {
- $cliente_in_department_count = $this->chatDeparmentUserModel->where('chat_department_id', $data["chat_department_id"])->where('user_id', $data['client'])->where('presupuesto_id', $data['model_id'])->countAllResults();
- if ($cliente_in_department_count == 0) {
- $this->chatDeparmentUserModel->insert(['chat_department_id' => $data["chat_department_id"], 'user_id' => $data['client'], 'presupuesto_id' => $data['model_id']]);
- }
- }
- $chatExternalUsers = $this->chatDeparmentModel->getChatDeparmentPresupuestoUsers($data["chat_department_id"], $data["model_id"]);
- $auth_user_in_department_count = $this->chatDeparmentUserModel->where('chat_department_id', $data["chat_department_id"])->where('user_id', auth()->user()->id)->countAllResults();
+ $chatMessageEntity = $this->chatService->storeChatMessage($data["chat_department_id"],$model,$data["model_id"],$data);
+ return $this->response->setJSON($chatMessageEntity);
- if ($auth_user_in_department_count) {
- $this->chatDeparmentUserModel->insert(['chat_department_id' => $data["chat_department_id"], 'user_id' => auth()->user()->id, 'presupuesto_id' => $data['model_id']]);
- }
-
- foreach ($chatDepartmentUsers as $user) {
- if ($user->id != auth()->user()->id) {
- $this->chatNotificationModel->insert(["chat_message_id" => $chat_message_id, "user_id" => $user->id]);
- }
- }
- foreach ($chatExternalUsers as $user) {
- $this->chatNotificationModel->insert(["chat_message_id" => $chat_message_id, "user_id" => $user->id]);
- }
- return $this->response->setJSON($dataResponse);
}
- public function store_chat_message_pedido()
- {
- $data = $this->request->getPost();
- $existChat = $this->chatModel->existChatPedido($data["chat_department_id"], $data["model_id"]);
- if ($existChat == false) {
- $chatId = $this->chatModel->createChatPedido($data["chat_department_id"], $data["model_id"]);
- } else {
- $chat = $this->chatModel->getChatPedido($data["chat_department_id"], $data["model_id"]);
- $chatId = $chat->id;
- }
- $chat_message_id = $this->chatMessageModel->insert(["chat_id" => $chatId, "sender_id" => auth()->user()->id, "message" => $data["message"]]);
- $dataResponse = $this->chatMessageModel->find($chat_message_id);
- $chatDepartmentUsers = $this->chatDeparmentModel->getChatDepartmentUsers($data["chat_department_id"]);
- if (auth()->user()->inGroup('admin')) {
- $cliente_in_department_count = $this->chatDeparmentUserModel->where('chat_department_id', $data["chat_department_id"])->where('user_id', $data['client'])->where('pedido_id', $data['model_id'])->countAllResults();
- if ($cliente_in_department_count == 0) {
- $this->chatDeparmentUserModel->insert(['chat_department_id' => $data["chat_department_id"], 'user_id' => $data['client'], 'pedido_id' => $data['model_id']]);
- }
- }
- $chatExternalUsers = $this->chatDeparmentModel->getChatDeparmentPedidoUsers($data["chat_department_id"], $data["model_id"]);
- $auth_user_in_department_count = $this->chatDeparmentUserModel->where('chat_department_id', $data["chat_department_id"])->where('user_id', auth()->user()->id)->countAllResults();
- if ($auth_user_in_department_count == 0) {
- $this->chatDeparmentUserModel->insert(['chat_department_id' => $data["chat_department_id"], 'user_id' => auth()->user()->id, 'pedido_id' => $data['model_id']]);
- }
-
- foreach ($chatDepartmentUsers as $user) {
- if ($user->id != auth()->user()->id) {
- $this->chatNotificationModel->insert(["chat_message_id" => $chat_message_id, "user_id" => $user->id]);
- }
- }
- foreach ($chatExternalUsers as $user) {
- $this->chatNotificationModel->insert(["chat_message_id" => $chat_message_id, "user_id" => $user->id]);
- }
- return $this->response->setJSON($dataResponse);
- }
- public function store_chat_message_factura()
- {
- $data = $this->request->getPost();
- $existChat = $this->chatModel->existChatPedido($data["chat_department_id"], $data["model_id"]);
- if ($existChat == false) {
- $chatId = $this->chatModel->createChatPedido($data["chat_department_id"], $data["model_id"]);
- } else {
- $chat = $this->chatModel->getChatPedido($data["chat_department_id"], $data["model_id"]);
- $chatId = $chat->id;
- }
- $chat_message_id = $this->chatMessageModel->insert(["chat_id" => $chatId, "sender_id" => auth()->user()->id, "message" => $data["message"]]);
- $dataResponse = $this->chatMessageModel->find($chat_message_id);
- $chatDepartmentUsers = $this->chatDeparmentModel->getChatDepartmentUsers($data["chat_department_id"]);
- if (auth()->user()->inGroup('admin')) {
- $cliente_in_department_count = $this->chatDeparmentUserModel->where('chat_department_id', $data["chat_department_id"])->where('user_id', $data['client'])->where('pedido_id', $data['model_id'])->countAllResults();
- if ($cliente_in_department_count == 0) {
- $this->chatDeparmentUserModel->insert(['chat_department_id' => $data["chat_department_id"], 'user_id' => $data['client'], 'factura_id' => $data['model_id']]);
- }
- }
- $chatExternalUsers = $this->chatDeparmentModel->getChatDeparmentPedidoUsers($data["chat_department_id"], $data["model_id"]);
- $auth_user_in_department_count = $this->chatDeparmentUserModel->where('chat_department_id', $data["chat_department_id"])->where('user_id', auth()->user()->id)->countAllResults();
- if ($auth_user_in_department_count == 0) {
- $this->chatDeparmentUserModel->insert(['chat_department_id' => $data["chat_department_id"], 'user_id' => auth()->user()->id, 'pedido_id' => $data['model_id']]);
- }
-
- foreach ($chatDepartmentUsers as $user) {
- if ($user->id != auth()->user()->id) {
- $this->chatNotificationModel->insert(["chat_message_id" => $chat_message_id, "user_id" => $user->id]);
- }
- }
- foreach ($chatExternalUsers as $user) {
- $this->chatNotificationModel->insert(["chat_message_id" => $chat_message_id, "user_id" => $user->id]);
- }
- return $this->response->setJSON($dataResponse);
- }
public function store_chat_message_single()
{
$data = $this->request->getPost();
@@ -369,68 +277,24 @@ class ChatController extends BaseController
public function get_chat_cliente()
{
$cliente_id = auth()->user()->cliente_id;
- $response = [];
- if ($cliente_id) {
- // $data = $this->clienteModel->getClienteDataPresupuestoPedidoFactura($cliente_id);
- $response["internals"] = $this->chatModel->getChatDepartmentNotifications();
- $response["totalMessages"] = 0;
- $mensajes_directos = $this->chatModel->getChatDirectMessageNotifications();
- // $response["chatFacturas"] = $this->chatModel->getClienteChatFacturas($data["facturas"]);
- // foreach ($response["chatFacturas"] as $key => $value) {
- // $response["totalMessages"] += $value->unreadMessages;
- // }
- // $response["chatPresupuestos"] = $this->chatModel->getClienteChatPresupuestos($data["presupuestos"]);
- // foreach ($response["chatPresupuestos"] as $key => $value) {
- // $response["totalMessages"] += $value->unreadMessages;
- // }
- foreach ($mensajes_directos as $value) {
- $response["internals"][] = $value;
- $response["totalMessages"] += $value->unreadMessages;
- }
- // $response["chatPedidos"] = $this->chatModel->getClienteChatPedidos($data["pedidos"]);
- // foreach ($response["chatPedidos"] as $key => $value) {
- // $response["totalMessages"] += $value->unreadMessages;
- // }
- // $response["data"] = $data;
- $response["totalMessages"] = 0;
- foreach ($response["internals"] as $key => $value) {
- $response["totalMessages"] += $value->unreadMessages;
- }
- } else {
- $response["internals"] = $this->chatModel->getChatDepartmentNotifications();
- $internal_notifications = $this->chatModel->getChatInternalNotifications();
- $mensajes_directos = $this->chatModel->getChatDirectMessageNotifications();
- foreach ($internal_notifications as $value) {
- $response["internals"][] = $value;
- }
- foreach ($mensajes_directos as $value) {
- $response["internals"][] = $value;
- }
- $response["totalMessages"] = 0;
- foreach ($response["internals"] as $key => $value) {
- $response["totalMessages"] += $value->unreadMessages;
- }
- }
+ $response = $this->chatService->getAuthUserNotifications();
return $this->response->setJSON($response);
}
public function get_chat_department_presupuesto_users(int $chat_department_id, int $presupuesto_id)
{
- $adminUsers = $this->chatDeparmentModel->getChatDepartmentUsers($chat_department_id);
- $externalUsers = $this->chatDeparmentModel->getChatDeparmentPresupuestoUsers($chat_department_id, $presupuesto_id);
- return $this->response->setJSON(['admin_users' => $adminUsers, 'external_users' => $externalUsers]);
+ $data = $this->chatDeparmentModel->find($chat_department_id)->withUsers($presupuesto_id, 'presupuesto');
+ return $this->response->setJSON($data);
}
public function get_chat_department_pedido_users(int $chat_department_id, $pedido_id)
{
- $adminUsers = $this->chatDeparmentModel->getChatDepartmentUsers($chat_department_id);
- $externalUsers = $this->chatDeparmentModel->getChatDeparmentPedidoUsers($chat_department_id, $pedido_id);
- return $this->response->setJSON(['admin_users' => $adminUsers, 'external_users' => $externalUsers]);
+ $data = $this->chatDeparmentModel->find($chat_department_id)->withUsers($pedido_id, 'pedido');
+ return $this->response->setJSON($data);
}
public function get_chat_department_factura_users(int $chat_department_id, $factura_id)
{
- $adminUsers = $this->chatDeparmentModel->getChatDepartmentUsers($chat_department_id);
- $externalUsers = $this->chatDeparmentModel->getChatDeparmentFacturaUsers($chat_department_id, $factura_id);
- return $this->response->setJSON(['admin_users' => $adminUsers, 'external_users' => $externalUsers]);
+ $data = $this->chatDeparmentModel->find($chat_department_id)->withUsers($factura_id, 'factura');
+ return $this->response->setJSON($data);
}
public function get_chat_users_internal()
{
@@ -536,80 +400,14 @@ class ChatController extends BaseController
return $this->response->setJSON($query->get()->getResultObject());
}
- public function store_hebra_presupuesto()
+ public function store_hebra(string $model)
{
$auth_user = auth()->user();
$bodyData = $this->request->getPost();
- $chat_id = $this->chatModel->insert([
- "presupuesto_id" => $bodyData["modelId"],
- "title" => $bodyData["title"]
- ]);
- $chatMessageId = $this->chatMessageModel->insert([
- "chat_id" => $chat_id,
- "message" => $bodyData["message"],
- "sender_id" => $auth_user->id
- ]);
- if (isset($bodyData["users"])) {
- $bodyData["users"][] = $auth_user->id;
- $chatUserData = array_map(fn($x) => ["user_id" => $x, "chat_id" => $chat_id], $bodyData["users"]);
- $this->chatUserModel->insertBatch($chatUserData);
- foreach ($bodyData["users"] as $userId) {
- $this->chatNotificationModel->insert(
- ["chat_message_id" => $chatMessageId, "user_id" => $userId]
- );
- }
- }
- return $this->response->setJSON(["message" => "Hebra creada correctamente", "status" => true]);
+ $status = $this->chatService->storeHebra($model,$bodyData['modelId'],$bodyData);
+ return $this->response->setJSON(["message" => "Hebra creada correctamente", "status" => $status]);
}
- public function store_hebra_pedido()
- {
- $bodyData = $this->request->getPost();
- $chat_id = $this->chatModel->insert([
- "pedido_id" => $bodyData["modelId"],
- "title" => $bodyData["title"]
-
- ]);
- $chatMessageId = $this->chatMessageModel->insert([
- "chat_id" => $chat_id,
- "message" => $bodyData["message"],
- "sender_id" => auth()->user()->id
- ]);
- if (isset($bodyData["users"])) {
- $chatUserData = array_map(fn($x) => ["user_id" => $x, "chat_id" => $chat_id], $bodyData["users"]);
- $this->chatUserModel->insertBatch($chatUserData);
- foreach ($bodyData["users"] as $userId) {
- $this->chatNotificationModel->insert(
- ["chat_message_id" => $chatMessageId, "user_id" => $userId]
- );
- }
- }
- return $this->response->setJSON(["message" => "Hebra creada correctamente", "status" => true]);
- }
-
- public function store_hebra_factura()
- {
- $bodyData = $this->request->getPost();
- $chat_id = $this->chatModel->insert([
- "factura_id" => $bodyData["modelId"],
- "title" => $bodyData["title"]
- ]);
- $chatMessageId = $this->chatMessageModel->insert([
- "chat_id" => $chat_id,
- "message" => $bodyData["message"],
- "sender_id" => auth()->user()->id
- ]);
- if (isset($bodyData["users"])) {
- $chatUserData = array_map(fn($x) => ["user_id" => $x, "chat_id" => $chat_id], $bodyData["users"]);
- $this->chatUserModel->insertBatch($chatUserData);
- foreach ($bodyData["users"] as $userId) {
- $this->chatNotificationModel->insert(
- ["chat_message_id" => $chatMessageId, "user_id" => $userId]
- );
- }
- }
- return $this->response->setJSON(["message" => "Hebra creada correctamente", "status" => true]);
- }
public function update_hebra($chat_id)
{
$bodyData = $this->request->getPost();
@@ -620,11 +418,7 @@ class ChatController extends BaseController
]);
$actualUsers = $this->chatUserModel->builder()->select("user_id")->where("chat_id", $chat_id)->get()->getResultArray();
$actualUsersArray = array_map(fn($x) => $x["user_id"], $actualUsers);
- foreach ($actualUsersArray as $key => $user_id) {
- $this->chatNotificationModel->insert(
- ["chat_message_id" => $chatMessageId, "user_id" => $user_id]
- );
- }
+
if (isset($bodyData["users"])) {
foreach ($bodyData["users"] as $userId) {
if (in_array($userId, $actualUsersArray) == false) {
@@ -638,55 +432,13 @@ class ChatController extends BaseController
}
return $this->response->setJSON(["message" => "Hebra actualizada correctamente", "status" => true]);
}
- public function get_hebra_presupuesto($presupuesto_id)
+ public function get_hebra(string $model,int $modelId)
{
- $data = $this->chatModel->getPresupuestoHebras($presupuesto_id);
- $notifications = $this->chatModel->builder()->select([
- "chat_notifications.id"
- ])
- ->join("chat_messages", "chat_messages.chat_id = chats.id", "left")
- ->join("chat_notifications", "chat_notifications.chat_message_id = chat_messages.id", "left")
- ->where("chats.presupuesto_id", $presupuesto_id)
- ->where("chat_notifications.user_id", auth()->user()->id)
- ->get()->getResultArray();
- foreach ($notifications as $notification) {
- $this->chatNotificationModel->update($notification["id"], ["viewed" => true]);
- }
- return $this->response->setJSON($data);
- }
- public function get_hebra_pedido($pedido_id)
- {
- $data = $this->chatModel->getPedidoHebras($pedido_id);
- $notifications = $this->chatModel->builder()->select([
- "chat_notifications.id"
- ])
- ->join("chat_messages", "chat_messages.chat_id = chats.id", "left")
- ->join("chat_notifications", "chat_notifications.chat_message_id = chat_messages.id", "left")
- ->where("chats.pedido_id", $pedido_id)
- ->where("chat_notifications.user_id", auth()->user()->id)
- ->get()->getResultArray();
- foreach ($notifications as $notification) {
- $this->chatNotificationModel->update($notification["id"], ["viewed" => true]);
- }
- return $this->response->setJSON($data);
- }
- public function get_hebra_factura($factura_id)
- {
- $data = $this->chatModel->getFacturaHebras($factura_id);
- $notifications = $this->chatModel->builder()->select([
- "chat_notifications.id"
- ])
- ->join("chat_messages", "chat_messages.chat_id = chats.id", "left")
- ->join("chat_notifications", "chat_notifications.chat_message_id = chat_messages.id", "left")
- ->where("chats.factura_id", $factura_id)
- ->where("chat_notifications.user_id", auth()->user()->id)
- ->get()->getResultArray();
- foreach ($notifications as $notification) {
- $this->chatNotificationModel->update($notification["id"], ["viewed" => true]);
- }
+ $data = $this->chatService->getHebras($model,$modelId);
return $this->response->setJSON($data);
}
+
public function datatable_messages()
{
$auth_user_id = auth()->user()->id;
@@ -716,9 +468,9 @@ class ChatController extends BaseController
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") : "")
- ->add("creator", fn($q) => $this->chatModel->getChatFirstUser($q->id)->userFullName)
- ->add("viewed", fn($q) => $this->chatModel->isMessageChatViewed($q->id, $auth_user_id))
- ->add("action", fn($q) => ["type" => "presupuesto", "modelId" => $q->id, "isAdmin" => $isAdmin, "lang" => [
+ ->add("viewed", fn($q) => $this->chatModel->isMessageChatViewed($q->chatMessageId))
+ ->edit("creator",fn($q) => $q->userId == $auth_user_id ? ''.lang("App.me").'' : $q->creator)
+ ->add("action", fn($q) => ["type" => "presupuesto", "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')
]])
@@ -732,9 +484,9 @@ class ChatController extends BaseController
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") : "")
- ->add("creator", fn($q) => $this->chatModel->getChatFirstUser($q->id)->userFullName)
- ->add("viewed", fn($q) => $this->chatModel->isMessageChatViewed($q->id, $auth_user_id))
- ->add("action", fn($q) => ["type" => "pedido", "modelId" => $q->id, "isAdmin" => $isAdmin, "lang" => [
+ ->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" => "pedido", "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')
]])
@@ -749,27 +501,26 @@ class ChatController extends BaseController
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") : "")
- ->add("creator", fn($q) => $this->chatModel->getChatFirstUser($q->id)->userFullName)
- ->add("viewed", fn($q) => $this->chatModel->isMessageChatViewed($q->id, $auth_user_id))
- ->add("action", fn($q) => ["type" => "factura", "modelId" => $q->id, "isAdmin" => $isAdmin, "lang" => [
+ ->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" => "factura", "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_chat(int $chat_id)
+ public function get_notifications_not_viewed_from_message(int $chat_message_id)
{
- $unviewedNotifications = $this->chatModel->getUsersNotificationNotViewedFromChat($chat_id);
- $viewedNotifications = $this->chatModel->getUsersNotificationViewedFromChat($chat_id);
+ $unviewedNotifications = $this->chatModel->getUsersNotificationNotViewedFromChat($chat_message_id);
+ // $viewedNotifications = $this->chatModel->getUsersNotificationViewedFromChat($chat_message_id);
return $this->response->setJSON(
[
"data" => [
- "unviewedNotifications" => $unviewedNotifications,
- "viewedNotifications" => $viewedNotifications
+ "notifications" => $unviewedNotifications,
],
- "chat_id" => $chat_id
+ "chat_message_id" => $chat_message_id
]
);
}
diff --git a/ci4/app/Entities/Chat/ChatDepartmentEntity.php b/ci4/app/Entities/Chat/ChatDepartmentEntity.php
new file mode 100644
index 00000000..5017c310
--- /dev/null
+++ b/ci4/app/Entities/Chat/ChatDepartmentEntity.php
@@ -0,0 +1,79 @@
+ null,
+ "name" => null,
+ "display" => null,
+ "description" => null,
+ "type" => null,
+ ];
+
+
+ protected $casts = [
+ "name" => "string",
+ "display" => "string",
+ "description" => "?string",
+ "type" => "string",
+ ];
+
+ /**
+ * Chat department users that are in department as administrador. These users belongs to department in all chats in any model associated and
+ * will receive notifications always
+ *
+ * @return array
+ */
+ public function chatDepartmentAdminUsers(){
+ $m = model(ChatDeparmentUserModel::class);
+ $chatDepartmentUsers = $m->where('chat_department_id',$this->attributes['id'])
+ ->where('pedido_id',null)
+ ->where('factura_id',null)
+ ->where('presupuesto_id',null)->findAll();
+ return $chatDepartmentUsers;
+ }
+ /**
+ * Chat department users that has been associated to the department by sending a
+ * message and users that are not as admin of the department that has written a message.
+ *
+ * @param integer $modelFkId Id from model associated
+ * @param string $model Name of the model associated `['presupuesto','pedido','factura']`
+ * @return array
+ */
+ public function chatDepartmentExternalUsers(int $modelFkId,string $model = "presupuesto") : array
+ {
+ $m = model(ChatDeparmentUserModel::class);
+ $m->where('chat_department_id',$this->attributes['id']);
+
+ switch ($model) {
+ case 'presupuesto':
+ $m->where('presupuesto_id',$modelFkId);
+ break;
+ case 'pedido':
+ $m->where('pedido_id',$modelFkId);
+ break;
+ case 'factura':
+ $m->where('pedido_id',$modelFkId);
+ break;
+ default:
+ break;
+ }
+ return $m->findAll() ?? [];
+
+ }
+ public function withUsers(int $modelFkId,string $model = "presupuesto") : self
+ {
+ $externalUsers = $this->chatDepartmentExternalUsers($modelFkId,$model);
+ $this->attributes["adminUsers"] = array_map(fn(ChatDepartmentUserEntity $du) => $du->user()->withAvatar() , $this->chatDepartmentAdminUsers());
+ $this->attributes["externalUsers"] = array_map(fn(ChatDepartmentUserEntity $du) => $du->user()->withAvatar() , $externalUsers);
+ return $this;
+ }
+
+}
diff --git a/ci4/app/Entities/Chat/ChatDepartmentUserEntity.php b/ci4/app/Entities/Chat/ChatDepartmentUserEntity.php
new file mode 100644
index 00000000..c261f568
--- /dev/null
+++ b/ci4/app/Entities/Chat/ChatDepartmentUserEntity.php
@@ -0,0 +1,60 @@
+ null,
+ "user_id" => null,
+ "pedido_id" => null,
+ "factura_id" => null,
+ "presupuesto_id" => null,
+ ];
+
+
+ protected $casts = [
+ "chat_department_id" => "integer",
+ "user_id" => "integer",
+ "pedido_id" => "?integer",
+ "factura_id" => "?integer",
+ "presupuesto_id" => "?integer",
+ ];
+
+ public function user() : ?UserEntity
+ {
+ $m = model(UserModel::class);
+ return $m->find($this->attributes['user_id']);
+ }
+ public function department() : ?ChatDepartmentEntity
+ {
+ $m = model(ChatDeparmentModel::class);
+ return $m->find($this->attributes['chat_department_id']);
+ }
+ public function presupuesto() : ?PresupuestoEntity
+ {
+ $m = model(PresupuestoModel::class);
+ return $m->find($this->attributes['presupuesto_id']);
+ }
+ public function pedido() : ?PedidoEntity
+ {
+ $m = model(PedidoModel::class);
+ return $m->find($this->attributes['pedido_id']);
+ }
+ public function factura() : ?FacturaEntity
+ {
+ $m = model(FacturaEntity::class);
+ return $m->find($this->attributes['factura_id']);
+ }
+
+}
diff --git a/ci4/app/Entities/Chat/ChatEntity.php b/ci4/app/Entities/Chat/ChatEntity.php
new file mode 100644
index 00000000..1669f3cd
--- /dev/null
+++ b/ci4/app/Entities/Chat/ChatEntity.php
@@ -0,0 +1,148 @@
+ null,
+ "chat_department_id" => null,
+ "pedido_id" => null,
+ "presupuesto_id" => null,
+ "factura_id" => null,
+ "title" => null
+ ];
+
+
+ protected $casts = [
+ "chat_department_id" => "?integer",
+ "pedido_id" => "?integer",
+ "presupuesto_id" => "?integer",
+ "factura_id" => "?integer",
+ "title" => "string"
+ ];
+
+ public function withMessages(): self
+ {
+ $auth_user = auth()->user();
+ $messages = $this->messages();
+ foreach ($messages as $key => $message) {
+ if ($message->sender_id == $auth_user->id) {
+ $message->pos = 'right';
+ } else {
+ $message->pos = 'left';
+ }
+ }
+ $this->attributes["messages"] = $messages;
+ return $this;
+ }
+ public function department(): ?ChatDepartmentEntity
+ {
+ $m = model(ChatDeparmentModel::class);
+ return $m->find($this->attributes['chat_department_id']);
+ }
+ public function presupuesto(): ?PresupuestoEntity
+ {
+ $m = model(PresupuestoModel::class);
+ return $m->find($this->attributes['presupuesto_id']);
+ }
+ public function pedido(): ?PedidoEntity
+ {
+ $m = model(PedidoModel::class);
+ return $m->find($this->attributes['pedido_id']);
+ }
+ public function factura(): ?FacturaEntity
+ {
+ $m = model(FacturaEntity::class);
+ return $m->find($this->attributes['factura_id']);
+ }
+ public function messages(): ?array
+ {
+ $m = model(ChatMessageModel::class);
+
+ $messages = $m->where('chat_id', $this->attributes["id"])->findAll();
+ return array_map(fn(ChatMessageEntity $m) => $m->withUser(), $messages);
+ }
+ public function withHebra(): self
+ {
+ $this->attributes["messages"] = array_map(fn(ChatMessageEntity $m) => $m->withUser(), $this->messages());
+ $this->attributes["internalUsers"] = array_map(fn(ChatUserEntity $u) => $u->user(), $this->internalUsers());
+ return $this;
+ }
+ /**
+ * Undocumented function
+ *
+ * @return array
+ */
+ public function internalUsers(): array
+ {
+ $m = model(ChatUser::class);
+ return $m->where('chat_id', $this->attributes["id"])->findAll() ?? [];
+ }
+ public function getModel(): ?Model
+ {
+ $model = null;
+ $models = [
+ "presupuesto_id" => model(PresupuestoModel::class),
+ "pedido_id" => model(PedidoModel::class),
+ "factura_id" => model(FacturaModel::class)
+ ];
+ $fks = [
+ "presupuesto_id" => $this->attributes["presupuesto_id"],
+ "pedido_id" => $this->attributes["pedido_id"],
+ "factura_id" => $this->attributes["factura_id"],
+ ];
+ foreach ($fks as $key => $fk) {
+ if ($fk) {
+ $model = $models[$key];
+ break;
+ }
+ }
+ return $model;
+ }
+ public function relatedFk(): array
+ {
+ $relatedFk = null;
+ $relatedFkValue = null;
+ $fks = [
+ "presupuesto" => $this->attributes["presupuesto_id"],
+ "pedido" => $this->attributes["pedido_id"],
+ "factura" => $this->attributes["factura_id"],
+ ];
+ foreach ($fks as $key => $fk) {
+ if ($fk) {
+ $relatedFk = $key;
+ $relatedFkValue = $fk;
+ break;
+ }
+ }
+ return [
+ "relatedModel" => $relatedFk,
+ "relatedFkValue" => $relatedFkValue
+ ];
+ }
+ public function withModel() : self
+ {
+ if($this->getModel()){
+ $this->attributes["modelData"] = $this->getModel()->find($this->relatedFk()['relatedFkValue']);
+ }else{
+ $this->attributes["modelData"] = null;
+ }
+ return $this;
+ }
+}
diff --git a/ci4/app/Entities/Chat/ChatMessageEntity.php b/ci4/app/Entities/Chat/ChatMessageEntity.php
new file mode 100644
index 00000000..2771a9c4
--- /dev/null
+++ b/ci4/app/Entities/Chat/ChatMessageEntity.php
@@ -0,0 +1,65 @@
+ null,
+ "message" => null,
+ "chat_id" => null,
+ "sender_id" => null,
+ "receiver_id" => null,
+ "viewed" => null,
+ ];
+
+
+ protected $casts = [
+ "message" => "string",
+ "chat_id" => "integer",
+ "sender_id" => "?integer",
+ "receiver_id" => "?integer",
+ "viewed" => "boolean",
+ ];
+ protected $dates = [];
+
+ public function chat() : ?ChatEntity
+ {
+ $m = model(ChatModel::class);
+ return $m->find($this->attributes['chat_id']);
+
+ }
+ /**
+ * Notifications related with this chat entity.
+ *
+ * @return array
+ */
+ public function notifications() : array
+ {
+ $m = model(ChatNotification::class);
+ return $m->asArray()->where('chat_id',$this->attributes['chat_id'])->findAll() ?? [];
+ }
+ public function sentBy() : ?UserEntity
+ {
+ $m = model(UserModel::class);
+ return $m->find($this->attributes["sender_id"])->withAvatar();
+
+ }
+ public function withUser() : self
+ {
+ $this->attributes["user"] = $this->sentBy();
+ return $this;
+ }
+ public function getCreatedAt()
+ {
+ return Time::createFromFormat("Y-m-d H:i:s",$this->attributes['created_at'])->format('d/m/Y H:i');
+
+ }
+}
diff --git a/ci4/app/Entities/Chat/ChatNotificationEntity.php b/ci4/app/Entities/Chat/ChatNotificationEntity.php
new file mode 100644
index 00000000..07828a1c
--- /dev/null
+++ b/ci4/app/Entities/Chat/ChatNotificationEntity.php
@@ -0,0 +1,42 @@
+ null,
+ "chat_message_id" => null,
+ "user_id" => null,
+ "viewed" => null,
+ ];
+
+
+ protected $casts = [
+ "chat_message_id" => "integer",
+ "user_id" => "integer",
+ "viewed" => "boolean",
+ ];
+
+ public function message() : ?ChatMessageEntity
+ {
+ $m = model(ChatMessageModel::class);
+ return $m->find($this->attributes['chat_message_id']);
+ }
+ public function user() : ?UserEntity
+ {
+ $m = model(UserModel::class);
+ return $m->find($this->attributes['user_id']);
+ }
+ public function chat() : ?ChatEntity
+ {
+ return $this->message()->chat();
+ }
+
+}
diff --git a/ci4/app/Entities/Chat/ChatUserEntity.php b/ci4/app/Entities/Chat/ChatUserEntity.php
new file mode 100644
index 00000000..9f485cb5
--- /dev/null
+++ b/ci4/app/Entities/Chat/ChatUserEntity.php
@@ -0,0 +1,36 @@
+ null,
+ "user_id" => null,
+ "chat_id" => null,
+ ];
+
+
+ protected $casts = [
+ "user_id" => "integer",
+ "chat_id" => "integer",
+ ];
+
+ public function chat() : ?ChatEntity
+ {
+ $m = model(ChatModel::class);
+ return $m->find($this->attributes['chat_id']);
+
+ }
+ public function user() : ?UserEntity
+ {
+ $m = model(UserModel::class);
+ return $m->find($this->attributes['user_id'])->withAvatar();
+ }
+
+}
diff --git a/ci4/app/Entities/Usuarios/UserEntity.php b/ci4/app/Entities/Usuarios/UserEntity.php
index 34206cad..a6410e2f 100755
--- a/ci4/app/Entities/Usuarios/UserEntity.php
+++ b/ci4/app/Entities/Usuarios/UserEntity.php
@@ -1,6 +1,8 @@
getFullName();
}
+ public function withAvatar() : self
+ {
+ $users = auth()->getProvider();
+ $this->attributes["avatar"] = md5($users->findById($this->attributes['id'])->getEmail());
+ return $this;
+ }
+ /**
+ * Return an array of ChatNotificationEntities that belongs to the user
+ *
+ * @return array
+ */
+ public function chatNotifications() : array
+ {
+ $m = model(ChatNotification::class);
+ return $m->where('user_id',$this->attributes['id'])->findAll() ?? [];
+ }
}
diff --git a/ci4/app/Helpers/general_helper.php b/ci4/app/Helpers/general_helper.php
index e0578134..0736e7aa 100644
--- a/ci4/app/Helpers/general_helper.php
+++ b/ci4/app/Helpers/general_helper.php
@@ -97,7 +97,10 @@ function getCurrentLanguageFlag(){
}
}
-
+function getGravatarURL(int $size = 30)
+{
+ return "https://gravatar.com/avatar/".md5(auth()->user()->getEmail())."?s=".$size;
+}
function getAllClassFolder($folder = null){
try {
helper('filesystem');
diff --git a/ci4/app/Language/es/App.php b/ci4/app/Language/es/App.php
index 095247ad..eac95b5e 100755
--- a/ci4/app/Language/es/App.php
+++ b/ci4/app/Language/es/App.php
@@ -826,6 +826,6 @@ return [
"menu_soporte" => "Soporte",
"menu_soporte_new_ticket" => "Crear ticket",
"menu_soporte_ticket_list" => "Mis tickets",
-
+ "me" => "Yo",
];
\ No newline at end of file
diff --git a/ci4/app/Language/es/Chat.php b/ci4/app/Language/es/Chat.php
index 300a3974..b1ba0e4e 100644
--- a/ci4/app/Language/es/Chat.php
+++ b/ci4/app/Language/es/Chat.php
@@ -20,6 +20,7 @@ return [
"created_at" => "Fecha creación",
"updated_at" => "Fecha actualización",
"title" => "Título",
+ "message" => "Mensaje",
"creator" => "Creador",
"viewed" => "Leído",
diff --git a/ci4/app/Models/Chat/ChatDeparmentModel.php b/ci4/app/Models/Chat/ChatDeparmentModel.php
index ec3a857a..c5d81c87 100644
--- a/ci4/app/Models/Chat/ChatDeparmentModel.php
+++ b/ci4/app/Models/Chat/ChatDeparmentModel.php
@@ -2,6 +2,7 @@
namespace App\Models\Chat;
+use App\Entities\Chat\ChatDepartmentEntity;
use App\Models\Usuarios\UserModel;
use CodeIgniter\Model;
@@ -10,7 +11,7 @@ class ChatDeparmentModel extends Model
protected $table = 'chat_departments';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
- protected $returnType = 'object';
+ protected $returnType = ChatDepartmentEntity::class;
protected $useSoftDeletes = true;
protected $protectFields = true;
protected $allowedFields = [
@@ -181,4 +182,20 @@ class ChatDeparmentModel extends Model
{
return $this->select(['id','display','description'])->where('deleted_at',null);
}
+
+ public function getModelChatDepartments(string $modelFk,int $modelId) : array
+ {
+ $query = $this->builder()->select([
+ 'chat_departments.id',
+ 'chat_departments.name',
+ 'chat_departments.display',
+ 'COUNT(chat_messages.id) as countMessages'
+ ])
+ ->join('chats','chats.chat_department_id = chat_departments.id','left')
+ ->join('chat_messages','chat_messages.chat_id = chats.id','left')
+ ->where($modelFk,$modelId)
+ ->groupBy('chat_departments.name');
+ return $query->get()->getResultArray() ?? [];
+
+ }
}
diff --git a/ci4/app/Models/Chat/ChatDeparmentUserModel.php b/ci4/app/Models/Chat/ChatDeparmentUserModel.php
index 7726e5d9..1afdca85 100644
--- a/ci4/app/Models/Chat/ChatDeparmentUserModel.php
+++ b/ci4/app/Models/Chat/ChatDeparmentUserModel.php
@@ -2,6 +2,7 @@
namespace App\Models\Chat;
+use App\Entities\Chat\ChatDepartmentUserEntity;
use App\Models\Usuarios\UserModel;
use CodeIgniter\Model;
@@ -10,7 +11,7 @@ class ChatDeparmentUserModel extends Model
protected $table = 'chat_department_users';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
- protected $returnType = 'array';
+ protected $returnType = ChatDepartmentUserEntity::class;
protected $useSoftDeletes = true;
protected $protectFields = true;
protected $allowedFields = [
diff --git a/ci4/app/Models/Chat/ChatMessageModel.php b/ci4/app/Models/Chat/ChatMessageModel.php
index e0ee9a20..5fb01241 100644
--- a/ci4/app/Models/Chat/ChatMessageModel.php
+++ b/ci4/app/Models/Chat/ChatMessageModel.php
@@ -2,6 +2,7 @@
namespace App\Models\Chat;
+use App\Entities\Chat\ChatMessageEntity;
use App\Models\ChatNotification;
use App\Models\Usuarios\UserModel;
use CodeIgniter\Model;
@@ -12,7 +13,7 @@ class ChatMessageModel extends Model
protected $table = 'chat_messages';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
- protected $returnType = 'object';
+ protected $returnType = ChatMessageEntity::class;
protected $useSoftDeletes = true;
protected $protectFields = true;
protected $allowedFields = [
@@ -45,7 +46,7 @@ class ChatMessageModel extends Model
// Callbacks
protected $allowCallbacks = true;
protected $beforeInsert = [];
- protected $afterInsert = [];
+ protected $afterInsert = ['callbackNewMessage'];
protected $beforeUpdate = [];
protected $afterUpdate = [];
protected $beforeFind = [];
@@ -82,7 +83,6 @@ class ChatMessageModel extends Model
if ($auth_user->id == $message->sender_id) {
$message->sender_first_name = $auth_user->first_name;
$message->sender_last_name = $auth_user->last_name;
-
} else {
$sender_user = $user->find($message->sender_id);
$message->sender_first_name = $sender_user->first_name;
@@ -133,10 +133,10 @@ class ChatMessageModel extends Model
->where("receiver_id", auth()->user()->id)->countAllResults();
return $messagesFromReceiver;
}
- public function get_chat_department_messages_count(int $chat_id) : int
+ public function get_chat_department_messages_count(int $chat_id): int
{
$chatDepartmentMessagesCount = $this->builder()
- ->where("id",$chat_id)
+ ->where("id", $chat_id)
->countAllResults();
return $chatDepartmentMessagesCount;
}
@@ -194,4 +194,46 @@ class ChatMessageModel extends Model
return $messagesFromReceiver;
}
+ public function callbackNewMessage(array $data)
+ {
+ $authUser = auth()->user();
+ $chatNotificationModel = model(ChatNotification::class);
+ $chatMessageEntity = $this->find($data["id"]);
+ $chatEntity = $chatMessageEntity->chat();
+ if ($chatEntity->chat_department_id) {
+ $chatDepartmentEntity = $chatEntity->department();
+ $adminUsers = $chatDepartmentEntity->chatDepartmentAdminUsers();
+ $modelFk = $chatEntity->relatedFk();
+ $externalUsers = $chatDepartmentEntity->chatDepartmentExternalUsers($modelFk["relatedFkValue"], $modelFk["relatedModel"]);
+ if ($modelFk["relatedModel"] && $modelFk["relatedFkValue"]) {
+
+ foreach ($adminUsers as $user) {
+ if ($user->user_id != $authUser->id) {
+ $chatNotificationModel->insert([
+ "user_id" => $user->user_id,
+ "chat_message_id" => $data["id"]
+ ]);
+ }
+ }
+ foreach ($externalUsers as $user) {
+ if ($user->user_id != $authUser->id) {
+ $chatNotificationModel->insert([
+ "user_id" => $user->user_id,
+ "chat_message_id" => $data["id"]
+ ]);
+ }
+ }
+ }
+ }else{
+ foreach ($chatEntity->internalUsers() as $user) {
+ if ($user->user_id != $authUser->id) {
+ $chatNotificationModel->insert([
+ "user_id" => $user->user_id,
+ "chat_message_id" => $data["id"]
+ ]);
+ }
+ }
+ }
+ return $data;
+ }
}
diff --git a/ci4/app/Models/Chat/ChatModel.php b/ci4/app/Models/Chat/ChatModel.php
index 70db1dca..3106560f 100644
--- a/ci4/app/Models/Chat/ChatModel.php
+++ b/ci4/app/Models/Chat/ChatModel.php
@@ -2,6 +2,7 @@
namespace App\Models\Chat;
+use App\Entities\Chat\ChatEntity;
use App\Models\ChatNotification;
use App\Models\ChatUser;
use App\Models\Facturas\FacturaModel;
@@ -16,7 +17,7 @@ class ChatModel extends Model
protected $table = 'chats';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
- protected $returnType = 'object';
+ protected $returnType = ChatEntity::class;
protected $useSoftDeletes = true;
protected $protectFields = true;
protected $allowedFields = [
@@ -315,12 +316,6 @@ class ChatModel extends Model
}
public function getChatDepartmentNotifications()
{
- $chatDeparmentModel = model(ChatDeparmentModel::class);
- $chatMessageModel = model(ChatMessageModel::class);
- $presupuestoModel = model(PresupuestoModel::class);
- $facturaModel = model(FacturaModel::class);
- $pedidoModel = model(PedidoModel::class);
-
$q = $this->builder()
->select([
"chats.id as chatId",
@@ -329,7 +324,7 @@ class ChatModel extends Model
"chats.presupuesto_id as presupuestoId",
"chats.factura_id as facturaId",
"chats.title as chatDisplay",
- "COUNT(chat_notifications.viewed) as unreadMessages"
+ "COUNT(chat_notifications.id) as unreadMessages"
])
->join("chat_messages", "chat_messages.chat_id = chats.id", "left")
->join("chat_notifications", "chat_notifications.chat_message_id = chat_messages.id", "left")
@@ -343,36 +338,28 @@ class ChatModel extends Model
$rows_new = [];
foreach ($rows as $row) {
if ($row->presupuestoId) {
- $row->model = $presupuestoModel->find($row->presupuestoId);
+ // $row->model = $presupuestoModel->find($row->presupuestoId);
if ($auth_user->cliente_id) {
$row->uri = "/presupuestocliente/edit/" . $row->presupuestoId . "#accordionChatPresupuesto";
} else {
$row->uri = "/presupuestoadmin/edit/" . $row->presupuestoId . "#accordionChatPresupuesto";
}
$row->title = $row->presupuestoId;
- if ($row->chatDepartmentId) {
- $row->chatDisplay = $row->model->titulo;
- } else {
- $row->chatDisplay .= "[INTERNAL]";
- }
+
$row->avatar = "PRE";
$rows_new[] = $row;
} elseif ($row->pedidoId) {
- $row->model = $pedidoModel->find($row->pedidoId);
+ // $row->model = $pedidoModel->find($row->pedidoId);
$row->uri = "/pedidos/edit/" . $row->pedidoId . "#accordionChatPedido";
$row->title = $row->pedidoId;
- if ($row->chatDepartmentId) {
- $row->chatDisplay .= "[INTERNAL]";
- }
+
$row->avatar = "P";
$rows_new[] = $row;
} elseif ($row->facturaId) {
- $row->model = $facturaModel->find($row->facturaId);
+ // $row->model = $facturaModel->find($row->facturaId);
$row->uri = "/chat/factura/" . $row->facturaId . "#accordionChatFactura";
$row->avatar = "F";
- if ($row->chatDepartmentId) {
- $row->chatDisplay .= "[INTERNAL]";
- }
+
$row->title = $row->facturaId;
$rows_new[] = $row;
}
@@ -381,10 +368,6 @@ class ChatModel extends Model
}
public function getChatInternalNotifications()
{
- $presupuestoModel = model(PresupuestoModel::class);
- $facturaModel = model(FacturaModel::class);
- $pedidoModel = model(PedidoModel::class);
-
$q = $this->builder()
->select([
"chats.id as chatId",
@@ -393,52 +376,41 @@ class ChatModel extends Model
"chats.presupuesto_id as presupuestoId",
"chats.factura_id as facturaId",
"chats.title as chatDisplay",
+ "COUNT(chat_messages.id) as unreadMessages"
+
])
->join("chat_messages", "chat_messages.chat_id = chats.id", "left")
->join("chat_notifications", "chat_notifications.chat_message_id = chat_messages.id", "left")
->where("chat_notifications.user_id", auth()->user()->id)
->where("chat_notifications.viewed", false)
- ->where("chats.chat_department_id", null);
+ ->where("chats.chat_department_id", null)
+ ->groupBy('chats.id');
+
$auth_user = auth()->user();
$rows = $q->get()->getResultObject();
$rows_new = [];
foreach ($rows as $row) {
- $row->unreadMessages = 0;
if ($row->presupuestoId) {
- $row->model = $presupuestoModel->find($row->presupuestoId);
if ($auth_user->cliente_id) {
$row->uri = "/presupuestocliente/edit/" . $row->presupuestoId . "#accordionChatPresupuesto";
} else {
$row->uri = "/presupuestoadmin/edit/" . $row->presupuestoId . "#accordionChatPresupuesto";
}
$row->title = $row->presupuestoId;
- if ($row->chatDepartmentId) {
- $row->chatDisplay = $row->model->titulo;
- } else {
- $row->chatDisplay .= "[INTERNAL]";
- }
+ $row->chatDisplay .= "[INTERNAL]";
$row->avatar = "PRE";
- $row->unreadMessages = $this->countUnreadMessagePresupuesto($row->presupuestoId);
$rows_new[] = $row;
} elseif ($row->pedidoId) {
- $row->model = $pedidoModel->find($row->pedidoId);
$row->uri = "/pedidos/edit/" . $row->pedidoId . "#accordionChatFactura";
$row->title = $row->pedidoId;
- if ($row->chatDepartmentId) {
- $row->chatDisplay .= "[INTERNAL]";
- }
+ $row->chatDisplay .= "[INTERNAL]";
$row->avatar = "P";
- $row->unreadMessages = $this->countUnreadMessagePedido($row->pedidoId);
$rows_new[] = $row;
} elseif ($row->facturaId) {
- $row->model = $facturaModel->find($row->facturaId);
$row->uri = "/factura/edit/" . $row->facturaId . "#accordionChatFactura";
$row->avatar = "F";
- if ($row->chatDepartmentId) {
- $row->chatDisplay .= "[INTERNAL]";
- }
+ $row->chatDisplay .= "[INTERNAL]";
$row->title = $row->facturaId;
- $row->unreadMessages = $this->countUnreadMessageFactura($row->facturaId);
$rows_new[] = $row;
}
}
@@ -585,7 +557,7 @@ class ChatModel extends Model
}
return $data;
}
- public function countUnreadMessagePresupuesto(int $presupuesto_id,int $chat_department_id): int|string
+ public function countUnreadMessagePresupuesto(int $presupuesto_id): int|string
{
return $this->builder()->select()
->join("chat_messages", "chat_messages.chat_id = chats.id", "left")
@@ -593,7 +565,6 @@ class ChatModel extends Model
->where("chats.presupuesto_id", $presupuesto_id)
->where("chat_notifications.viewed", false)
->where("chat_notifications.user_id", auth()->user()->id)
- ->where('chats.chat_department_id',$chat_department_id)
->countAllResults();
}
public function countUnreadMessagePedido($pedido_id): int|string
@@ -675,6 +646,7 @@ class ChatModel extends Model
->orderBy("chat_messages.created_at", 'ASC');
return $q->get()->getFirstRow();
}
+
/**
* Check if all messages of a chat sent to an user have been viewed.
*
@@ -682,13 +654,12 @@ class ChatModel extends Model
* @param integer $user_id
* @return boolean True : All messages readed
*/
- public function isMessageChatViewed(int $chat_id, int $user_id): bool
+ public function isMessageChatViewed(int $chat_message_id): bool
{
- $q = $this->builder()->select(["chat_notifications.id"])
+ $q = $this->builder()->select(["chat_notifications.id as cnId"])
->join("chat_messages", "chat_messages.chat_id = chats.id", 'left')
->join("chat_notifications", "chat_notifications.chat_message_id = chat_messages.id", 'left')
- ->where("chats.id", $chat_id)
- // ->where("chat_notifications.user_id", $user_id)
+ ->where("chat_messages.id", $chat_message_id)
->where("chat_notifications.viewed", false);
$unread_messages_count = $q->countAllResults();
if ($unread_messages_count > 0) {
@@ -704,7 +675,7 @@ class ChatModel extends Model
* @param integer $chat_id
* @return array True : All messages readed
*/
- public function getUsersNotificationNotViewedFromChat(int $chat_id): array
+ public function getUsersNotificationNotViewedFromChat(int $chat_message_id): array
{
$q = $this->builder()->distinct()->select(
[
@@ -717,13 +688,12 @@ class ChatModel extends Model
->join("chat_messages", "chat_messages.chat_id = chats.id", 'left')
->join("chat_notifications", "chat_notifications.chat_message_id = chat_messages.id", 'left')
->join("users", "users.id = chat_notifications.user_id", 'left')
- ->where("chats.id", $chat_id)
+ ->where("chat_messages.id", $chat_message_id)
->where("chat_notifications.deleted_at", null)
- ->where('chat_notifications.viewed',false)
->get()->getResultArray();
return $q;
}
- public function getUsersNotificationViewedFromChat(int $chat_id): array
+ public function getUsersNotificationViewedFromChat(int $chat_message_id): array
{
$q = $this->builder()->distinct()->select(
[
@@ -736,9 +706,9 @@ class ChatModel extends Model
->join("chat_messages", "chat_messages.chat_id = chats.id", 'left')
->join("chat_notifications", "chat_notifications.chat_message_id = chat_messages.id", 'left')
->join("users", "users.id = chat_notifications.user_id", 'left')
- ->where("chats.id", $chat_id)
+ ->where("chat_messages.id", $chat_message_id)
->where("chat_notifications.deleted_at", null)
- ->where('chat_notifications.viewed',true)
+ ->where('chat_notifications.viewed', true)
->get()->getResultArray();
return $q;
}
@@ -772,78 +742,93 @@ class ChatModel extends Model
$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",
+ "CONCAT('[',chats.title,']',' ',presupuestos.titulo) as title",
])
- ->join("chat_users", "chats.id = chat_users.chat_id", "left")
->join("presupuestos", "presupuestos.id = chats.presupuesto_id", 'left')
->join("chat_messages cm", "chats.id = cm.chat_id", "left")
- ->where("chats.presupuesto_id is NOT NULL", NULL, FALSE)
- ->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')
+ ->where("chats.presupuesto_id is NOT NULL", NULL, FALSE);
+
if (auth()->user()->inGroup("admin") == false) {
$query->where('presupuestos.cliente_id', auth()->user()->cliente_id)
- ->where("chat_department_id is NOT NULL", NULL, FALSE);
+ ->where("chats.chat_department_id is NOT NULL", NULL, FALSE);
}
- return $query;
+ return $query->groupBy('chatMessageId');
}
public function getQueryDatatableMessagePedido(int $user_id): 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",
- ])
- ->join("chat_users", "chat_users.chat_id = chats.id", "left")
- ->join("pedidos_linea", "pedidos_linea.pedido_id = chats.pedido_id", 'left')
- ->join("chat_messages cm", "chats.id = cm.chat_id", "left")
- ->join("presupuestos", "presupuestos.id = pedidos_linea.presupuesto_id", 'left')
- ->where("chats.pedido_id is NOT NULL", NULL, FALSE)
- ->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
- )");
+ ) as updated_at",
+ "CONCAT(u.first_name,' ',u.last_name) as creator",
+ "CONCAT('[',chats.title,']',' ',presupuestos.titulo) as title",
+ ])
+ ->join("pedidos_linea", "pedidos_linea.pedido_id = chats.pedido_id", 'left')
+ ->join("chat_messages cm", "chats.id = cm.chat_id", "left")
+ ->join("users u", "u.id = cm.sender_id", 'left')
+ ->join("presupuestos", "presupuestos.id = pedidos_linea.presupuesto_id", 'left')
+ ->where("chats.pedido_id is NOT NULL", NULL, FALSE);
+
if (auth()->user()->inGroup("admin") == false) {
$query->where('presupuestos.cliente_id', auth()->user()->cliente_id)
- ->where("chat_department_id is NOT NULL", NULL, FALSE);
+ ->where("chats.chat_department_id is NOT NULL", NULL, FALSE);
}
- return $query;
+ return $query->groupBy('chatMessageId');
}
public function getQueryDatatableMessageFactura(int $user_id): 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",
- ])
- ->join("chat_users", "chat_users.chat_id = chats.id", "left")
- ->join("chat_messages cm", "chats.id = cm.chat_id", "left")
- ->join("facturas", "facturas.id = chats.factura_id", "left")
- ->where("chats.factura_id is NOT NULL", NULL, FALSE)
- ->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
- )");
+ ) as updated_at",
+ "CONCAT(u.first_name,' ',u.last_name) as creator",
+ "chats.title",
+ ])
+ ->join("chat_messages cm", "chats.id = cm.chat_id", "left")
+ ->join("users u", "u.id = cm.sender_id", 'left')
+ ->join("facturas", "facturas.id = chats.factura_id", "left")
+ ->where("chats.factura_id is NOT NULL", NULL, FALSE);
+
if (auth()->user()->inGroup("admin") == false) {
if (auth()->user()->inGroup("admin") == false) {
$query->where('facturas.cliente_id', auth()->user()->cliente_id)
- ->where("chat_department_id is NOT NULL", NULL, FALSE);
+ ->where("chats.chat_department_id is NOT NULL", NULL, FALSE);
}
}
- return $query;
+ return $query->groupBy('chatMessageId');
}
public function createNewDirectChat(string $title, string $message, array $users)
{
@@ -923,12 +908,12 @@ class ChatModel extends Model
->select("chat_notifications.id as notificationId")
->join('chat_messages', 'chat_messages.chat_id = chats.id', 'left')
->join('chat_notifications', 'chat_notifications.chat_message_id = chat_messages.id', 'left')
- ->where('chat_notifications.user_id',$user_id)
+ ->where('chat_notifications.user_id', $user_id)
->where('chat_messages.chat_id', $chat_id)
->get()->getResultObject();
$chat_messages_ids = array_map(fn($q) => $q->notificationId, $query);
$chatNotificationModel = model(ChatNotification::class);
- if($chat_messages_ids){
+ if ($chat_messages_ids) {
$chatNotificationModel->setNotificationsAsViewed($chat_messages_ids);
}
}
@@ -945,12 +930,12 @@ class ChatModel extends Model
->select("chat_notifications.id as notificationId")
->join('chat_messages', 'chat_messages.chat_id = chats.id', 'left')
->join('chat_notifications', 'chat_notifications.chat_message_id = chat_messages.id', 'left')
- ->where('chat_notifications.user_id',$user_id)
+ ->where('chat_notifications.user_id', $user_id)
->where('chat_messages.chat_id', $chat_id)
->get()->getResultObject();
$chat_messages_ids = array_map(fn($q) => $q->notificationId, $query);
$chatNotificationModel = model(ChatNotification::class);
- if($chat_messages_ids){
+ if ($chat_messages_ids) {
$chatNotificationModel->setNotificationsAsUnViewed($chat_messages_ids);
}
}
diff --git a/ci4/app/Models/ChatNotification.php b/ci4/app/Models/ChatNotification.php
index 7d8824d4..aa1e0a28 100644
--- a/ci4/app/Models/ChatNotification.php
+++ b/ci4/app/Models/ChatNotification.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use App\Entities\Chat\ChatNotificationEntity;
use CodeIgniter\Model;
class ChatNotification extends Model
@@ -9,7 +10,7 @@ class ChatNotification extends Model
protected $table = 'chat_notifications';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
- protected $returnType = 'array';
+ protected $returnType = ChatNotificationEntity::class;
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = [
diff --git a/ci4/app/Models/ChatUser.php b/ci4/app/Models/ChatUser.php
index f51f989f..b6355a53 100644
--- a/ci4/app/Models/ChatUser.php
+++ b/ci4/app/Models/ChatUser.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use App\Entities\Chat\ChatUserEntity;
use CodeIgniter\Model;
class ChatUser extends Model
@@ -9,7 +10,7 @@ class ChatUser extends Model
protected $table = 'chat_users';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
- protected $returnType = 'array';
+ protected $returnType = ChatUserEntity::class;
protected $useSoftDeletes = true;
protected $protectFields = true;
protected $allowedFields = [
diff --git a/ci4/app/Services/ChatService.php b/ci4/app/Services/ChatService.php
new file mode 100644
index 00000000..66277625
--- /dev/null
+++ b/ci4/app/Services/ChatService.php
@@ -0,0 +1,176 @@
+ "presupuesto_id",
+ "pedido" => "pedido_id",
+ "factura" => "factura_id",
+ ];
+ protected array $modelClassMap;
+ public function __construct()
+ {
+ $this->chatModel = model(ChatModel::class);
+ $this->chatMessageModel = model(ChatMessageModel::class);
+ $this->chatNotificationModel = model(ChatNotification::class);
+ $this->chatDepartmentUserModel = model(ChatDeparmentUserModel::class);
+ $this->chatUserModel = model(ChatUser::class);
+ $this->presupuestoModel = model(PresupuestoModel::class);
+ $this->chatDepartmentModel = model(ChatDeparmentModel::class);
+ $this->configVariables = model(ConfigVariableModel::class);
+ }
+ public function setChat($chatEntity): self
+ {
+ $this->chatEntity = $chatEntity;
+ return $this;
+ }
+ public function storeChatMessage(string $chatDepartmentId, string $model, int $modelId, array $data): ?ChatMessageEntity
+ {
+ $this->chatEntity = $this->chatModel->where('chat_department_id', $chatDepartmentId)->where($this->modelFkMap[$model], $modelId)->first();
+ if ($this->chatEntity == null) {
+ $chatId = $this->createChat($chatDepartmentId, $model, $modelId);
+ $this->chatEntity = $this->chatModel->find($chatId);
+ }
+ if ($data["client"]) {
+ $cliente_in_department = $this->chatDepartmentUserModel
+ ->where('chat_department_id', $chatDepartmentId)
+ ->where('user_id', $data['client'])
+ ->where($this->modelFkMap[$model], $modelId)
+ ->first();
+ if ($cliente_in_department == null) {
+ $this->chatDepartmentUserModel->insert(['chat_department_id' => $chatDepartmentId, 'user_id' => $data['client'], $this->modelFkMap[$model] => $modelId]);
+ }
+ }
+ $userAdminDepartment = $this->chatDepartmentUserModel
+ ->where('chat_department_id', $data["chat_department_id"])
+ ->where('user_id', auth()->user()->id)
+ ->where("pedido_id", null)
+ ->where("factura_id", null)
+ ->where("presupuesto_id", null)
+ ->first();
+ $userAlreadyInDepartment = $this->chatDepartmentUserModel
+ ->where('chat_department_id', $data["chat_department_id"])
+ ->where('user_id', auth()->user()->id)
+ ->where($this->modelFkMap[$model], $modelId)
+ ->first();
+ if ($userAdminDepartment == null && $userAlreadyInDepartment == null) {
+ $this->chatDepartmentUserModel->insert(['chat_department_id' => $data["chat_department_id"], $this->modelFkMap[$model] => $modelId, 'user_id' => auth()->user()->id]);
+ }
+ $chat_message_id = $this->chatMessageModel->insert(["chat_id" => $this->chatEntity->id, "sender_id" => auth()->user()->id, "message" => $data["message"]]);
+ $chatMessageEntity = $this->chatMessageModel->find($chat_message_id);
+ return $chatMessageEntity;
+ }
+ public function createChat(int $chatDepartmentId, string $model, int $modelId): bool|int|string
+ {
+ $r = false;
+ switch ($model) {
+ case 'presupuesto':
+ $r = $this->chatModel->createChatPresupuesto($chatDepartmentId, $modelId);
+ break;
+ case 'pedido':
+ $r = $this->chatModel->createChatPedido($chatDepartmentId, $modelId);
+ break;
+ case 'factura':
+ $r = $this->chatModel->createChatFactura($chatDepartmentId, $modelId);
+ break;
+ default:
+ break;
+ }
+ return $r;
+ }
+
+ public function getChatDepartments(string $model, int $modelId): array
+ {
+ $chatDepartments = $this->chatDepartmentModel->getModelChatDepartments($this->modelFkMap[$model], $modelId);
+ $departmentWithChat = array_map(fn($q) => $q["name"], $chatDepartments);
+ if(count($departmentWithChat) > 0){
+ $departmentWithoutChat = $this->chatDepartmentModel->whereNotIn('name', $departmentWithChat)->findAll();
+ }else{
+ $departmentWithoutChat = $this->chatDepartmentModel->findAll();
+ }
+ foreach ($departmentWithoutChat as $value) {
+ $d = [];
+ $d["id"] = $value->id;
+ $d["name"] = $value->name;
+ $d["display"] = $value->display;
+ $d["countMessages"] = "0";
+ $chatDepartments[] = $d;
+ }
+ return $chatDepartments;
+ }
+
+ public function storeHebra(string $model, int $modelId, array $data): bool
+ {
+ $auth_user = auth()->user();
+ $chatId = $this->chatModel->insert([$this->modelFkMap[$model] => $modelId, 'title' => $data['title']]);
+
+ if (isset($data["users"])) {
+ $data["users"][] = $auth_user->id;
+ $chatUserData = array_map(fn($x) => ["user_id" => $x, "chat_id" => $chatId], $data["users"]);
+ $this->chatUserModel->insertBatch($chatUserData);
+ }
+ $this->chatMessageModel->insert(
+ [
+ 'chat_id' => $chatId,
+ 'message' => $data['message'],
+ 'sender_id' => $auth_user->id
+ ]
+ );
+ return true;
+ }
+ public function getHebras(string $model, int $modelId): array
+ {
+ $chats = $this->chatModel->where('chat_department_id', null)
+ ->where($this->modelFkMap[$model], $modelId)
+ ->findAll();
+ foreach ($chats as $c) {
+ $this->chatModel->setAsViewedChatUserNotifications($c->id,auth()->user()->id);
+ }
+ $chatWithHebraData = array_map(fn(ChatEntity $c) => $c->withHebra(), $chats);
+ return $chatWithHebraData ?? [];
+ }
+ public function getAuthUserNotifications(): array
+ {
+ $departmentNotifications = $this->chatModel->getChatDepartmentNotifications();
+ $internalNotifications = $this->chatModel->getChatInternalNotifications();
+ $totalMessages = 0;
+ $countNotificiationDepartments = array_map(fn($n) => $n->unreadMessages,$departmentNotifications);
+ $countNotificationInternal = array_map(fn($n) => $n->unreadMessages,$internalNotifications);
+ $totalMessages = array_sum($countNotificiationDepartments) + array_sum($countNotificationInternal);
+
+ return [
+ "departmentNotifications" => $departmentNotifications,
+ "internalNotifications" => $internalNotifications,
+ "totalMessages" => $totalMessages
+ ];
+ }
+}
diff --git a/ci4/app/Views/themes/vuexy/components/tables/messages_table.php b/ci4/app/Views/themes/vuexy/components/tables/messages_table.php
index 22456941..17316fda 100644
--- a/ci4/app/Views/themes/vuexy/components/tables/messages_table.php
+++ b/ci4/app/Views/themes/vuexy/components/tables/messages_table.php
@@ -4,10 +4,20 @@
| = lang('Chat.datatable_messages.created_at') ?> |
= lang('Chat.datatable_messages.updated_at') ?> |
= lang('Chat.datatable_messages.title') ?> |
+ = lang('Chat.datatable_messages.message') ?> |
= lang('Chat.datatable_messages.creator') ?> |
= lang('Chat.datatable_messages.viewed') ?> |
= lang('Basic.global.Action') ?> |
+
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
diff --git a/ci4/app/Views/themes/vuexy/main/defaultlayout.php b/ci4/app/Views/themes/vuexy/main/defaultlayout.php
index adc7e9e1..63230311 100644
--- a/ci4/app/Views/themes/vuexy/main/defaultlayout.php
+++ b/ci4/app/Views/themes/vuexy/main/defaultlayout.php
@@ -250,7 +250,7 @@ $picture = "/assets/img/default-user.png";
-

+