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) {
=$this->endSection() ?>
-= $this->section("additionalInlineJs") ?>
-/**************************************
- Tarifas cliente
-***************************************/
-/*
- $('#plantillas').select2({
- allowClear: false,
- ajax: {
- url: '= route_to("menuItemsOfClienteplantillaprecios") ?>',
- type: 'post',
- dataType: 'json',
-
- data: function (params) {
- return {
- id: 'id',
- text: 'nombre',
- searchTerm: params.term,
- = csrf_token() ?? "token" ?> : = csrf_token() ?>v
- };
- },
- delay: 60,
- processResults: function (response) {
-
- yeniden(response.= csrf_token() ?>);
-
- 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,
- = csrf_token() ?? "token" ?> : = csrf_token() ?>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");
-
- })
-
-= $this->endSection() ?>
-
-
= $this->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 @@
= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
= view("themes/vuexy/form/clientes/plantillaprecios/_ClienteplantillapreciosFormItems") ?>
- "
- />
+ " />
= anchor(route_to("clienteplantillapreciosList"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary"]) ?>
@@ -31,22 +27,28 @@
-
-
+
+
+
-
+
+
+ | ID |
= lang('ClientePrecios.tipo') ?> |
= lang('ClientePrecios.tipo_maquina') ?> |
= lang('ClientePrecios.tipo_impresion') ?> |
@@ -55,308 +57,327 @@
= lang('ClientePrecios.precio_hora') ?> |
= lang('ClientePrecios.margen') ?> |
= lang('ClientePrecios.user_updated_id') ?> |
- = lang('ClientePrecios.updated_at') ?> |
- = lang('Basic.global.Action') ?> |
+ = lang('ClientePrecios.updated_at') ?> |
+ = lang('Basic.global.Action') ?>
+ |
-
+
-
+
-
-
+
+
= $this->endSection() ?>
-
-=$this->section('additionalInlineJs') ?>
-
+
+ = $this->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:'= lang('ClientePrecios.interior') ?>', value:'interior'},
- {label:'= lang('ClientePrecios.cubierta') ?>', value: 'cubierta'},
- {label:'= lang('ClientePrecios.sobrecubierta') ?>', value: 'sobrecubierta'}
+ {label:'= lang('ClientePrecios.interior') ?>', value:'interior'},
+ {label:'= lang('ClientePrecios.cubierta') ?>', value: 'cubierta'},
+ {label:'= lang('ClientePrecios.sobrecubierta') ?>', value: 'sobrecubierta'}
];
const tipo_maquina = [
- {label: '= lang('ClientePrecios.toner') ?>', value:'toner'},
- {label: '= lang('ClientePrecios.inkjet') ?>', value:'inkjet'},
+ {label: '= lang('ClientePrecios.toner') ?>', value:'toner'},
+ {label: '= lang('ClientePrecios.inkjet') ?>', value:'inkjet'},
];
const tipo_impresion = [
- {label: '= lang('ClientePrecios.negro') ?>', value:'negro'},
- {label: '= lang('ClientePrecios.negrohq') ?>', value:'negrohq'},
- {label: '= lang('ClientePrecios.color') ?>', value:'color'},
- {label: '= lang('ClientePrecios.colorhq') ?>', value:'colorhq'},
+ {label: '= lang('ClientePrecios.negro') ?>', value:'negro'},
+ {label: '= lang('ClientePrecios.negrohq') ?>', value:'negrohq'},
+ {label: '= lang('ClientePrecios.color') ?>', value:'color'},
+ {label: '= lang('ClientePrecios.colorhq') ?>', value:'colorhq'},
];
- var editor = new $.fn.dataTable.Editor( {
- ajax: {
- url: "= route_to('editorOfClienteplantillaprecioslineas') ?>",
- headers: {
- = csrf_token() ?? "token" ?> : = csrf_token() ?>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: "= route_to('editorOfClienteplantillaprecioslineas') ?>",
+ headers: {
+ = csrf_token() ?? "token" ?> : = csrf_token() ?>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.= csrf_token() ?>);
- const domain = window.location.origin
- fetch(domain + "/clientes/clienteprecios/update/" + -1 , {
- method: "POST",
- body: JSON.stringify({
- plantilla_id: id,
- = csrf_token() ?? "token" ?> : = csrf_token() ?>v
- }),
- headers: {
- "Content-type": "application/json; charset=UTF-8"
- }
- })
+
+ editor.on( 'postSubmit', function ( e, json, data, action ) {
+
+ yeniden(json.= csrf_token() ?>);
+
+ const domain = window.location.origin
+ fetch(domain + "/clientes/clienteprecios/update/" + -1 , {
+ method: "POST",
+ body: JSON.stringify({
+ plantilla_id: id,
+ = csrf_token() ?? "token" ?> : = csrf_token() ?>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: '= route_to('dataTableOfClientesplantillaprecioslineas') ?>',
- 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: '= route_to('dataTableOfClientesplantillaprecioslineas') ?>',
+ 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 '= lang('ClientePrecios.interior') ?>';
- else if(data=='cubierta')
+ else if(data=='cubierta')
return '= lang('ClientePrecios.cubierta') ?>';
- else if(data=='sobrecubierta')
+ else if(data=='sobrecubierta')
return '= lang('ClientePrecios.sobrecubierta') ?>';
- }
- },
- { '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 '= lang('ClientePrecios.toner') ?>';
- else if(data=='inkjet')
+ else if(data=='inkjet')
return '= lang('ClientePrecios.inkjet') ?>';
- }
- },
- { '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 '= lang('ClientePrecios.negro') ?>';
- else if(data=='negrohq')
+ else if(data=='negrohq')
return '= lang('ClientePrecios.negrohq') ?>';
- else if(data=='color')
+ else if(data=='color')
return '= lang('ClientePrecios.color') ?>';
- else if(data=='colorhq')
+ else if(data=='colorhq')
return '= lang('ClientePrecios.colorhq') ?>';
- }
- },
- { '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)
- })
- }
- });
-=$this->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)
+ })
+ }
+ });
+ */
+= $this->endSection() ?>
-=$this->section('css') ?>
-
- ">
-=$this->endSection() ?>
+= $this->section('css') ?>
+
+ ">
+= $this->endSection() ?>
= $this->section('additionalExternalJs') ?>
-
-
-
-
-
-
-
-
-=$this->endSection() ?>
-
+
+
+
+
+
+
+
+
+
+
+
+= $this->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 @@
=lang('ClientePrecios.plantillaPrecios_list') ?>
=anchor(route_to('newClienteplantillaprecios'), lang('Basic.global.addNew').' '.lang('ClientePrecios.plantillaPrecios_name'), ['class'=>'btn btn-primary float-end']); ?>
-
+ = csrf_field() ?>
+
= view('themes/_commonPartialsBs/_alertBoxes'); ?>
+ | ID |
= lang('ClientePrecios.nombre') ?> |
- = lang('Basic.global.Action') ?> |
+ = lang('Basic.global.Action') ?> |
@@ -50,100 +52,6 @@
+
+
=$this->endSection() ?>
-
-=$this->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({
- = csrf_token() ?? "token" ?> : = csrf_token() ?>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: '= route_to('dataTableOfClientesplantillaprecios') ?>',
- 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"
- }
- } );
-=$this->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