From c42f223b9a259e5432e5d4fe3981816fc6166130 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 16 Apr 2025 16:10:04 +0200 Subject: [PATCH] Configurando la logica del catalogo (JS) --- .../Controllers/Catalogo/CatalogoLibros.php | 8 +- ci4/app/Language/es/Presupuestos.php | 2 + .../Models/Catalogo/CatalogoLibroModel.php | 5 +- .../catalogo/_configuracionLibroFormItems.php | 24 +- .../form/catalogo/viewCatalogoLibrosList.php | 12 + .../js/safekat/pages/catalogo/catalogo.js | 238 +++++++++--------- .../assets/js/safekat/pages/catalogo/list.js | 30 ++- 7 files changed, 172 insertions(+), 147 deletions(-) diff --git a/ci4/app/Controllers/Catalogo/CatalogoLibros.php b/ci4/app/Controllers/Catalogo/CatalogoLibros.php index c97505d4..749aceae 100644 --- a/ci4/app/Controllers/Catalogo/CatalogoLibros.php +++ b/ci4/app/Controllers/Catalogo/CatalogoLibros.php @@ -196,7 +196,11 @@ class CatalogoLibros extends BaseResourceController public function datatable() { - $q = $this->model->getDatatableQuery(); + $reqData = $this->request->getGet(); + $start = $reqData['start'] ?? 0; + $length = $reqData['length'] ?? 5; + + $q = $this->model->getDatatableQuery()->limit($length, $start); $result = DataTable::of($q) ->edit( @@ -309,7 +313,7 @@ class CatalogoLibros extends BaseResourceController $search = $this->request->getGet("q") ?? ""; $data = (new ClienteModel())->getIdName($search); return $this->response->setJSON($data); - + } public function get_files() diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index cd19b536..0d98ced9 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -89,7 +89,9 @@ return [ 'colorPageInstructions' => 'Introduzca la posición de las páginas a color dentro del libro. Ej: 3,5,7 ó 4-10,20,155', 'numeroPaginas' => 'Nº Páginas', 'papel' => 'Papel', + 'papelPod' => 'Papel (POD)', 'gramaje' => 'Gramaje', + 'gramajePod' => 'Gramaje (POD)', 'opcionesPresupuesto' => 'Opciones presupuesto', 'retractilado' => 'Retractilado individual', 'retractilado5' => 'Retractilado de 5', diff --git a/ci4/app/Models/Catalogo/CatalogoLibroModel.php b/ci4/app/Models/Catalogo/CatalogoLibroModel.php index 4218e51a..08c6fa5d 100644 --- a/ci4/app/Models/Catalogo/CatalogoLibroModel.php +++ b/ci4/app/Models/Catalogo/CatalogoLibroModel.php @@ -94,7 +94,7 @@ class CatalogoLibroModel extends Model ->select( "t1.id AS id, t1.titulo AS titulo, - t1.cliente_id AS cliente, + t2.nombre AS cliente, t1.titulo AS titulo, t1.num_edic AS edicion, t1.autor AS autor, @@ -103,7 +103,8 @@ class CatalogoLibroModel extends Model t1.paginas AS paginas, t1.cubierta_archivo AS cubierta_archivo, t1.cubierta_url AS portada" - ); + ) + ->join('clientes t2', 't1.cliente_id = t2.id'); return $builder; } diff --git a/ci4/app/Views/themes/vuexy/form/catalogo/_configuracionLibroFormItems.php b/ci4/app/Views/themes/vuexy/form/catalogo/_configuracionLibroFormItems.php index d99c5581..ac1dabe2 100644 --- a/ci4/app/Views/themes/vuexy/form/catalogo/_configuracionLibroFormItems.php +++ b/ci4/app/Views/themes/vuexy/form/catalogo/_configuracionLibroFormItems.php @@ -1,14 +1,14 @@
-
+

-
@@ -46,18 +46,8 @@
-
@@ -248,12 +238,12 @@ class="form-control select2bs2 comp_cubierta_items" style="width: 100%;"> diff --git a/ci4/app/Views/themes/vuexy/form/catalogo/viewCatalogoLibrosList.php b/ci4/app/Views/themes/vuexy/form/catalogo/viewCatalogoLibrosList.php index 69ff8f62..ca976c9d 100644 --- a/ci4/app/Views/themes/vuexy/form/catalogo/viewCatalogoLibrosList.php +++ b/ci4/app/Views/themes/vuexy/form/catalogo/viewCatalogoLibrosList.php @@ -28,6 +28,18 @@ + + + + + + + + + + + + diff --git a/httpdocs/assets/js/safekat/pages/catalogo/catalogo.js b/httpdocs/assets/js/safekat/pages/catalogo/catalogo.js index 8824247c..84868018 100644 --- a/httpdocs/assets/js/safekat/pages/catalogo/catalogo.js +++ b/httpdocs/assets/js/safekat/pages/catalogo/catalogo.js @@ -5,36 +5,53 @@ class Catalogo { constructor() { + this.tirada_no_pod = 100; + this.tirada_pod = 1; + this.cliente = new ClassSelect($("#clienteId"), '/catalogo/libros/clientlist', "Seleccione un cliente"); - + this.tipo_impresion = $("#tipoImpresion"); + this.encuadernacion = new ClassSelect($("#encuadernacion"), '/importador/getencuadernacion', "Seleccione una encuadernación"); - this.compPapelNegroSelected = new ClassSelect($("#compPapelNegroSelected"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false, + this.compPapelNegro = new ClassSelect($("#compPapelNegro"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false, { tipo_impresion: () => this.encuadernacion.getVal(), - tirada: () => $('#tirada').val(), + tirada: () => this.tirada_no_pod, ancho: () => this.getDimensionLibro().ancho, alto: () => this.getDimensionLibro().alto, sopalas: 0, lomo: 0, tipo: () => $('#isHq').val() ? 'negrohq' : 'negro', }); + + this.compPapelNegroPod = new ClassSelect($("#compPapelNegroPod"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false, + { + tipo_impresion: () => this.encuadernacion.getVal(), + tirada: () => this.tirada_pod, + ancho: () => this.getDimensionLibro().ancho, + alto: () => this.getDimensionLibro().alto, + sopalas: 0, + lomo: 0, + tipo: () => $('#isHq').val() ? 'negrohq' : 'negro', + }); + + this.compGramajeNegro = new ClassSelect($('#compGramajeNegro'), '/presupuestoadmin/papelgramaje', 'Seleccione un gramaje', false, { tipo_impresion: () => this.encuadernacion.getVal(), - papel_generico: () => this.compPapelNegroSelected.getVal(), - tirada: () => $('#tirada').val(), + papel_generico: () => this.compPapelNegro.getVal(), + tirada: () => this.tirada_no_pod, ancho: () => this.getDimensionLibro().ancho, alto: () => this.getDimensionLibro().alto, sopalas: 0, lomo: 0, tipo: () => $('#isHq').val() ? 'negrohq' : 'negro', }); - this.compPapelColorSelected = new ClassSelect($("#compPapelColorSelected"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false, + this.compPapelColor = new ClassSelect($("#compPapelColor"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false, { tipo_impresion: () => this.encuadernacion.getVal(), - tirada: () => $('#tirada').val(), + tirada: () => this.tirada_no_pod, ancho: () => this.getDimensionLibro().ancho, alto: () => this.getDimensionLibro().alto, sopalas: 0, @@ -44,18 +61,18 @@ class Catalogo { this.compGramajeColor = new ClassSelect($('#compGramajeColor'), '/presupuestoadmin/papelgramaje', 'Seleccione un gramaje', false, { tipo_impresion: () => this.encuadernacion.getVal(), - papel_generico: () => this.compPapelColorSelected.getVal(), - tirada: () => $('#tirada').val(), + papel_generico: () => this.compPapelColor.getVal(), + tirada: () => this.tirada_no_pod, ancho: () => this.getDimensionLibro().ancho, alto: () => this.getDimensionLibro().alto, sopalas: 0, lomo: 0, tipo: () => $('#isHq').val() ? 'colorhq' : 'color', }); - this.compPapelCubiertaSelected = new ClassSelect($("#compPapelCubiertaSelected"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false, + this.compPapelCubierta = new ClassSelect($("#compPapelCubierta"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false, { tipo_impresion: this.encuadernacion.getVal(), - tirada: () => $('#tirada').val(), + tirada: () => this.tirada_no_pod, ancho: () => this.getDimensionLibro().ancho, alto: () => this.getDimensionLibro().alto, sopalas: () => $('#compSolapasCubierta').val(), @@ -66,15 +83,15 @@ class Catalogo { this.compGramajeCubierta = new ClassSelect($('#compGramajeCubierta'), '/presupuestoadmin/papelgramaje', 'Seleccione un gramaje', false, { tipo_impresion: () => this.encuadernacion.getVal(), - papel_generico: () => this.compPapelCubiertaSelected.getVal(), - tirada: () => $('#tirada').val(), + papel_generico: () => this.compPapelCubierta.getVal(), + tirada: () => this.tirada_no_pod, ancho: () => this.getDimensionLibro().ancho, alto: () => this.getDimensionLibro().alto, sopalas: () => $('#compSolapasCubierta').val(), lomo: 0, tipo: 'colorhq', }); - this.compSobrecubiertaSelected = new ClassSelect($("#compPapelSobrecubiertaSelected"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false, + this.compSobrecubierta = new ClassSelect($("#compPapelSobrecubierta"), '/presupuestoadmin/papelgenerico', "Seleccione un papel", false, { tipo_impresion: this.encuadernacion.getVal(), tirada: () => $('#tirada').val(), @@ -88,7 +105,7 @@ class Catalogo { this.compGramajeSobrecubierta = new ClassSelect($('#compGramajeSobrecubierta'), '/presupuestoadmin/papelgramaje', 'Seleccione un gramaje', false, { tipo_impresion: () => this.encuadernacion.getVal(), - papel_generico: () => this.compPapelCubiertaSelected.getVal(), + papel_generico: () => this.compPapelCubierta.getVal(), tirada: () => $('#tirada').val(), ancho: () => this.getDimensionLibro().ancho, alto: () => this.getDimensionLibro().alto, @@ -120,6 +137,8 @@ class Catalogo { init() { + const self = this; + // Fuerza el foco en el campo de búsqueda de select2 $(document).on('select2:open', () => { document.querySelector('.select2-search__field').focus(); @@ -129,29 +148,35 @@ class Catalogo { let clienteName = $("#clienteId").text(); this.cliente.init(); this.cliente.setOption(clienteId, clienteName); - + this.encuadernacion.init(); - this.compPapelNegroSelected.init(); + this.compPapelNegro.init(); this.compGramajeNegro.init(); - this.compPapelColorSelected.init(); + this.compPapelColor.init(); this.compGramajeColor.init(); - this.compPapelCubiertaSelected.init(); + this.compPapelCubierta.init(); this.compGramajeCubierta.init(); - this.compSobrecubiertaSelected.init(); + this.compSobrecubierta.init(); this.compGramajeSobrecubierta.init(); this.acabadoCubierta.init(); this.acabadosSobrecubierta.init(); + + this.compPapelNegro.item.on('select2:select', function () { + self.compGramajeNegro.empty(); + }); + this.cliente.item.on('change', () => { }); - - + // Inicializacino de eventos + this.tipo_impresion.on("change", this.updateOpcionesComparador.bind(this)); + this.updateOpcionesComparador(); $(document).on('change', '.warning-change', function () { $(this).addClass('bg-warning'); @@ -159,74 +184,72 @@ class Catalogo { select2Container.addClass('bg-warning'); }); } - - + updateOpcionesComparador() { - collectData() { + $('.comp_negro_items').off('change'); + $('.comp_negrohq_items').off('change'); + $('.comp_color_items').off('change'); + $('.comp_colorhq_items').off('change'); - let data = {}; + const selValue = this.tipo_impresion.val(); + const elements_negro = $('.comp-negro-selected'); + const elements_negrohq = $('.comp-negrohq-selected'); + const elements_color = $('.comp-color-selected'); + const elements_colorhq = $('.comp-colorhq-selected'); + if (selValue.includes("hq")) { + Array.from(elements_negro).forEach(element => { + $(element).addClass('d-none'); + }); + Array.from(elements_color).forEach(element => { + $(element).addClass('d-none'); + }); + if (selValue.includes('color')) { + Array.from(elements_colorhq).forEach(element => { + $(element).removeClass('d-none'); + }); + } + else { + Array.from(elements_colorhq).forEach(element => { + $(element).addClass('d-none'); + }); + } + Array.from(elements_negrohq).forEach(element => { + $(element).removeClass('d-none'); + }); + } + else { + Array.from(elements_negrohq).forEach(element => { + $(element).addClass('d-none'); + }); + Array.from(elements_colorhq).forEach(element => { + $(element).addClass('d-none'); + }); + if (selValue.includes('color')) { + Array.from(elements_color).forEach(element => { + $(element).removeClass('d-none'); + }); + } + else { + Array.from(elements_color).forEach(element => { + $(element).addClass('d-none'); + }); + } + Array.from(elements_negro).forEach(element => { + $(element).removeClass('d-none'); + }); + } - data.id; - data.cliente_id = $("#clienteId").val(); - - data.paginas = $('#paginas').val(); - data.tirada = $('#tirada').val(); - data.papel_formato_id = $('#tamanio').val(); - data.papel_formato_personalizado = $('#papelFormatoPersonalizado').prop('checked') ? 1 : 0; - data.papel_formato_ancho = $('#papelFormatoAncho').val(); - data.papel_formato_alto = $('#papelFormatoAlto').val(); - - data.encuadernacion = this.encuadernacion.getVal(); - data.isHq = $('#isHq').val(); - - data.paginas_bn = $('#compPaginasNegro').val(); - data.papel_bn = this.compPapelNegroSelected.getVal(); - data.gramaje_bn = this.compGramajeNegro.getVal(); - - data.paginas_color = $('#compPaginasColor').val(); - data.papel_color = this.compPapelColorSelected.getVal(); - data.gramaje_color = this.compGramajeColor.getVal(); - - data.paginas_cubierta = $('#compCarasCubierta').val(); - data.papel_cubierta = this.compPapelCubiertaSelected.getVal(); - data.gramaje_cubierta = this.compGramajeCubierta.getVal(); - data.solapas_cubierta = $('#compSolapasCubierta').val(); - data.acabado_cubierta = this.acabadoCubierta.getVal(); - - data.sobrecubierta = $('#compSobrecubierta').val(); - data.papel_sobrecubierta = this.compSobrecubiertaSelected.getVal(); - data.gramaje_sobrecubierta = this.compGramajeSobrecubierta.getVal(); - data.solapas_sobrecubierta = $('#compSolapasSobrecubierta').val(); - data.acabado_sobrecubierta = this.acabadosSobrecubierta.getVal(); - - data.servicios = { - marcapaginas: $('#marcapaginas').prop('checked') ? 1 : 0, - serviciosExtra: [] - }; - - - - return data; } - + getDimensionLibro() { - let ancho = 0; - let alto = 0; - if ($('#papelFormatoPersonalizado').prop('checked')) { - ancho = $('#papelFormatoAncho').val(); - alto = $('#papelFormatoAlto').val(); - } - else { - const text = $('#tamanio').text(); - ancho = text.split('x')[0]; - alto = text.split('x')[1]; - } + let ancho = $('#ancho').val(); + let alto = $('#alto').val();; return { ancho, alto }; } @@ -270,15 +293,15 @@ class Catalogo { $('#compPaginasNegro').val(data.lineas.bn.paginas); $('#compPapelNegroOrigen').val(data.lineas.bn.papel_nombre); this.compGramajeNegro.setOption(parseFloat(data.lineas.bn.gramaje).toFixed(0), parseFloat(data.lineas.bn.gramaje).toFixed(0)); - this.compPapelNegroSelected.item.prop('disabled', false); - this.compPapelNegroSelected.setOption(data.lineas.bn.new_papel_id, data.lineas.bn.new_papel_nombre); + this.compPapelNegro.item.prop('disabled', false); + this.compPapelNegro.setOption(data.lineas.bn.new_papel_id, data.lineas.bn.new_papel_nombre); } else { $('#compPaginasNegro').val(0); $('#compPapelNegroOrigen').val(""); this.compGramajeNegro.empty(); - this.compPapelNegroSelected.empty(); - this.compPapelNegroSelected.item.prop('disabled', true); + this.compPapelNegro.empty(); + this.compPapelNegro.item.prop('disabled', true); this.compGramajeNegro.item.prop('disabled', true); } @@ -286,15 +309,15 @@ class Catalogo { $('#compPaginasColor').val(data.lineas.color.paginas); $('#compPapelColorOrigen').val(data.lineas.color.papel_nombre); this.compGramajeColor.setOption(parseFloat(data.lineas.color.gramaje).toFixed(0), parseFloat(data.lineas.color.gramaje).toFixed(0)); - this.compPapelColorSelected.item.prop('disabled', false); - this.compPapelColorSelected.setOption(data.lineas.color.new_papel_id, data.lineas.color.new_papel_nombre); + this.compPapelColor.item.prop('disabled', false); + this.compPapelColor.setOption(data.lineas.color.new_papel_id, data.lineas.color.new_papel_nombre); } else { $('#compPaginasColor').val(0); $('#compPapelColorOrigen').val(""); this.compGramajeColor.empty(); - this.compPapelColorSelected.empty(); - this.compPapelColorSelected.item.prop('disabled', true); + this.compPapelColor.empty(); + this.compPapelColor.item.prop('disabled', true); } if (data.lineas.cubierta && data.lineas.cubierta.paginas) { @@ -302,16 +325,16 @@ class Catalogo { $('#compPapelCubiertaOrigen').val(data.lineas.cubierta.papel_nombre); this.compGramajeCubierta.setOption(parseFloat(data.lineas.cubierta.gramaje).toFixed(0), parseFloat(data.lineas.cubierta.gramaje).toFixed(0)); $('#compSolapasCubierta').val(parseFloat(data.lineas.cubierta.solapas).toFixed(0)); - this.compPapelCubiertaSelected.item.prop('disabled', false); - this.compPapelCubiertaSelected.setOption(data.lineas.cubierta.new_papel_id, data.lineas.cubierta.new_papel_nombre); + this.compPapelCubierta.item.prop('disabled', false); + this.compPapelCubierta.setOption(data.lineas.cubierta.new_papel_id, data.lineas.cubierta.new_papel_nombre); } else { $('#compPaginasCubierta').val(0); $('#compPapelCubiertaOrigen').val(""); this.compGramajeCubierta.empty(); $('#compSolapasCubierta').val(""); - this.compPapelCubiertaSelected.empty(); - this.compPapelCubiertaSelected.item.prop('disabled', true); + this.compPapelCubierta.empty(); + this.compPapelCubierta.item.prop('disabled', true); } if (data.lineas.sobrecubierta && data.lineas.sobrecubierta.paginas) { @@ -319,16 +342,16 @@ class Catalogo { $('#compPapelSobrecubiertaOrigen').val(data.lineas.sobrecubierta.papel_nombre); this.compGramajeSobrecubierta.setOption(parseFloat(data.lineas.sobrecubierta.gramaje).toFixed(0), parseFloat(data.lineas.sobrecubierta.gramaje).toFixed(0)); $('#compSolapasSobrecubierta').val(parseFloat(data.lineas.sobrecubierta.solapas).toFixed(0)); - this.compSobrecubiertaSelected.item.prop('disabled', false); - this.compSobrecubiertaSelected.setOption(data.lineas.sobrecubierta.new_papel_id, data.lineas.sobrecubierta.new_papel_nombre); + this.compSobrecubierta.item.prop('disabled', false); + this.compSobrecubierta.setOption(data.lineas.sobrecubierta.new_papel_id, data.lineas.sobrecubierta.new_papel_nombre); } else { $('#compSobrecubierta').val(0); $('#compPapelSobrecubiertaOrigen').val(""); this.compGramajeSobrecubierta.empty(); $('#compSolapasSobrecubierta').val(""); - this.compSobrecubiertaSelected.empty(); - this.compSobrecubiertaSelected.item.prop('disabled', true); + this.compSobrecubierta.empty(); + this.compSobrecubierta.item.prop('disabled', true); } if (data.acabados) { @@ -355,30 +378,7 @@ class Catalogo { } } - if (data.servicios.ferro == 1) { - $('#ferro').prop('checked', true); - } - else { - $('#ferro').prop('checked', false); - } - if (data.servicios.ferroDigital == 1) { - $('#ferroDigital').prop('checked', true); - } - else { - $('#ferroDigital').prop('checked', false); - } - if (data.servicios.marcapaginas == 1) { - $('#marcapaginas').prop('checked', true); - } - else { - $('#marcapaginas').prop('checked', false); - } - if (data.servicios.prototipo == 1) { - $('#prototipo').prop('checked', true); - } - else { - $('#prototipo').prop('checked', false); - } + } this.makeImport.prop('disabled', false); } diff --git a/httpdocs/assets/js/safekat/pages/catalogo/list.js b/httpdocs/assets/js/safekat/pages/catalogo/list.js index 8a29be76..1aee8162 100644 --- a/httpdocs/assets/js/safekat/pages/catalogo/list.js +++ b/httpdocs/assets/js/safekat/pages/catalogo/list.js @@ -8,6 +8,7 @@ document.addEventListener('DOMContentLoaded', function () { processing: true, serverSide: true, autoWidth: true, + orderCellsTop: true, responsive: true, scrollX: true, lengthMenu: [5, 10, 25, 50, 75, 100, 250, 500, 1000, 2500], @@ -21,7 +22,6 @@ document.addEventListener('DOMContentLoaded', function () { pageSize: 'A4' } ], - stateSave: true, order: [[1, 'asc']], language: { url: "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json" @@ -42,11 +42,17 @@ document.addEventListener('DOMContentLoaded', function () { { data: 'id' }, { data: 'titulo' }, { data: 'cliente' }, - { data: 'edicion' }, + { + data: 'edicion', + className: "text-center" + }, { data: 'autor' }, { data: 'isbn' }, { data: 'ean' }, - { data: 'paginas' }, + { + data: 'paginas', + className: "text-center" + }, { data: 'actionBtns' } ] }); @@ -67,8 +73,8 @@ document.addEventListener('DOMContentLoaded', function () { showCancelButton: true, confirmButtonText: 'Sí', cancelButtonText: 'No', - reverseButtons: false, - buttonsStyling: true, + reverseButtons: false, + buttonsStyling: true, customClass: { confirmButton: 'btn btn-danger', // rojo para "Sí" cancelButton: 'btn btn-secondary' // gris para "No" @@ -82,7 +88,7 @@ document.addEventListener('DOMContentLoaded', function () { (data, textStatus, jqXHR) => { theTable.clearPipeline(); theTable.row($(row)).invalidate().draw(); - + popSuccessAlert(data.msg ?? jqXHR.statusText); }, (error) => { @@ -92,7 +98,17 @@ document.addEventListener('DOMContentLoaded', function () { ).get(); } }); - + }); + + $(document).on("keyup", ".filtro_catalogo", (event) => { + let columnName = $(event.currentTarget).attr("name"); + let columnIndex = $('#tableOfCatalogoLibros').DataTable().columns().eq(0).filter(function (index) { + return $('#tableOfCatalogoLibros').DataTable().column(index).dataSrc() === columnName; + })[0]; + $('#tableOfCatalogoLibros').DataTable().column(columnIndex).search($(event.currentTarget).val()).draw() + }) + + });