diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java index ae2888b..926ea81 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java @@ -13,6 +13,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PostMapping; import com.fasterxml.jackson.core.JsonProcessingException; @@ -88,6 +89,7 @@ public class PresupuestoController { @PostMapping("/public/validar/cubierta") public ResponseEntity validarCubierta( @Validated(PresupuestoValidationGroups.Cubierta.class) Presupuesto presupuesto, + @RequestParam(name = "calcular", defaultValue = "true") boolean calcular, BindingResult result, Locale locale) { Map errores = new HashMap<>(); @@ -102,20 +104,25 @@ public class PresupuestoController { return ResponseEntity.badRequest().body(errores); } - HashMap price = new HashMap<>(); - String priceStr = apiClient.getPrice(presupuestoService.toSkApiRequest(presupuesto)); + if (calcular) { - try { - price = new ObjectMapper().readValue(priceStr, new TypeReference<>() { - }); - } catch (JsonProcessingException e) { - price = new HashMap<>(); - price.put("error", messageSource.getMessage("presupuesto.error-obtener-precio", null, locale)); + HashMap price = new HashMap<>(); + String priceStr = apiClient.getPrice(presupuestoService.toSkApiRequest(presupuesto)); + + try { + price = new ObjectMapper().readValue(priceStr, new TypeReference<>() { + }); + } catch (JsonProcessingException e) { + price = new HashMap<>(); + price.put("error", messageSource.getMessage("presupuesto.error-obtener-precio", null, locale)); + } + if (!price.containsKey("data")) { + return ResponseEntity.badRequest() + .body(messageSource.getMessage("presupuesto.error-obtener-precio", null, locale)); + } + return ResponseEntity.ok(price.get("data")); } - if (!price.containsKey("data")) { - return ResponseEntity.badRequest().body(messageSource.getMessage("presupuesto.error-obtener-precio", null, locale)); - } - return ResponseEntity.ok(price.get("data")); + return ResponseEntity.ok().build(); } @PostMapping("/public/validar/seleccion-tirada") diff --git a/src/main/resources/i18n/presupuesto_es.properties b/src/main/resources/i18n/presupuesto_es.properties index f30e2b0..9998bda 100644 --- a/src/main/resources/i18n/presupuesto_es.properties +++ b/src/main/resources/i18n/presupuesto_es.properties @@ -158,6 +158,7 @@ presupuesto.cubierta-libro=Cubierta del libro presupuesto.extras-libro=Extras del libro presupuesto.paginas=Páginas presupuesto.solapas=Solapas +presupuesto.papel-gramaje=Papel y gramaje # Errores presupuesto.errores-title=Corrija los siguientes errores: diff --git a/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/presupuestador.js b/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/presupuestador.js index 43c1343..1e7fe05 100644 --- a/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/presupuestador.js +++ b/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/presupuestador.js @@ -126,6 +126,9 @@ class PresupuestoCliente { // resumen this.summaryTableInterior = $('#summary-interior'); + this.summaryTableCubierta = $('#summary-cubierta'); + this.summaryTableSobrecubierta = $('#summary-sobrecubierta'); + this.summaryTableFaja = $('#summary-faja'); } init() { @@ -141,6 +144,10 @@ class PresupuestoCliente { this.#loadCubiertaData(); } + Summary.updateEncuadernacion(); + Summary.updateFormato(); + Summary.updatePaginas(); + this.#initInterior(); this.#initSeleccionTirada(); @@ -404,7 +411,7 @@ class PresupuestoCliente { this.posicionPaginasColor.val(this.formData.datosGenerales.posicionPaginasColor); this.formatoPersonalizado.prop('checked', this.formData.datosGenerales.formatoPersonalizado); - if( this.formData.datosGenerales.formatoPersonalizado ) { + if (this.formData.datosGenerales.formatoPersonalizado) { this.ancho.val(this.formData.datosGenerales.ancho); this.alto.val(this.formData.datosGenerales.alto); } @@ -671,6 +678,15 @@ class PresupuestoCliente { this.fajaSobrecubierta.val(this.formData.cubierta.faja.acabado); this.#loadCubiertaData(); + this.summaryTableCubierta.removeClass('d-none'); + if (this.sobrecubierta.hasClass('active')) { + this.summaryTableSobrecubierta.removeClass('d-none'); + Summary.updateSobreCubierta(); + } + if (this.faja.hasClass('active')) { + this.summaryTableFaja.removeClass('d-none'); + Summary.updateFaja(); + } this.#changeTab('pills-cover'); @@ -844,6 +860,7 @@ class PresupuestoCliente { } this.#getPapelesCubierta(e.currentTarget.id); + Summary.updateTapaCubierta(); }); $(document).on('click', '.solapas-cubierta', (e) => { @@ -858,6 +875,8 @@ class PresupuestoCliente { const dataToStore = this.#getCubiertaData(); this.#updateCubiertaData(dataToStore); this.#cacheFormData(); + + Summary.updateTapaCubierta(); }); $(document).on('click', '.papel-cubierta', (e) => { @@ -881,6 +900,9 @@ class PresupuestoCliente { this.#updateCubiertaData(dataCubierta); this.#cacheFormData(); + Summary.updatePapelCubierta(); + Summary.updateGramajeCubierta(); + }).fail((xhr, status, error) => { console.error("Error al obtener los gramajes de interior: ", xhr.responseText); }); @@ -892,7 +914,7 @@ class PresupuestoCliente { const gramaje = parseInt($('#' + inputId).data('gramaje')); this.formData.cubierta.gramajeCubierta = gramaje; this.#cacheFormData(); - + Summary.updateGramajeCubierta(); }); $(document).on('change', '.datos-cubierta', (e) => { @@ -906,6 +928,7 @@ class PresupuestoCliente { this.formData.cubierta.acabado = parseInt($(e.currentTarget).attr('sk-id')) || 1; this.#cacheFormData(); + Summary.updateAcabadoCubierta(); }); $(document).on('click', '.custom-toggle', (e) => { @@ -914,16 +937,24 @@ class PresupuestoCliente { if ($target.hasClass('active')) { if ($target.attr('id') === 'sobrecubierta') { this.divSobrecubierta.removeClass('d-none'); + this.summaryTableSobrecubierta.removeClass('d-none'); + Summary.updateSobreCubierta(); } else if ($target.attr('id') === 'faja') { this.divFaja.removeClass('d-none'); + this.summaryTableFaja.removeClass('d-none'); + Summary.updateFaja(); } } else { if ($target.attr('id') === 'sobrecubierta') { this.divSobrecubierta.addClass('d-none'); + this.summaryTableSobrecubierta.addClass('d-none'); + Summary.updateSobreCubierta(); } else if ($target.attr('id') === 'faja') { this.divFaja.addClass('d-none'); + this.summaryTableFaja.addClass('d-none'); + Summary.updateFaja(); } } const dataToStore = this.#getCubiertaData(); @@ -931,16 +962,39 @@ class PresupuestoCliente { this.#cacheFormData(); }); + $(document).on('change', '.sobrecubierta-item', () => { + const dataToStore = this.#getCubiertaData(); + this.#updateCubiertaData(dataToStore); + this.#cacheFormData(); + Summary.updateSobreCubierta(); + }); + + $(document).on('change', '.faja-item', () => { + const dataToStore = this.#getCubiertaData(); + this.#updateCubiertaData(dataToStore); + this.#cacheFormData(); + Summary.updateFaja(); + }); + $('.btn-change-tab-cubierta').on('click', (e) => { const data = this.#getPresupuestoData(); const id = e.currentTarget.id; + + if (id === 'btn-prev-cubierta') { + data.calcular = false; + } + else { + data.calcular = true; + } + $.ajax({ url: '/presupuesto/public/validar/cubierta', type: 'POST', data: data, success: (data) => { if (id === 'btn-prev-cubierta') { + this.summaryTableCubierta.addClass('d-none'); this.#changeTab('pills-inside'); } else { @@ -965,6 +1019,12 @@ class PresupuestoCliente { } }); }); + + // Eventos para el resumen + $(document).on('change', '.tapa-cubierta-summary', () => { + Summary.updateTapaCubierta(); + }); + } #getPapelesCubierta(tapa_id) { @@ -1012,6 +1072,8 @@ class PresupuestoCliente { const dataToStore = this.#getCubiertaData(); this.#updateCubiertaData(dataToStore); this.#cacheFormData(); + + Summary.updatePapelCubierta(); }, error: (xhr, status, error) => { console.error("Error al obtener los papeles de cubierta: ", xhr.responseText); @@ -1110,7 +1172,7 @@ class PresupuestoCliente { for (let i = 0; i < gramajes.length; i++) { const gramaje = gramajes[i]; - this.#addGramaje(this.divGramajeCubierta, 'gramaje-cubierta', gramaje, 'gramaje-cubierta datos-cubierta'); + this.#addGramaje(this.divGramajeCubierta, 'gramaje-cubierta datos-cubierta', gramaje, 'gramaje-cubierta'); // Seleccionar el gramaje por defecto if (this.formData.cubierta.gramajeCubierta === '' && i === 0) { @@ -1123,6 +1185,8 @@ class PresupuestoCliente { // If not, select the first one by default this.divGramajeCubierta.find('input[type="radio"]').first().prop('checked', true); } + + Summary.updateGramajeCubierta(); } #loadCubiertaData() { @@ -1189,6 +1253,9 @@ class PresupuestoCliente { this.solapasFaja.val(this.formData.cubierta.faja.tamanioSolapasFaja); this.altoFaja.val(this.formData.cubierta.faja.alto); this.acabadoFaja.val(this.formData.cubierta.faja.acabado); + + Summary.updateTapaCubierta(); + Summary.updateAcabadoCubierta(); } /****************************** * END CUBIERTA diff --git a/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/summary.js b/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/summary.js index b78198a..eb1cb64 100644 --- a/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/summary.js +++ b/src/main/resources/static/assets/js/pages/imprimelibros/presupuestador/summary.js @@ -58,13 +58,84 @@ export function updateGramajeInterior() { export function updateTapaCubierta(){ - const $selected = $('.tipo-cubierta.selected'); + const $selected = $('.tapa-cubierta.selected'); if ($selected.length > 0) { const resumen = $selected.data('summary-text') || $selected.attr('id'); $('#summary-tapa-cubierta').text(resumen); } if($selected.attr('id') === 'tapaBlanda') { - $('#summary-cubierta').removeClass('d-none'); - $('#summary-cubierta .table-responsive').removeClass('d-none'); + + $('.tapa-blanda-row').removeClass('d-none'); + $('.tapa-dura-row').addClass('d-none'); + $('#summary-cubierta-solapas').text($('#sin-solapas').hasClass('selected') ? $('#sin-solapas').data('summary-text') : $('#con-solapas').data('summary-text')); + if($('#con-solapas').hasClass('selected')) { + $('#summary-tamanio-solapa-row').removeClass('d-none'); + $('#summary-tamanio-solapa').text($('#tamanio-solapas-cubierta').val() + ' mm'); + } else { + $('#summary-tamanio-solapa-row').addClass('d-none'); + $('#summary-tamanio-solapa').text(''); + } + $('#summary-impresion-cubierta-row').removeClass('d-none'); + $('#summary-impresion-cubierta').text($('#impresion-cubierta option:selected').text()); + } + else{ + $('.tapa-blanda-row').addClass('d-none'); + $('.tapa-dura-row').removeClass('d-none'); + $('#summary-papel-guardas').text($('#papel-guardas option:selected').text()); + $('#summary-guardas-impresas').text($('#guardas-impresas option:selected').text()); + $('#summary-cabezada').text($('#cabezada option:selected').text()); + } +} + +export function updatePapelCubierta() { + const $selected = $('.papel-cubierta.selected'); + if ($selected.length > 0) { + const resumen = $selected.data('summary-text') || $selected.val(); + $('#summary-papel-cubierta').text(resumen); + } +} + +export function updateGramajeCubierta() { + const gramaje = $('input[name="gramaje-cubierta"]:checked'); + if(gramaje.length > 0) { + $('#summary-gramaje-cubierta').text(gramaje.data('gramaje')); + } +} + +export function updateAcabadoCubierta() { + const acabado = $('input[name="acabado-cubierta"]:checked'); + if(acabado.length > 0) { + let labelText = ''; + const id = acabado.attr('id'); + + if (id) { + labelText = $(`label[for="${id}"]`).text().trim(); + } + + // Caso 2: input dentro de label + if (!labelText) { + labelText = acabado.closest('label').text().trim(); + } + + $('#summary-acabado-cubierta').text(labelText); + } +} + +export function updateSobreCubierta() { + + if($('#sobrecubierta').hasClass('active')) { + $('#summary-sobrecubierta-papel-gramaje').text($('#papel-sobrecubierta option:selected').text()); + $('#summary-sobrecubierta-tamanio-solapa').text($('#tamanio-solapas-sobrecubierta').val() + ' mm'); + $('#summary-sobrecubierta-acabado').text($('#sobrecubierta-acabado option:selected').text()); + } +} + +export function updateFaja() { + + if($('#faja').hasClass('active')) { + $('#summary-faja-papel-gramaje').text($('#papel-faja option:selected').text()); + $('#summary-faja-alto-faja').text($('#alto-faja').val() + ' mm'); + $('#summary-faja-tamanio-solapa').text($('#tamanio-solapas-faja').val() + ' mm'); + $('#summary-faja-acabado').text($('#faja-acabado option:selected').text()); } } \ No newline at end of file diff --git a/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_cubierta.html b/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_cubierta.html index 7110feb..7e14cfe 100644 --- a/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_cubierta.html +++ b/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_cubierta.html @@ -21,7 +21,7 @@
-
+
-
+
-
+