diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 167056f8..8bf72145 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -405,11 +405,13 @@ $routes->group('clienteplantillaprecios', ['namespace' => 'App\Controllers\Clien $routes->get('add', 'Clienteplantillaprecios::add', ['as' => 'newClienteplantillaprecios']); $routes->post('add', 'Clienteplantillaprecios::add', ['as' => 'createClienteplantillaprecios']); $routes->post('edit/(:num)', 'Clienteplantillaprecios::edit/$1', ['as' => 'updateClienteplantillaprecios']); + $routes->get('edit/(:num)', 'Clienteplantillaprecios::edit/$1', ['as' => 'updateClienteplantillaprecios']); $routes->get('delete/(:num)', 'Clienteplantillaprecios::delete/$1', ['as' => 'deleteClienteplantillaprecios']); $routes->post('datatable', 'Clienteplantillaprecios::datatable', ['as' => 'dataTableOfClientesplantillaprecios']); $routes->get('menuitems', 'Clienteplantillaprecios::menuItems', ['as' => 'menuItemsOfClienteplantillaprecios']); + $routes->post('update/(:num)', 'Clienteplantillaprecios::update/$1', ['as' => 'updateClienteplantillaprecios']); }); -$routes->resource('clienteplantillaprecios', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'Clienteplantillaprecios', 'except' => 'show,new,create,update']); +$routes->resource('clienteplantillaprecios', ['namespace' => 'App\Controllers\Clientes', 'controller' => 'Clienteplantillaprecios', 'except' => 'show,new,create']); $routes->group('clienteplantillaprecioslineas', ['namespace' => 'App\Controllers\Clientes'], function ($routes) { diff --git a/ci4/app/Controllers/Clientes/ClientePrecios.php b/ci4/app/Controllers/Clientes/ClientePrecios.php index fe37272c..61cfb986 100755 --- a/ci4/app/Controllers/Clientes/ClientePrecios.php +++ b/ci4/app/Controllers/Clientes/ClientePrecios.php @@ -90,29 +90,24 @@ class ClientePrecios extends \App\Controllers\BaseResourceController } $start = $reqData['start'] ?? 0; $length = $reqData['length'] ?? 5; - $requestedOrder = $reqData['order']['0']['column'] ?? 0; - $requestedOrder2 = $reqData['order']['1']['column'] ?? $requestedOrder; - $requestedOrder3 = $reqData['order']['2']['column'] ?? $requestedOrder; - $requestedOrder4 = $reqData['order']['3']['column'] ?? $requestedOrder; - $requestedOrder5 = $reqData['order']['4']['column'] ?? $requestedOrder; - $order = ClientePreciosModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0]; - $order2 = ClientePreciosModel::SORTABLE[$requestedOrder2 >= 0 ? $requestedOrder2 : $requestedOrder]; - $order3 = ClientePreciosModel::SORTABLE[$requestedOrder3 >= 0 ? $requestedOrder3 : $requestedOrder]; - $order4 = ClientePreciosModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder4 : $requestedOrder]; - $order5 = ClientePreciosModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder5 : $requestedOrder]; - $dir = $reqData['order']['0']['dir'] ?? 'asc'; - $dir2 = $reqData['order']['1']['dir'] ?? $dir; - $dir3 = $reqData['order']['2']['dir'] ?? $dir; - $dir4 = $reqData['order']['3']['dir'] ?? $dir; - $dir5 = $reqData['order']['4']['dir'] ?? $dir; + + $requestedOrder = $reqData['order'] ?? []; $searchValues = get_filter_datatables_columns($reqData); $cliente_id = $reqData['cliente_id'] ?? 0; - $resourceData = $this->model->getResource($searchValues, $cliente_id) - ->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->orderBy($order5, $dir5) - ->limit($length, $start)->get()->getResultObject(); + $resourceData = $this->model->getResource($searchValues, $cliente_id); + foreach ($requestedOrder as $order) { + $column = $order['column'] ?? 0; + $dir = $order['dir'] ?? 'asc'; + $orderColumn = ClientePreciosModel::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($searchValues, $cliente_id)->countAllResults(), diff --git a/ci4/app/Controllers/Clientes/Clienteplantillaprecios.php b/ci4/app/Controllers/Clientes/Clienteplantillaprecios.php index d528339f..0c65fc90 100755 --- a/ci4/app/Controllers/Clientes/Clienteplantillaprecios.php +++ b/ci4/app/Controllers/Clientes/Clienteplantillaprecios.php @@ -72,24 +72,20 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController public function update($requestedId = null) { + if ($requestedId == null): + return; + endif; + $model = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel'); + $model->delete_values($requestedId); - if ($this->request->getPost()): + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + $csrfTokenName => $newTokenHash + ]; - if ($requestedId == null): - return; - endif; - $model = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel'); - $model->delete_values($requestedId); + return $this->respond($data); - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); - $data = [ - $csrfTokenName => $newTokenHash - ]; - - return $this->respond($data); - - endif; // ($requestMethod === 'post') } @@ -262,16 +258,16 @@ class Clienteplantillaprecios extends \App\Controllers\BaseResourceController } $start = $reqData['start'] ?? 0; $length = $reqData['length'] ?? 5; - $search = $reqData['search']['value']; + $searchValues = get_filter_datatables_columns($reqData); $requestedOrder = $reqData['order']['0']['column'] ?? 1; $order = ClientePlantillaPreciosModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0]; $dir = $reqData['order']['0']['dir'] ?? 'asc'; - $resourceData = $this->model->getResource($search)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); + $resourceData = $this->model->getResource($searchValues)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); return $this->respond(Collection::datatable( $resourceData, $this->model->getResource()->countAllResults(), - $this->model->getResource($search)->countAllResults() + $this->model->getResource($searchValues)->countAllResults() )); } else { return $this->failUnauthorized('Invalid request', 403); diff --git a/ci4/app/Controllers/Clientes/Clienteplantillaprecioslineas.php b/ci4/app/Controllers/Clientes/Clienteplantillaprecioslineas.php index a2378aec..83cfd625 100755 --- a/ci4/app/Controllers/Clientes/Clienteplantillaprecioslineas.php +++ b/ci4/app/Controllers/Clientes/Clienteplantillaprecioslineas.php @@ -93,31 +93,27 @@ class Clienteplantillaprecioslineas extends \App\Controllers\BaseResourceControl } $start = $reqData['start'] ?? 0; $length = $reqData['length'] ?? 5; - $requestedOrder = $reqData['order']['0']['column'] ?? 0; - $requestedOrder2 = $reqData['order']['1']['column'] ?? $requestedOrder; - $requestedOrder3 = $reqData['order']['2']['column'] ?? $requestedOrder; - $requestedOrder4 = $reqData['order']['3']['column'] ?? $requestedOrder; - $requestedOrder5 = $reqData['order']['4']['column'] ?? $requestedOrder; - $order = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder > 0 ? $requestedOrder : 0]; - $order2 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder2 >= 0 ? $requestedOrder2 : $requestedOrder]; - $order3 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder3 >= 0 ? $requestedOrder3 : $requestedOrder]; - $order4 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder4 : $requestedOrder]; - $order5 = ClientePlantillaPreciosLineasModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder5 : $requestedOrder]; - $dir = $reqData['order']['0']['dir'] ?? 'asc'; - $dir2 = $reqData['order']['1']['dir'] ?? $dir; - $dir3 = $reqData['order']['2']['dir'] ?? $dir; - $dir4= $reqData['order']['3']['dir'] ?? $dir; - $dir5= $reqData['order']['4']['dir'] ?? $dir; - + + $requestedOrder = $reqData['order'] ?? []; + $searchValues = get_filter_datatables_columns($reqData); + $plantilla_id = $reqData['plantilla_id'] ?? 0; - $resourceData = $this->model->getResource($plantilla_id) - ->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->orderBy($order5, $dir5) - ->limit($length, $start)->get()->getResultObject(); + $resourceData = $this->model->getResource($searchValues, $plantilla_id); + foreach ($requestedOrder as $order) { + $column = $order['column'] ?? 0; + $dir = $order['dir'] ?? 'asc'; + $orderColumn = ClientePlantillaPreciosLineasModel::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($plantilla_id)->countAllResults(), - $this->model->getResource($plantilla_id)->countAllResults() + $this->model->getResource([], $plantilla_id)->countAllResults(), + $this->model->getResource($searchValues, $plantilla_id)->countAllResults() )); } else { return $this->failUnauthorized('Invalid request', 403); diff --git a/ci4/app/Models/Clientes/ClientePlantillaPreciosLineasModel.php b/ci4/app/Models/Clientes/ClientePlantillaPreciosLineasModel.php index 29351dd3..9e1b6852 100755 --- a/ci4/app/Models/Clientes/ClientePlantillaPreciosLineasModel.php +++ b/ci4/app/Models/Clientes/ClientePlantillaPreciosLineasModel.php @@ -7,14 +7,16 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel protected $table = "cliente_plantilla_precios_lineas"; const SORTABLE = [ - 0 => "t1.tipo", - 1 => "t1.tipo_maquina", - 2 => "t1.tipo_impresion", - 3 => "t1.tiempo_min", - 4 => "t1.tiempo_max", - 5 => "t1.precio_hora", - 6 => "t1.margen", - + 0 => "t1.id", + 1 => "t1.tipo", + 2 => "t1.tipo_maquina", + 3 => "t1.tipo_impresion", + 4 => "t1.tiempo_min", + 5 => "t1.tiempo_max", + 6 => "t1.precio_hora", + 7 => "t1.margen", + 8 => "CONCAT(t2.first_name, ' ', t2.last_name)", + 9 => "t1.updated_at", ]; /** @@ -113,10 +115,20 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel function delete_values($plantilla_id = 0){ + $datetime = (new \CodeIgniter\I18n\Time("now")); + $date_value = $datetime->format('Y-m-d H:i:s'); + $this->db ->table($this->table . " t1") ->where('t1.plantilla_id', $plantilla_id) ->set('is_deleted', 1) + ->set('deleted_at', $date_value) + ->update(); + + $this->db + ->table('cliente_precios' . " t1") + ->where('t1.plantilla_id', $plantilla_id) + ->set('plantilla_id', null) ->update(); } @@ -127,14 +139,15 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel * * @return \CodeIgniter\Database\BaseBuilder */ - public function getResource($plantilla_id = -1) + public function getResource($search = [], $plantilla_id = -1) { $builder = $this->db ->table($this->table . " t1") ->select( "t1.id as id, t1.tipo AS tipo, t1.tipo_maquina AS tipo_maquina, t1.tipo_impresion AS tipo_impresion, t1.tiempo_min AS tiempo_min, t1.tiempo_max AS tiempo_max, t1.precio_hora AS precio_hora, t1.margen AS margen, - t1.user_updated_id AS user_updated_id, t1.updated_at AS updated_at, CONCAT(t2.first_name, ' ', t2.last_name) AS user_updated" + t1.user_updated_id AS user_updated_id, t1.updated_at AS updated_at, CONCAT(t2.first_name, ' ', t2.last_name) AS user_updated, + t1.id AS DT_RowId" ); $builder->join("users t2", "t1.user_updated_id = t2.id", "left"); @@ -142,8 +155,19 @@ class ClientePlantillaPreciosLineasModel extends \App\Models\BaseModel $builder->where('t1.is_deleted', 0); $builder->where('t1.plantilla_id', $plantilla_id); - - return $builder; + if (empty($search)) + return $builder; + else { + $builder->groupStart(); + foreach ($search as $col_search) { + if ($col_search[0] > 0 && $col_search[0] < 4) + $builder->where(self::SORTABLE[$col_search[0]], $col_search[2]); + else + $builder->like(self::SORTABLE[$col_search[0]], $col_search[2]); + } + $builder->groupEnd(); + return $builder; + } } public function checkIntervals($data = [], $id_linea = null, $plantilla_id = null){ diff --git a/ci4/app/Models/Clientes/ClientePlantillaPreciosModel.php b/ci4/app/Models/Clientes/ClientePlantillaPreciosModel.php index 2ec9978d..c3f55da2 100755 --- a/ci4/app/Models/Clientes/ClientePlantillaPreciosModel.php +++ b/ci4/app/Models/Clientes/ClientePlantillaPreciosModel.php @@ -7,7 +7,8 @@ class ClientePlantillaPreciosModel extends \App\Models\BaseModel protected $table = "cliente_plantilla_precios"; const SORTABLE = [ - 0 => "t1.nombre", + 0 => "t1.id", + 1 => "t1.nombre", ]; /** @@ -48,11 +49,11 @@ class ClientePlantillaPreciosModel extends \App\Models\BaseModel /** * Get resource data. * - * @param string $search + * @param array $search * * @return \CodeIgniter\Database\BaseBuilder */ - public function getResource(string $search = "", $cliente_id = -1) + public function getResource($search = []) { $builder = $this->db ->table($this->table . " t1") @@ -61,14 +62,17 @@ class ClientePlantillaPreciosModel extends \App\Models\BaseModel ); $builder->where('t1.is_deleted', 0); - - return empty($search) - ? $builder - : $builder - ->groupStart() - ->like("t1.nombre", $search) - ->groupEnd(); + 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; + } } } 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 52a869f9..5766a61f 100644 --- a/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php +++ b/ci4/app/Views/themes/vuexy/form/clientes/cliente/_clienteFormItems.php @@ -880,74 +880,6 @@ $(document).on('click', '.btn-remove', function(e) { endSection() ?> -section("additionalInlineJs") ?> -/************************************** - Tarifas cliente -***************************************/ -/* - $('#plantillas').select2({ - allowClear: false, - ajax: { - url: '', - type: 'post', - dataType: 'json', - - data: function (params) { - return { - id: 'id', - text: 'nombre', - searchTerm: params.term, - : v - }; - }, - delay: 60, - processResults: function (response) { - - yeniden(response.); - - return { - results: response.menu - }; - }, - - cache: true - } - }); - - - - $('#plantillas').on('change.select2', function(){ - const data = $('#plantillas').select2('data'); - if(data.length>0){ - const domain = window.location.origin - fetch(domain + "/clientes/clienteprecios/update/" + id , { - method: "POST", - body: JSON.stringify({ - plantilla_id: data[0].id, - : v - }), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }).then(function(){ - theTablePrecios.clearPipeline(); - theTablePrecios.draw(); - }) - - } - - }); - - - $('#convert2template').on('click', function(){ - var newAddDialog = $('#convert2Template') - newAddDialog.modal("show"); - - }) - -endSection() ?> - - section("additionalInlineJs") ?> /**************************************** Direcciones cliente diff --git a/ci4/app/Views/themes/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosForm.php b/ci4/app/Views/themes/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosForm.php index d2c26e2f..17d94304 100644 --- a/ci4/app/Views/themes/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosForm.php +++ b/ci4/app/Views/themes/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosForm.php @@ -16,12 +16,8 @@ getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
- " - /> + " /> "btn btn-secondary"]) ?>
@@ -31,22 +27,28 @@ - - + +
+

-

- + + + @@ -55,308 +57,327 @@ - - + + - + -
ID +
+
- - + + endSection() ?> - -section('additionalInlineJs') ?> - + + section('additionalInlineJs') ?> + /* const lastColNr_lineas = $('#tableOfPlantillasPreciosLineas').find("tr:first th").length - 1; - + const url = window.location.href; const url_parts = url.split('/'); let id = -1; if(url_parts[url_parts.length-2] == 'edit'){ - id = url_parts[url_parts.length-1]; + id = url_parts[url_parts.length-1]; } const actionBtns_lineas = function(data) { - return ` - - - - `; + return ` + + + + `; }; const tipo_linea = [ - {label:'', value:'interior'}, - {label:'', value: 'cubierta'}, - {label:'', value: 'sobrecubierta'} + {label:'', value:'interior'}, + {label:'', value: 'cubierta'}, + {label:'', value: 'sobrecubierta'} ]; const tipo_maquina = [ - {label: '', value:'toner'}, - {label: '', value:'inkjet'}, + {label: '', value:'toner'}, + {label: '', value:'inkjet'}, ]; const tipo_impresion = [ - {label: '', value:'negro'}, - {label: '', value:'negrohq'}, - {label: '', value:'color'}, - {label: '', value:'colorhq'}, + {label: '', value:'negro'}, + {label: '', value:'negrohq'}, + {label: '', value:'color'}, + {label: '', value:'colorhq'}, ]; - var editor = new $.fn.dataTable.Editor( { - ajax: { - url: "", - headers: { - : v, - }, - }, - table : "#tableOfPlantillasPreciosLineas", - idSrc: 'id', - fields: [ { - name: "tipo", - type: "select", - options: tipo_linea - }, { - name: "tipo_maquina", - type: "select", - options: tipo_maquina - }, { - name: "tipo_impresion", - type: "select", - options: tipo_impresion - }, { - name: "tiempo_min" - }, { - name: "tiempo_max" - }, { - name: "precio_hora" - }, { - name: "margen" - }, { - name: "user_updated_id", - type:'hidden', - - }, { - name: "updated_at", - type:'hidden', - - }, { - "name": "plantilla_id", - "type": "hidden" - },{ - "name": "deleted_at", - "type": "hidden" - },{ - "name": "is_deleted", - "type": "hidden" - }, - ] + var editor = new $.fn.dataTable.Editor( { + ajax: { + url: "", + headers: { + : v, + }, + }, + table : "#tableOfPlantillasPreciosLineas", + idSrc: 'id', + fields: [ { + name: "tipo", + type: "select", + options: tipo_linea + }, { + name: "tipo_maquina", + type: "select", + options: tipo_maquina + }, { + name: "tipo_impresion", + type: "select", + options: tipo_impresion + }, { + name: "tiempo_min" + }, { + name: "tiempo_max" + }, { + name: "precio_hora" + }, { + name: "margen" + }, { + name: "user_updated_id", + type:'hidden', + + }, { + name: "updated_at", + type:'hidden', + + }, { + "name": "plantilla_id", + "type": "hidden" + },{ + "name": "deleted_at", + "type": "hidden" + },{ + "name": "is_deleted", + "type": "hidden" + }, + ] } ); editor.on( 'preSubmit', function ( e, d, type ) { - if ( type === 'create'){ - d.data[0]['plantilla_id'] = id; - } - else if(type === 'edit' ) { - for (v in d.data){ - d.data[v]['plantilla_id'] = id; - } - } + if ( type === 'create'){ + d.data[0]['plantilla_id'] = id; + } + else if(type === 'edit' ) { + for (v in d.data){ + d.data[v]['plantilla_id'] = id; + } + } }); - - - editor.on( 'postSubmit', function ( e, json, data, action ) { - - yeniden(json.); - const domain = window.location.origin - fetch(domain + "/clientes/clienteprecios/update/" + -1 , { - method: "POST", - body: JSON.stringify({ - plantilla_id: id, - : v - }), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) + + editor.on( 'postSubmit', function ( e, json, data, action ) { + + yeniden(json.); + + const domain = window.location.origin + fetch(domain + "/clientes/clienteprecios/update/" + -1 , { + method: "POST", + body: JSON.stringify({ + plantilla_id: id, + : v + }), + headers: { + "Content-type": "application/json; charset=UTF-8" + } + }) }); editor.on( 'submitSuccess', function ( e, json, data, action ) { - - theTable.clearPipeline(); - theTable.draw(); + + theTable.clearPipeline(); + theTable.draw(); }); - var theTable = $('#tableOfPlantillasPreciosLineas').DataTable( { - serverSide: true, - processing: true, - autoWidth: true, - responsive: true, - lengthMenu: [ 10, 25, 50, 100], - order: [[ 0, "asc" ], [ 1, "asc" ], [ 2, "asc" ], [ 3, "asc" ]], - pageLength: 50, - lengthChange: true, - searching: false, - paging: true, - info: false, - dom: '<"mt-4"><"float-end"B><"float-start"l><"mt-4 mb-3"p>', - ajax : $.fn.dataTable.pipeline( { - url: '', - data: { - plantilla_id: id, - }, - method: 'POST', - headers: {'X-Requested-With': 'XMLHttpRequest'}, - async: true, - }), - columns: [ - { 'data': 'tipo' , - 'render': function ( data, type, row, meta ) { - if(data=='interior') + var theTable = $('#tableOfPlantillasPreciosLineas').DataTable( { + serverSide: true, + processing: true, + autoWidth: true, + responsive: true, + lengthMenu: [ 10, 25, 50, 100], + order: [[ 0, "asc" ], [ 1, "asc" ], [ 2, "asc" ], [ 3, "asc" ]], + pageLength: 50, + lengthChange: true, + searching: false, + paging: true, + info: false, + dom: '<"mt-4"><"float-end"B><"float-start"l> + <"mt-4 mb-3"p>', + ajax : $.fn.dataTable.pipeline( { + url: '', + data: { + plantilla_id: id, + }, + method: 'POST', + headers: {'X-Requested-With': 'XMLHttpRequest'}, + async: true, + }), + columns: [ + { 'data': 'tipo' , + 'render': function ( data, type, row, meta ) { + if(data=='interior') return ''; - else if(data=='cubierta') + else if(data=='cubierta') return ''; - else if(data=='sobrecubierta') + else if(data=='sobrecubierta') return ''; - } - }, - { 'data': 'tipo_maquina', - 'render': function ( data, type, row, meta ) { - if(data=='toner') + } + }, + { 'data': 'tipo_maquina', + 'render': function ( data, type, row, meta ) { + if(data=='toner') return ''; - else if(data=='inkjet') + else if(data=='inkjet') return ''; - } - }, - { 'data': 'tipo_impresion', - 'render': function ( data, type, row, meta ) { - if(data=='negro') + } + }, + { 'data': 'tipo_impresion', + 'render': function ( data, type, row, meta ) { + if(data=='negro') return ''; - else if(data=='negrohq') + else if(data=='negrohq') return ''; - else if(data=='color') + else if(data=='color') return ''; - else if(data=='colorhq') + else if(data=='colorhq') return ''; - } - }, - { 'data': 'tiempo_min' }, - { 'data': 'tiempo_max' }, - { 'data': 'precio_hora' }, - { 'data': 'margen' }, - { 'data': 'user_updated_id', - 'render': function ( data, type, row, meta ) { - return row.user_updated - } - }, - { 'data': 'updated_at' }, - { - data: actionBtns_lineas, - className: 'row-edit dt-center' - } - ], - columnDefs: [ - { - orderable: false, - searchable: false, - targets: [lastColNr_lineas] - }, - {"orderData": [ 0, 1 ], "targets": 0 }, + } + }, + { 'data': 'tiempo_min' }, + { 'data': 'tiempo_max' }, + { 'data': 'precio_hora' }, + { 'data': 'margen' }, + { 'data': 'user_updated_id', + 'render': function ( data, type, row, meta ) { + return row.user_updated + } + }, + { 'data': 'updated_at' }, + { + data: actionBtns_lineas, + className: 'row-edit dt-center' + } + ], + columnDefs: [ + { + orderable: false, + searchable: false, + targets: [lastColNr_lineas] + }, + {"orderData": [ 0, 1 ], "targets": 0 }, - ], - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - }, - buttons: [ - { - extend: 'collection', - text: 'Exportar', - buttons:[ - 'copy', 'csv', 'excel', 'print', { + ], + language: { + url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" + }, + buttons: [ + { + extend: 'collection', + text: 'Exportar', + buttons:[ + 'copy', 'csv', 'excel', 'print', { extend: 'pdfHtml5', orientation: 'landscape', pageSize: 'A4' - } - ] - }, - { - className: 'btn btn-primary me-sm-3 me-1', - extend: "createInline", - editor: editor, - formOptions: { - submitTrigger: -1, - submitHtml: '' - } - } ] - } ); + } + ] + }, + { + className: 'btn btn-primary me-sm-3 me-1', + extend: "createInline", + editor: editor, + formOptions: { + submitTrigger: -1, + submitHtml: '' + } + } ] + } ); - - - // Activate an inline edit on click of a table cell - $('#tableOfPlantillasPreciosLineas').on( 'click', 'tbody span.edit', function (e) { - editor.inline( - theTable.cells(this.parentNode.parentNode, '*').nodes(), - { - cancelHtml: '', - cancelTrigger: 'span.cancel', - submitHtml: '', - submitTrigger: 'span.edit', - submit: 'allIfChanged' - } - ); - } ); - - // Delete row - $(document).on('click', '.btn-delete', function(e) { - $(".btn-remove").attr('data-id', $(this).attr('data-id')); - }); - $(document).on('click', '.btn-remove', function(e) { - const dataId = $(this).attr('data-id'); - const row = $(this).closest('tr'); - if ($.isNumeric(dataId)) { - $.ajax({ - url: `/clientes/clienteplantillaprecioslineas/delete/${dataId}`, - method: 'GET', - }).done((data, textStatus, jqXHR) => { - $('#confirm2delete').modal('toggle'); - theTable.clearPipeline(); - theTable.row($(row)).invalidate().draw(); - popSuccessAlert(data.msg ?? jqXHR.statusText); - }).fail((jqXHR, textStatus, errorThrown) => { - popErrorAlert(jqXHR.responseJSON.messages.error) - }) - } - }); -endSection() ?> + // Activate an inline edit on click of a table cell + $('#tableOfPlantillasPreciosLineas').on( 'click', 'tbody span.edit', function (e) { + editor.inline( + theTable.cells(this.parentNode.parentNode, '*').nodes(), + { + cancelHtml: '', + cancelTrigger: 'span.cancel', + submitHtml: '', + submitTrigger: 'span.edit', + submit: 'allIfChanged' + } + ); + } ); + + + // Delete row + $(document).on('click', '.btn-delete', function(e) { + $(".btn-remove").attr('data-id', $(this).attr('data-id')); + }); + + $(document).on('click', '.btn-remove', function(e) { + const dataId = $(this).attr('data-id'); + const row = $(this).closest('tr'); + if ($.isNumeric(dataId)) { + $.ajax({ + url: `/clientes/clienteplantillaprecioslineas/delete/${dataId}`, + method: 'GET', + }).done((data, textStatus, jqXHR) => { + $('#confirm2delete').modal('toggle'); + theTable.clearPipeline(); + theTable.row($(row)).invalidate().draw(); + popSuccessAlert(data.msg ?? jqXHR.statusText); + }).fail((jqXHR, textStatus, errorThrown) => { + popErrorAlert(jqXHR.responseJSON.messages.error) + }) + } + }); + */ +endSection() ?> -section('css') ?> - - "> -endSection() ?> +section('css') ?> + + "> +endSection() ?> section('additionalExternalJs') ?> - - - - - - - - -endSection() ?> - + + + + + + + + + + + +endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosList.php b/ci4/app/Views/themes/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosList.php index cadb02aa..ff910539 100644 --- a/ci4/app/Views/themes/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosList.php +++ b/ci4/app/Views/themes/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosList.php @@ -10,14 +10,16 @@

'btn btn-primary float-end']); ?> -
+ +
+ - + @@ -50,100 +52,6 @@ + + endSection() ?> - -section('additionalInlineJs') ?> - - const lastColNr2 = $(".using-exportable-data-table").find("tr:first th").length - 1; - const actionBtns2 = function(data) { - return ` - - - - `; - }; - - - $(document).on('click', '.btn-edit', function(e) { - window.location.href = `/clientes/clienteplantillaprecios/edit/${$(this).attr('data-id')}`; - }); - - - // Delete row - $(document).on('click', '.btn-delete', function(e) { - $(".btn-remove").attr('data-id', $(this).attr('data-id')); - }); - - $(document).on('click', '.btn-remove', function(e) { - const dataId = $(this).attr('data-id'); - const row = $(this).closest('tr'); - if ($.isNumeric(dataId)) { - - $.ajax({ - url: `/clientes/clienteplantillaprecios/delete/${dataId}`, - method: 'GET', - }).done((data, textStatus, jqXHR) => { - $('#confirm2delete').modal('toggle'); - tablePLantillaPrecios.clearPipeline(); - tablePLantillaPrecios.row($(row)).invalidate().draw(); - - // Se borran las lineas asociadas - const domain = window.location.origin - fetch(domain + "/clientes/clienteplantillaprecios/update/" + dataId , { - method: "POST", - body: JSON.stringify({ - : v - }), - headers: { - "Content-type": "application/json; charset=UTF-8" - } - }) - - popSuccessAlert(data.msg ?? jqXHR.statusText); - }).fail((jqXHR, textStatus, errorThrown) => { - popErrorAlert(jqXHR.responseJSON.messages.error) - }); - } - }); - - - var tablePLantillaPrecios = $('#tableOfClienteplantillaprecios').DataTable( { - serverSide: true, - processing: true, - autoWidth: true, - responsive: true, - lengthMenu: [ 5, 10, 25, 50, 75, 100, 250], - order: [[ 0, "asc" ]], - pageLength: 25, - lengthChange: true, - searching: true, - paging: true, - info: true, - stateSave: true, - dom: "lftp", - ajax : $.fn.dataTable.pipeline( { - url: '', - method: 'POST', - headers: {'X-Requested-With': 'XMLHttpRequest'}, - async: true, - }), - columns: [ - { data: 'nombre'}, - { data: actionBtns2, - className: 'row-edit dt-center'} - ], - columnDefs: [ - { - orderable: false, - targets: [lastColNr2] - }, - { - searchable: false, - targets: [lastColNr2] - } - ], - language: { - url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" - } - } ); -endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/vuexy/form/user/_userFormItems.php b/ci4/app/Views/themes/vuexy/form/user/_userFormItems.php index 3e75ae63..e7e5b32a 100644 --- a/ci4/app/Views/themes/vuexy/form/user/_userFormItems.php +++ b/ci4/app/Views/themes/vuexy/form/user/_userFormItems.php @@ -61,11 +61,11 @@ $selectedChatDepartments = isset($chatDepartmentUser) && is_array($chatDepartmentUser) ? $chatDepartmentUser : []; $selectedKeywords = array_map(fn($chatDepartment) => $chatDepartment->name, $selectedChatDepartments); foreach ($chatDepartments as $item) : - $isSelected = in_array($item["name"], $selectedKeywords) ? 'selected' : ''; + $isSelected = in_array($item->name, $selectedKeywords) ? 'selected' : ''; ?> - diff --git a/httpdocs/assets/js/safekat/components/table.js b/httpdocs/assets/js/safekat/components/table.js index 84f94c7b..af794fe0 100644 --- a/httpdocs/assets/js/safekat/components/table.js +++ b/httpdocs/assets/js/safekat/components/table.js @@ -4,6 +4,8 @@ let Table = function ( url, columns, data, + row_id = "DT_RowId", + language = "es-ES") { this.domItem = domItem; @@ -11,6 +13,7 @@ let Table = function ( this.url = url; this.columns = columns; this.data = data; + this.row_id = row_id; this.language = language; this.table = null; @@ -24,6 +27,7 @@ let Table = function ( actions = ['view', 'edit', 'delete', 'cancel'], order = [[0, 'asc']], buttonsExport = true, + colVisibility = true, buttonNewWithEditor = false, editor = null, booleanColumns = [], @@ -53,11 +57,6 @@ let Table = function ( let buttons = []; if (buttonsExport) { buttons = [ - { - extend: 'colvis', - columns: ':not(.noVis)', - - }, 'copy', 'csv', 'excel', 'print', { extend: 'pdfHtml5', orientation: 'landscape', @@ -65,6 +64,13 @@ let Table = function ( } ]; } + if(colVisibility){ + buttons.unshift({ + extend: 'colvis', + columns: ':not(.noVis)', + + }) + } if (buttonNewWithEditor) { buttons.push( { @@ -91,6 +97,7 @@ let Table = function ( order: order, orderCellsTop: true, fixedHeader: true, + rowId: row_id, dom: dom, ajax: $.fn.dataTable.pipeline({ url: this.url, diff --git a/httpdocs/assets/js/safekat/components/tableEditor.js b/httpdocs/assets/js/safekat/components/tableEditor.js index c0a5c370..9b650765 100644 --- a/httpdocs/assets/js/safekat/components/tableEditor.js +++ b/httpdocs/assets/js/safekat/components/tableEditor.js @@ -1,6 +1,6 @@ let TableEditor = function ( table, - url, + url = "", headers, idSrc, fields) { @@ -16,15 +16,26 @@ let TableEditor = function ( this.init = function () { - this.editor = new $.fn.dataTable.Editor( { - ajax: { - url: url, - headers: headers, - }, - table : table, - idSrc: idSrc, - fields: fields, - }); + if (url == "") { + this.editor = new $.fn.dataTable.Editor({ + table: table, + idSrc: idSrc, + fields: fields, + }); + } + + else { + this.editor = new $.fn.dataTable.Editor({ + ajax: { + url: url, + headers: headers, + }, + table: table, + idSrc: idSrc, + fields: fields, + }); + } + }; } diff --git a/httpdocs/assets/js/safekat/pages/cliente/tarifasCliente.js b/httpdocs/assets/js/safekat/pages/cliente/tarifasCliente.js index 22c82e02..d973be42 100644 --- a/httpdocs/assets/js/safekat/pages/cliente/tarifasCliente.js +++ b/httpdocs/assets/js/safekat/pages/cliente/tarifasCliente.js @@ -213,14 +213,14 @@ class tarifasClienteView { popErrorAlert(window.language.ClientePrecios.errors.error_nombre_template, 'error-nombre') } else { - new Ajax('/clientes/clienteplantillaprecios/add', + new Ajax('/clientes/clienteplantillaprecios/add', { 'from_client_data': 1, 'cliente_id': this.clienteId, 'nombre': this.convertToTemplate.getNombrePlantilla(), [this.csrf_token]: this.csrf_hash - }, - {}, + }, + {}, (response) => { if (response.id) { @@ -228,7 +228,7 @@ class tarifasClienteView { this.selectorPlantilla.setOption(response.id, this.convertToTemplate.getNombrePlantilla()); this.selectorPlantilla.onChange(this.#changePlantilla.bind(this)); } - }, + }, (error) => { console.log(error); } @@ -267,6 +267,28 @@ class tarifasClienteView { #changePlantilla() { + self = this; + const data = $('#plantillas').select2('data'); + if (data.length > 0) { + const id = data[0].id; + new Ajax( + '/clienteprecios/changeplantilla', + { + 'cliente_id': self.clienteId, + 'plantilla_id': id, + [this.csrf_token]: this.csrf_hash + }, + {}, + () => { + self.tableTarifas.table.clearPipeline(); + self.tableTarifas.table.draw(); + }, + (error) => { + console.log(error); + } + ).post(); + } + } diff --git a/httpdocs/assets/js/safekat/pages/plantillasTarifasCliente/edit.js b/httpdocs/assets/js/safekat/pages/plantillasTarifasCliente/edit.js new file mode 100644 index 00000000..03156c92 --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/plantillasTarifasCliente/edit.js @@ -0,0 +1,433 @@ +import Table from '../../components/table.js'; +import TableEditor from '../../components/tableEditor.js'; +import ConfirmDeleteModal from '../../components/ConfirmDeleteModal.js'; +import Ajax from '../../components/ajax.js'; +import { getToken } from '../../common/common.js'; + +class PlantillasTarifasClienteForm { + + constructor() { + + this.domItem = $('.card-body'); + + this.plantillaId = window.location.href.split("/").pop(); + + this.csrf_token = getToken(); + this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val(); + + this.tablePlantilla = null; + this.deleteModal = null; + + this.localEditor = null; + this.ajaxEditor = null; + + this.changedRows = []; + } + + init() { + + const self = this; + + this.headerSearcher(); + + this.deleteModal = new ConfirmDeleteModal('plantillasTarifasCliente'); + this.deleteModal.init(); + + this.#initTable(); + + this.#initEditor(); + + // Editar en linea la fila + this.tablePlantilla.table.on('click', 'tbody span.edit', function (e) { + + const row = $(this).closest('tr'); + + // Iniciar la edición en línea para todas las celdas de la fila + self.localEditor.editor.inline( + self.tablePlantilla.table.cells(row, '*').nodes(), + { + cancelHtml: '', + submitHtml: '', + cancelTrigger: row.find('span.cancel')[0], + submitTrigger: row.find('span.edit')[0], + submit: 'allIfChanged' + } + ); + }); + } + + + #initEditor() { + + const self = this; + + const tipo_linea = [ + { label: window.language.ClientePrecios.interior, value: 'interior' }, + { label: window.language.ClientePrecios.cubierta, value: 'cubierta' }, + { label: window.language.ClientePrecios.sobrecubierta, value: 'sobrecubierta' } + ]; + + const tipo_maquina = [ + { label: window.language.ClientePrecios.toner, value: 'toner' }, + { label: window.language.ClientePrecios.inkjet, value: 'inkjet' }, + ]; + + const tipo_impresion = [ + { label: window.language.ClientePrecios.negro, value: 'negro' }, + { label: window.language.ClientePrecios.negrohq, value: 'negrohq' }, + { label: window.language.ClientePrecios.color, value: 'color' }, + { label: window.language.ClientePrecios.colorhq, value: 'colorhq' }, + ]; + + const editorFields = [ + { + name: "id", + type: "readonly" + }, { + name: "tipo", + type: "select", + options: tipo_linea + }, { + name: "tipo_maquina", + type: "select", + options: tipo_maquina + }, { + name: "tipo_impresion", + type: "select", + options: tipo_impresion + }, { + name: "tiempo_min" + }, { + name: "tiempo_max" + }, { + name: "precio_hora" + }, { + name: "margen" + }, + ]; + this.localEditor = new TableEditor( + $('#tableOfPlantillasPreciosLineas'), + '', + {}, + 'id', + editorFields); + + this.localEditor.init(); + + this.ajaxEditor = new TableEditor( + $('#tableOfPlantillasPreciosLineas'), + '/clienteplantillaprecioslineas/datatable_editor', + { [this.csrf_token]: this.csrf_hash }, + 'id', + editorFields); + + this.ajaxEditor.init(); + + + this.localEditor.editor.on('postEdit', function (e, json, data) { + + /*console.log(self.tablePlantilla.table.row(0).data()); + self.tablePlantilla.table.rows().every( function ( rowIdx ) { + var rowData = this.data(); + if(rowData.id == data.id){ + self.tablePlantilla.table.row(rowIdx).data({ + id: data.id, + tipo: 'interior', // 'interior', 'cubierta', etc. + tipo_maquina: 'toner', // 'toner', 'inkjet' + tipo_impresion: 'negro', // 'negro', 'color', etc. + tiempo_min: 0, + tiempo_max: 1, + precio_hora: 1, + margen: 100, + user_updated: 'yo', + updated_at: '200000' + }).draw(false); + } + }) + //self.tablePlantilla.table.row(0).data(data2).draw(false); + + /*self.tablePlantilla.table.row(0).data({ + id: 1, + tipo: 'interior', // 'interior', 'cubierta', etc. + tipo_maquina: 'toner', // 'toner', 'inkjet' + tipo_impresion: 'negro', // 'negro', 'color', etc. + tiempo_min: 0, + tiempo_max: 1, + precio_hora: 1, + margen: 100, + user_updated: 'yo', + updated_at: '200000' + }).draw(false);*/ + let row = self.tablePlantilla.table.row('#' + data.id); + if (row.length) { + console.log('Data:', data) + let rowData = row.data(); + console.log('Datos de la fila:', rowData); + + // Actualizar los datos de la fila + self.tablePlantilla.table.row('#' + data.id).data({ + id: data.id, + tipo: data.tipo, + tipo_maquina: data.tipo_maquina, + tipo_impresion: data.tipo_impresion, + tiempo_min: data.tiempo_min, + tiempo_max: data.tiempo_max, + precio_hora: data.precio_hora, + margen: "150", + user_updated_id: data.user_updated_id, + user_updated: data.user_updated, + updated_at: data.updated_at + }).draw(true); // Usar invalidate() si es necesario + rowData = row.data(); + console.log('Datos de la fila actualizados:', rowData); + } else { + console.warn('No se encontró la fila con ID row_' + data.id); + } + /* + if (row.length > 0) { + self.tablePlantilla.table.row(row[0]).data({ + id: data.id, + tipo: data.tipo, // 'interior', 'cubierta', etc. + tipo_maquina: data.tipo_maquina, // 'toner', 'inkjet' + tipo_impresion: data.tipo_impresion, // 'negro', 'color', etc. + tiempo_min: data.tiempo_min, + tiempo_max: data.tiempo_max, + precio_hora: data.precio_hora, + margen: data.margen, + user_updated: data.user_updated, + updated_at: data.updated_at + }).invalidate().draw(false); + + console.log('---'); + console.log(self.tablePlantilla.table.row(row[0]).data()) + }*/ + + + + // check if this id exists + if (!self.changedRows.includes(data.id)) + self.changedRows.push(data.id); + + + }); + + /* + this.editorTarifas.editor.on('preSubmit', function (e, d, type) { + if (type === 'create') { + d.data[0]['cliente_id'] = self.clienteId; + } + }); + + this.editorTarifas.editor.on('submitSuccess', function (e, json, data, action) { + + self.tablePlantilla.table.clearPipeline(); + self.tablePlantilla.table.draw(); + }); + + + this.editorTarifas.editor.on('postEdit', function (e, json, data, action) { + self.#borrarPlantillaTarifa(self.clienteId); + self.selectorPlantilla.offChange(); + self.selectorPlantilla.setOption(0, 'Personalizado'); + self.selectorPlantilla.onChange(self.#changePlantilla.bind(this)); + }) + + this.editorTarifas.editor.on('postCreate', function (e, json, data, action) { + self.#borrarPlantillaTarifa(self.clienteId); + self.selectorPlantilla.offChange(); + self.selectorPlantilla.setOption(0, 'Personalizado'); + self.selectorPlantilla.onChange(self.#changePlantilla.bind(this)); + }) + + this.editorTarifas.editor.on('postCancel', function (e, json, data) { + // Restaurar botones de acción por fila + self.tablePlantilla.table.rows().nodes().each(function (node) { + $(node).find('span.edit').removeClass('d-none'); + $(node).find('span.cancel, span.submit').addClass('d-none'); + }); + });*/ + } + + + #initTable() { + + const self = this; + + const columns = + [ + { 'data': 'id' }, + { + 'data': 'tipo', + 'render': function (data, type, row, meta) { + if (data == 'interior') + return window.language.ClientePrecios.interior; + else if (data == 'cubierta') + return window.language.ClientePrecios.cubierta; + else if (data == 'sobrecubierta') + return window.language.ClientePrecios.sobrecubierta; + } + }, + { + 'data': 'tipo_maquina', + 'render': function (data, type, row, meta) { + if (data == 'toner') + return window.language.ClientePrecios.toner; + else if (data == 'inkjet') + return window.language.ClientePrecios.inkjet; + } + }, + { + 'data': 'tipo_impresion', + 'render': function (data, type, row, meta) { + if (data == 'negro') + return window.language.ClientePrecios.negro; + else if (data == 'negrohq') + return window.language.ClientePrecios.negrohq; + else if (data == 'color') + return window.language.ClientePrecios.color; + else if (data == 'colorhq') + return window.language.ClientePrecios.colorhq; + } + }, + { 'data': 'tiempo_min' }, + { 'data': 'tiempo_max' }, + { 'data': 'precio_hora' }, + { 'data': 'margen' }, + { 'data': 'user_updated' }, + { 'data': 'updated_at' }, + + ]; + + const actions = ['edit', 'delete', 'cancel']; + + this.tablePlantilla = new Table( + $('#tableOfPlantillasPreciosLineas'), + 'plantillaTarifasCliente', + '/clienteplantillaprecioslineas/datatable', + columns, + [ + { name: 'plantilla_id', value: this.plantillaId } + ],'id' + ); + + + this.tablePlantilla.init({ + actions: actions, + colVisibility: false, + buttonsExport: true, + }); + + + this.tablePlantilla.table.on('init.dt', function () { + self.tablePlantilla.table.page.len(50).draw(); + }); + + } + + headerSearcher() { + + const self = this; + + $('#tableOfPlantillasPreciosLineas thead tr').clone(false).appendTo('#tableOfPlantillasPreciosLineas thead'); + $('#tableOfPlantillasPreciosLineas thead tr:eq(1) th').each(function (i) { + + if (!$(this).hasClass("noFilter")) { + + if (i == 1) { + + // Agregar un selector en la segunda columna + $(this).html(''); + + // Agregar opciones al selector + var selector = $('select', this); + selector.append(''); // Opción vacía + selector.append(''); + selector.append(''); + selector.append(''); + + selector.on('change', function () { + var val = $.fn.dataTable.util.escapeRegex( + $(this).val() + ); + self.tablePlantilla.table.column(i).search(val).draw(); + }); + + } + + else if (i == 2) { + // Agregar un selector en la tercera columna + $(this).html(''); + + // Agregar opciones al selector + var selector = $('select', this); + selector.append(''); // Opción vacía + selector.append(''); + selector.append(''); + + selector.on('change', function () { + var val = $.fn.dataTable.util.escapeRegex( + $(this).val() + ); + self.tablePlantilla.table.column(i).search(val).draw(); + }); + } + + else if (i == 3) { + // Agregar un selector en la cuarta columna + $(this).html(''); + + // Agregar opciones al selector + var selector = $('select', this); + selector.append(''); // Opción vacía + selector.append(''); + selector.append(''); + selector.append(''); + selector.append(''); + + selector.on('change', function () { + var val = $.fn.dataTable.util.escapeRegex( + $(this).val() + ); + self.tablePlantilla.table.column(i).search(val).draw(); + }); + } + else { + $(this).html(''); + + $('input', this).on('change clear', function () { + if (self.tablePlantilla.table.column(i).search() !== this.value) { + self.tablePlantilla.table + .column(i) + .search(this.value) + .draw(); + } + }); + } + } + else { + $(this).html(''); + } + }); + + + } + +} + +document.addEventListener('DOMContentLoaded', function () { + + const locale = document.querySelector('meta[name="locale"]').getAttribute('content'); + + + + new Ajax('/translate/getTranslation', { locale: locale, translationFile: ['ClientePrecios'] }, {}, + function (translations) { + window.language = JSON.parse(translations); + new PlantillasTarifasClienteForm().init(); + }, + function (error) { + console.log("Error getting translations:", error); + } + ).post(); + +}); \ No newline at end of file diff --git a/httpdocs/assets/js/safekat/pages/plantillasTarifasCliente/list.js b/httpdocs/assets/js/safekat/pages/plantillasTarifasCliente/list.js new file mode 100644 index 00000000..f0d78bcf --- /dev/null +++ b/httpdocs/assets/js/safekat/pages/plantillasTarifasCliente/list.js @@ -0,0 +1,153 @@ +import Table from '../../components/table.js'; +import ConfirmDeleteModal from '../../components/ConfirmDeleteModal.js'; +import Ajax from '../../components/ajax.js'; +import { getToken } from '../../common/common.js'; + +class PlantillasTarifasClienteList { + + constructor() { + + this.domItem = $('.card-body'); + + this.csrf_token = getToken(); + this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val(); + + this.tablePlantillas = null; + this.deleteModal = null; + } + + init() { + + const self = this; + + this.headerSearcher(); + + this.deleteModal = new ConfirmDeleteModal('plantillasTarifasCliente'); + this.deleteModal.init(); + + this.#initTable(); + + // Editar en linea la fila + this.tablePlantillas.table.on('click', '.btn-edit-' + this.tablePlantillas.getAlias(), function (e) { + + const dataId = $(this).attr('data-id'); + + if (!Number.isNaN(Number(dataId))) { + window.location.href = '/clienteplantillaprecios/edit/' + dataId; + } + }); + + + // Eliminar la fila + this.tablePlantillas.table.on('click', '.btn-delete-' + this.tablePlantillas.getAlias(), function (e) { + const row = $(this).closest('tr')[0]._DT_RowIndex; + const dataId = $(this).attr('data-id'); + self.deleteModal.setData($(this).attr('data-id')); + self.deleteModal.show(() => { + + if (!Number.isNaN(Number(self.deleteModal.getData()))) { + + new Ajax( + '/clienteplantillaprecios/delete/' + dataId, + { + + }, + {}, + (data, textStatus, jqXHR) => { + + self.tablePlantillas.table.clearPipeline(); + self.tablePlantillas.table.row($(row)).invalidate().draw(); + + // Se borran las lineas asociadas + new Ajax( + "/clientes/clienteplantillaprecios/update/" + dataId, + { + [this.csrf_token]: this.csrf_hash + }, + {}, + () => { }, + (error) => { + console.log(error); + }).post(); + + popSuccessAlert(data.msg ?? jqXHR.statusText); + }, + (error) => { + console.log(error); + } + + ).get(); + self.deleteModal.hide(); + } + }); + }); + } + + #initTable() { + + const self = this; + + const columns = [ + { 'data': 'id' }, + { 'data': 'nombre' }, + + ]; + + const actions = ['edit', 'delete']; + + this.tablePlantillas = new Table( + $('#tableOfClienteplantillaprecios'), + 'plantillasTarifasCliente', + '/clienteplantillaprecios/datatable', + columns, + [] + ); + + + this.tablePlantillas.init({ + actions: actions, + colVisibility: false, + buttonsExport: true, + }); + + + this.tablePlantillas.table.on('init.dt', function () { + self.tablePlantillas.table.page.len(50).draw(); + }); + + } + + headerSearcher() { + + const self = this; + + $('#tableOfClienteplantillaprecios thead tr').clone(false).appendTo('#tableOfClienteplantillaprecios thead'); + $('#tableOfClienteplantillaprecios thead tr:eq(1) th').each(function (i) { + + if (!$(this).hasClass("noFilter")) { + + $(this).html(''); + + $('input', this).on('change clear', function () { + if (self.tablePlantillas.table.column(i).search() !== this.value) { + self.tablePlantillas.table + .column(i) + .search(this.value) + .draw(); + } + }); + } + else { + $(this).html(''); + } + }); + + + } + +} + +document.addEventListener('DOMContentLoaded', function () { + + new PlantillasTarifasClienteList().init(); +}); \ No newline at end of file
ID