diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 6e377cbc..c4c439e8 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -105,6 +105,7 @@ $routes->group('users', ['namespace' => 'App\Controllers\Configuracion'], functi $routes->get('delete/(:num)', 'Users::delete/$1', ['as' => 'deleteUser']); $routes->post('allmenuitems', 'Users::allItemsSelect', ['as' => 'select2ItemsOfUsers']); $routes->post('menuitems', 'Users::menuItems', ['as' => 'menuItemsOfUsers']); + $routes->post('datatable', 'Users::datatable', ['as' => 'datatableOfUsers']); $routes->get('getMenuComerciales', 'Users::getMenuComerciales', ['as' => 'menuItemsComerciales']); }); $routes->resource('users', ['namespace' => 'App\Controllers\Configuracion', 'controller' => 'Users', 'except' => 'show,new,create,update']); diff --git a/ci4/app/Controllers/Configuracion/Users.php b/ci4/app/Controllers/Configuracion/Users.php index 7864620f..8fcc153e 100755 --- a/ci4/app/Controllers/Configuracion/Users.php +++ b/ci4/app/Controllers/Configuracion/Users.php @@ -7,6 +7,8 @@ use App\Models\Usuarios\GroupModel; use App\Models\UserModel; use App\Models\Usuarios\GroupsUsersModel; +use App\Models\Collection; + use CodeIgniter\Shield\Entities\User; use function PHPUnit\Framework\isNull; @@ -22,7 +24,8 @@ class Users extends \App\Controllers\GoBaseController use \CodeIgniter\API\ResponseTrait; - protected static $primaryModelName = 'App\Models\UserModel'; + protected static $primaryModelName = UserModel::class; + protected $modelName = ClientePlantillaPreciosLineasModel::class; protected static $singularObjectNameCc = 'user'; protected static $singularObjectName = 'User'; @@ -58,10 +61,8 @@ class Users extends \App\Controllers\GoBaseController public function index() { - $this->viewData['usingClientSideDataTable'] = true; + $this->viewData['usingServerSideDataTable'] = true; $this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Users.user')]); - $this->viewData['user_model'] = $this->user_model; - $this->viewData['userList2'] = auth()->getProvider()->findAll(); parent::index(); } @@ -313,8 +314,10 @@ class Users extends \App\Controllers\GoBaseController return $this->redirect2listView('errorMessage', $message); endif; + $this->chat_department_user_model->where("user_id", $id)->delete(); + $users = auth()->getProvider(); - $users->delete($user->id, true); + $users->delete($user->id); $message = "Usuario eliminado correctamente"; return $this->redirect2listView('successMessage', $message); @@ -373,6 +376,43 @@ class Users extends \App\Controllers\GoBaseController } } + public function datatable(){ + + if($this->request->isAJAX()){ + + $reqData = $this->request->getPost(); + if (!isset($reqData['draw']) || !isset($reqData['columns'])) { + $errstr = 'No data available in response to this specific request.'; + $response = $this->respond(Collection::datatable([], 0, 0, $errstr), 400, $errstr); + return $response; + } + $start = $reqData['start'] ?? 0; + $length = $reqData['length'] ?? 5; + $searchValues = get_filter_datatables_columns($reqData); + $requestedOrder = $reqData['order'] ?? []; + + $resourceData = $this->model->getResource($searchValues); + foreach ($requestedOrder as $order) { + $column = $order['column'] ?? 0; + $dir = $order['dir'] ?? 'asc'; + $orderColumn = UserModel::SORTABLE[$column] ?? null; + if ($orderColumn) { + $resourceData->orderBy($orderColumn, $dir); + } + } + $resourceData = $resourceData->limit($length, $start)->get()->getResultObject(); + + return $this->respond(Collection::datatable( + $resourceData, + $this->model->getResource([])->countAllResults(), + $this->model->getResource($searchValues)->countAllResults() + )); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + public function getMenuComerciales() { if ($this->request->isAJAX()) { diff --git a/ci4/app/Models/Chat/ChatDeparmentUserModel.php b/ci4/app/Models/Chat/ChatDeparmentUserModel.php index 0c701d14..717c738a 100644 --- a/ci4/app/Models/Chat/ChatDeparmentUserModel.php +++ b/ci4/app/Models/Chat/ChatDeparmentUserModel.php @@ -11,7 +11,7 @@ class ChatDeparmentUserModel extends Model protected $primaryKey = 'id'; protected $useAutoIncrement = true; protected $returnType = 'array'; - protected $useSoftDeletes = false; + protected $useSoftDeletes = true; protected $protectFields = true; protected $allowedFields = [ "chat_department_id", diff --git a/ci4/app/Models/UserModel.php b/ci4/app/Models/UserModel.php index 3c2fe960..57cb4e7a 100644 --- a/ci4/app/Models/UserModel.php +++ b/ci4/app/Models/UserModel.php @@ -22,6 +22,14 @@ class UserModel extends ShieldUserModel ]; } + const SORTABLE = [ + 0 => "t1.id", + 1 => "t1.first_name", + 2 => "t1.last_name", + 3 => "t2.secret", + 4 => "t1.last_active", + ]; + protected $returnType = UsersEntity::class; protected $useSoftDeletes = true; @@ -33,6 +41,7 @@ class UserModel extends ShieldUserModel protected $validationRules = [ "first_name" => "required|trim|max_length[150]", "last_name" => "required|trim|max_length[150]", + "email" => "required|valid_email|max_length[150]", 'new_pwd' => 'permit_empty|min_length[8]', 'new_pwd_confirm' => 'permit_empty|required_with[new_pwd]|matches[new_pwd]', "comments" => "permit_empty|trim|max_length[512]" @@ -56,9 +65,40 @@ class UserModel extends ShieldUserModel 'comments' => [ "max_length" => "Users.validation.last_name.max_length", ], + 'email' => [ + "required" => "Users.validation.email.required", + "valid_email" => "Users.validation.email.valid_email", + "max_length" => "Users.validation.email.max_length" + ] ]; + public function getResource($search = []) + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id as id, t1.first_name AS first_name, t1.last_name AS last_name, + t2.secret AS email, t1.last_active AS last_active" + ); + + $builder->join("auth_identities t2", "t1.id = t2.user_id", "left"); + $builder->where('t1.deleted_at', null)->groupBy("t1.id"); + + + + if (empty($search)) + return $builder; + else { + $builder->groupStart(); + foreach ($search as $col_search) { + $builder->like(self::SORTABLE[$col_search[0]], $col_search[2]); + } + $builder->groupEnd(); + return $builder; + } + } + public function getComerciales() { diff --git a/ci4/app/Views/themes/vuexy/form/user/viewUserList.php b/ci4/app/Views/themes/vuexy/form/user/viewUserList.php index b6adb138..f142c4f1 100644 --- a/ci4/app/Views/themes/vuexy/form/user/viewUserList.php +++ b/ci4/app/Views/themes/vuexy/form/user/viewUserList.php @@ -1,5 +1,6 @@ -= $this->include('themes/_commonPartialsBs/datatables') ?> +=$this->include('themes/_commonPartialsBs/datatables') ?> = $this->extend('themes/vuexy/main/defaultlayout') ?> + = $this->section('content'); ?>