diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index c97c56e8..b8c7b683 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -425,6 +425,9 @@ $routes->resource('clienteplantillaprecioslineas', ['namespace' => 'App\Controll $routes->group('clienteusuarios', ['namespace' => 'App\Controllers\Clientes'], function ($routes) { $routes->post('datatable', 'Clienteusuarios::datatable', ['as' => 'dataTableOfClienteUsuarios']); + $routes->post('adduser', 'Clienteusuarios::addUserToClient'); + $routes->get('delete/(:num)', 'Clienteusuarios::removeClienteFromUser/$1'); + $routes->get('getusers', 'Clienteusuarios::getAvailableUsers'); }); diff --git a/ci4/app/Controllers/Clientes/Clienteusuarios.php b/ci4/app/Controllers/Clientes/Clienteusuarios.php index 8e2cdaac..ba0c9952 100644 --- a/ci4/app/Controllers/Clientes/Clienteusuarios.php +++ b/ci4/app/Controllers/Clientes/Clienteusuarios.php @@ -1,4 +1,5 @@ -request->isAJAX()) { + if (intval($user_id) > 0) { + $this->model->removeClienteFromUser($user_id); + return $this->respond(['status' => 'success', 'msg' => 'Usuario eliminado correctamente']); + } + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function addUserToClient(){ + + if ($this->request->isAJAX()) { + $user_id = $this->request->getPost("user_id"); + $cliente_id = $this->request->getPost("cliente_id"); + if (intval($user_id) > 0 && intval($cliente_id) > 0) { + $this->model->addUserToClient($user_id, $cliente_id); + return $this->respond(['status' => 'success', 'msg' => 'Usuario añadido correctamente']); + } + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function getAvailableUsers() + { + if ($this->request->isAJAX()) { + $query = $this->model->builder()->select( + [ + "id", + "CONCAT(first_name, ' ', last_name) as name" + ] + ) + ->where("deleted_at", null) + ->where("cliente_id", null); + + if ($this->request->getGet("q")) { + $column = "CONCAT(first_name, ' ', last_name)"; + $value = $this->request->getGet("q"); + $query->groupStart() + ->where("LOWER(CONVERT($column USING utf8)) COLLATE utf8_general_ci LIKE", "%" . strtolower($value) . "%") + ->groupEnd(); + } + + $items = $query->get()->getResultObject(); + return $this->response->setJSON($items); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } public function datatable() @@ -53,14 +107,19 @@ class Clienteusuarios extends \App\Controllers\BaseResourceController } $start = $reqData['start'] ?? 0; $length = $reqData['length'] ?? 5; - $search = $reqData['search']['value']; - $requestedOrder = $reqData['order']['0']['column'] ?? 1; - $order = ClienteUsuariosModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 1]; - $dir = $reqData['order']['0']['dir'] ?? 'asc'; - + $requestedOrder = $reqData['order'] ?? []; $id_C = $reqData['id_cliente'] ?? -1; - $resourceData = $this->model->getResource("", $id_C)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + $resourceData = $this->model->getResource("", $id_C); + foreach ($requestedOrder as $order) { + $column = $order['column'] ?? 0; + $dir = $order['dir'] ?? 'asc'; + $orderColumn = ClienteUsuariosModel::SORTABLE[$column] ?? null; + if ($orderColumn) { + $resourceData->orderBy($orderColumn, $dir); + } + } + $resourceData = $resourceData->limit($length, $start)->get()->getResultObject(); return $this->respond(Collection::datatable( $resourceData, diff --git a/ci4/app/Language/es/Users.php b/ci4/app/Language/es/Users.php index 620aa2df..81059ba3 100755 --- a/ci4/app/Language/es/Users.php +++ b/ci4/app/Language/es/Users.php @@ -3,6 +3,7 @@ return [ + 'add' => 'Añadir', 'address' => 'Dirección', 'blocked' => 'Bloqueado', 'non_blocked' => 'No bloqueado', @@ -38,6 +39,7 @@ return [ 'user' => 'Usuario', 'userList' => 'Lista de usuarios', 'users' => 'Usuarios', + 'usersAvailables' => 'Usuarios disponibles', 'zipCode' => 'Código postal', 'admin' => 'Administrador', diff --git a/ci4/app/Models/Clientes/ClienteUsuariosModel.php b/ci4/app/Models/Clientes/ClienteUsuariosModel.php index 474b6ce3..4eedadf5 100644 --- a/ci4/app/Models/Clientes/ClienteUsuariosModel.php +++ b/ci4/app/Models/Clientes/ClienteUsuariosModel.php @@ -16,9 +16,10 @@ class ClienteUsuariosModel extends ShieldUserModel protected $useAutoIncrement = true; const SORTABLE = [ - 0 => "t1.first_name", - 1 => "t1.last_name", - 2 => "t2.secret", + 0 => "t1.id", + 1 => "t1.first_name", + 2 => "t1.last_name", + 3 => "t2.secret", ]; protected $allowedFields = ["id", "first_name", "last_name", "email"]; @@ -83,6 +84,19 @@ class ClienteUsuariosModel extends ShieldUserModel return $result; } + public function removeClienteFromUser($user_id = -1){ + + $this->db->table($this->table)->where('id', $user_id)->update(['cliente_id' => null]); + } + + + public function addUserToClient($user_id = -1, $cliente_id = -1){ + if($user_id < 1 || $cliente_id < 1){ + return; + } + $this->db->table($this->table)->where('id', $user_id)->update(['cliente_id' => $cliente_id]); + } + /** * Get resource data. * @@ -100,15 +114,8 @@ class ClienteUsuariosModel extends ShieldUserModel ); $builder->join("auth_identities t2", "t1.id = t2.user_id", "left"); - $builder->where('t1.id', $cliente_id); + $builder->where('t1.cliente_id', $cliente_id); - return empty($search) - ? $builder - : $builder - ->groupStart() - ->like("t1.first_name", $search) - ->orLike("t1.last_name", $search) - ->orLike("t2.secret", $search) - ->groupEnd(); + return $builder; } } diff --git a/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php b/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php index 5766a61f..6c67d6a6 100644 --- a/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php +++ b/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php @@ -654,6 +654,24 @@