From 185088f487528fa67c31117434d123f841ee5691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Wed, 6 Aug 2025 13:28:59 +0200 Subject: [PATCH] =?UTF-8?q?a=C3=B1adidos=20acabados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/presupuesto/Presupuesto.java | 13 ++++ .../presupuesto/PresupuestoController.java | 13 +++- .../erp/presupuesto/PresupuestoService.java | 66 ++++++++++++++++++- .../resources/i18n/presupuesto_es.properties | 14 +++- .../presupuestador/presupuestador.js | 43 ++++++++---- .../presupuestador-items/_cubierta.html | 23 +++++++ 6 files changed, 155 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/Presupuesto.java b/src/main/java/com/imprimelibros/erp/presupuesto/Presupuesto.java index 61b5fc8..7aa11f9 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/Presupuesto.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/Presupuesto.java @@ -131,6 +131,11 @@ public class Presupuesto { @Column(name = "gramaje_cubierta") private Integer gramajeCubierta = 240; + @NotNull(message = "{presupuesto.errores.acabado-cubierta}", groups = PresupuestoValidationGroups.Cubierta.class) + @Column(name = "acabado") + private Integer acabado = 1; + + // Getters y Setters public String getAutor() { @@ -369,4 +374,12 @@ public class Presupuesto { this.gramajeCubierta = gramajeCubierta; } + public Integer getAcabado() { + return acabado; + } + + public void setAcabado(Integer acabado) { + this.acabado = acabado; + } + } diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java index 83cf59d..7051055 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java @@ -49,7 +49,7 @@ public class PresupuestoController { // opciones color Map resultado = presupuestoService.obtenerOpcionesColor(presupuesto, locale); - + // opciones papel interior resultado.putAll(presupuestoService.obtenerOpcionesPapelInterior(presupuesto, locale)); @@ -76,6 +76,7 @@ public class PresupuestoController { } Map resultado = new HashMap<>(); resultado.put("solapas", apiClient.getMaxSolapas(presupuestoService.toSkApiRequest(presupuesto))); + resultado.putAll(presupuestoService.obtenerOpcionesAcabadosCubierta(presupuesto, locale)); return ResponseEntity.ok(resultado); } @@ -201,4 +202,14 @@ public class PresupuestoController { return ResponseEntity.ok(resultado); } + @PostMapping("/public/get-acabados-cubierta") + public ResponseEntity getAcabadosCubierta( + Presupuesto presupuesto, + BindingResult result, Locale locale) { + + Map resultado = presupuestoService.obtenerOpcionesAcabadosCubierta(presupuesto, locale); + + return ResponseEntity.ok(resultado); + } + } diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java index 63368ec..6007948 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java @@ -10,6 +10,7 @@ import java.util.stream.Collectors; import java.util.Locale; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; import org.springframework.stereotype.Service; import com.imprimelibros.erp.configurationERP.VariableService; @@ -23,6 +24,9 @@ public class PresupuestoService { @Autowired protected VariableService variableService; + @Autowired + protected MessageSource messageSource; + private final PresupuestadorItems presupuestadorItems; public PresupuestoService(PresupuestadorItems presupuestadorItems) { @@ -60,16 +64,16 @@ public class PresupuestoService { opciones.add(opcionColor); } ImagenPresupuesto opcionColorHq = this.presupuestadorItems.getImpresionColorPremium(locale); - if(Presupuesto.TipoImpresion.colorhq.equals(presupuesto.getTipoImpresion())) + if (Presupuesto.TipoImpresion.colorhq.equals(presupuesto.getTipoImpresion())) opcionColorHq.setSelected(true); opciones.add(opcionColorHq); } else { ImagenPresupuesto opcionNegro = this.presupuestadorItems.getImpresionNegro(locale); - if(Presupuesto.TipoImpresion.negro.equals(presupuesto.getTipoImpresion())) + if (Presupuesto.TipoImpresion.negro.equals(presupuesto.getTipoImpresion())) opcionNegro.setSelected(true); opciones.add(opcionNegro); ImagenPresupuesto opcionNegroHq = this.presupuestadorItems.getImpresionNegroPremium(locale); - if(Presupuesto.TipoImpresion.negrohq.equals(presupuesto.getTipoImpresion())) + if (Presupuesto.TipoImpresion.negrohq.equals(presupuesto.getTipoImpresion())) opcionNegroHq.setSelected(true); opciones.add(opcionNegroHq); } @@ -342,7 +346,63 @@ public class PresupuestoService { } else { return 0; // Default case, no valid type } + } + public Map obtenerOpcionesAcabadosCubierta(Presupuesto presupuesto, Locale locale) { + Map resultado = new HashMap<>(); + List opciones = new ArrayList<>(); + + opciones.add(new HashMap<>() { + { + put("name", messageSource.getMessage("presupuesto.acabado-ninguno", null, locale)); + put("sk-id", 0); + } + }); + opciones.add(new HashMap<>() { + { + put("name", messageSource.getMessage("presupuesto.acabado-plastificado-brillo-1c", null, locale)); + put("sk-id", 1); + } + }); + opciones.add(new HashMap<>() { + { + put("name", messageSource.getMessage("presupuesto.acabado-plastificado-mate-1c", null, locale)); + put("sk-id", 5); + } + }); + opciones.add(new HashMap<>() { + { + put("name", messageSource.getMessage("presupuesto.acabado-plastificado-mate-1c-antirrayado", null, locale)); + put("sk-id", 8); + } + }); + opciones.add(new HashMap<>() { + { + put("name", messageSource.getMessage("presupuesto.acabado-plastificado-mate-uvi", null, locale)); + put("sk-id", 2); + } + }); + opciones.add(new HashMap<>() { + { + put("name", messageSource.getMessage("presupuesto.acabado-plastificado-mate-uvi3d", null, locale)); + put("sk-id", 3); + } + }); + opciones.add(new HashMap<>() { + { + put("name", messageSource.getMessage("presupuesto.acabado-plastificado-mate-uvi-braile", null, locale)); + put("sk-id", 4); + } + }); + opciones.add(new HashMap<>() { + { + put("name", messageSource.getMessage("presupuesto.acabado-plastificado-sandy-1c", null, locale)); + put("sk-id", 9); + } + }); + + resultado.put("opciones_acabados_cubierta", opciones); + return resultado; } } diff --git a/src/main/resources/i18n/presupuesto_es.properties b/src/main/resources/i18n/presupuesto_es.properties index da4852a..39d1c98 100644 --- a/src/main/resources/i18n/presupuesto_es.properties +++ b/src/main/resources/i18n/presupuesto_es.properties @@ -88,6 +88,17 @@ presupuesto.volver-interior=Volver a diseƱo interior presupuesto.continuar-extras-libro=Continuar a extras del libro presupuesto.offset=Offset presupuesto.estucado=Estucado +presupuesto.acabado=Acabado +presupuesto.acabado-cubierta-descripcion=Seleccione el acabado para la cubierta +presupuesto.acabado-cubierta-aviso=La falta de plastificado en la cubierta puede comprometer su calidad, ya que aumenta el riesgo de agrietamiento en los pliegues o hendidos, afectando su apariencia y resistencia. +presupuesto.acabado-ninguno=Sin acabado +presupuesto.acabado-plastificado-brillo-1c=Plastificado Brillo 1/C +presupuesto.acabado-plastificado-mate-1c=Plastificado Mate 1/C +presupuesto.acabado-plastificado-mate-1c-antirrayado=Plastificado Mate 1/C Antirrayado +presupuesto.acabado-plastificado-mate-uvi=Plastificado Mate 1/C + Reserva UVI +presupuesto.acabado-plastificado-mate-uvi3d=Plastificado Mate 1/C + Reserva UVI 3D +presupuesto.acabado-plastificado-mate-uvi-braile=Plastificado Mate 1/C + Reserva UVI Braille +presupuesto.acabado-plastificado-sandy-1c=Plastificado Sandy 1/C (tacto arena) # Errores presupuesto.errores-title=Corrija los siguientes errores: @@ -109,4 +120,5 @@ presupuesto.errores.gramaje-interior=Seleccione el gramaje del papel para el int presupuesto.errores.tipo-cubierta=Seleccione el tipo de cubierta presupuesto.errores.solapas-cubierta=Seleccione si desea o no solapas en la cubierta presupuesto.errores.papel-cubierta=Seleccione el tipo de papel para la cubierta -presupuesto.errores.gramaje-cubierta=Seleccione el gramaje del papel para la cubierta \ No newline at end of file +presupuesto.errores.gramaje-cubierta=Seleccione el gramaje del papel para la cubierta +presupuesto.errores.acabado-cubierta=Seleccione el acabado de la cubierta \ No newline at end of file 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 e7afd5e..30a2c1b 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 @@ -39,6 +39,7 @@ class PresupuestoCliente { cabezada: 'WHI', papelCubiertaId: 3, gramajeCubierta: 170, + acabado: 1 } } @@ -83,6 +84,7 @@ class PresupuestoCliente { this.guardasCubierta = $('#papel-guardas'); this.guardasImpresas = $('#guardas-impresas'); this.cabezada = $('#cabezada'); + this.divAcabadoCubierta = $('#div-acabado-cubierta'); } init() { @@ -198,7 +200,7 @@ class PresupuestoCliente { #nextDatosGenerales() { let data = this.#getDatosGeneralesData(); - data = { + data = { ...data, ...{ papelInteriorId: this.formData.interior.papelInteriorId, @@ -537,8 +539,22 @@ class PresupuestoCliente { $('.max-solapa-text').text(function (_, textoActual) { return textoActual.replace(/\d+/, maxSolapas); }); + + this.divAcabadoCubierta.empty(); + for (const opcion of data.opciones_acabados_cubierta) { + const item = ` + + + `; + this.divAcabadoCubierta.append(item); + }; + + $(`input[type="radio"][name="acabado-cubierta"][sk-id="${this.formData.cubierta.acabado}"]`).prop('checked', true); + this.#loadCubiertaData(data); - + this.#changeTab('pills-cover'); const dataInterior = this.#getInteriorData(); @@ -593,7 +609,7 @@ class PresupuestoCliente { const opcion = opciones_papel_interior[i]; const item = new imagen_presupuesto(opcion); item.extraClass = 'interior-data papel-interior'; - if( this.formData.interior.papelInteriorId == '' && i === 0 || + if (this.formData.interior.papelInteriorId == '' && i === 0 || this.formData.interior.papelInteriorId == opcion.extra_data["sk-id"]) { item.setSelected(true); } @@ -758,14 +774,14 @@ class PresupuestoCliente { this.#changeTab('pills-inside'); /*const data = this.#getPresupuestoData(); $.ajax({ - url: '/presupuesto/public/validar/cubierta', - type: 'POST', - data: data, + url: '/presupuesto/public/validar/cubierta', + type: 'POST', + data: data, success: (data) => { - this.#changeTab('pills-inside'); + this.#changeTab('pills-inside'); }, error: (xhr, status, error) => { - console.error("Error al validar los datos de cubierta: ", xhr.responseText); + console.error("Error al validar los datos de cubierta: ", xhr.responseText); } });*/ }); @@ -850,6 +866,7 @@ class PresupuestoCliente { const cabezada = this.cabezada.val() || 'WHI'; const papelCubiertaId = $('#div-papel-cubierta .image-container.selected').data('sk-id') || 3; const gramajeCubierta = $('input[name="gramaje-cubierta"]:checked').data('gramaje') || 240; + const acabado = parseInt($('.acabado-cubierta.selected').data('sk-id')) || 1; return { tipoCubierta: tipoCubierta, @@ -861,7 +878,8 @@ class PresupuestoCliente { guardasImpresas: guardasImpresas, cabezada: cabezada, papelCubiertaId: papelCubiertaId, - gramajeCubierta: gramajeCubierta + gramajeCubierta: gramajeCubierta, + acabadado: acabado }; } @@ -877,6 +895,7 @@ class PresupuestoCliente { this.formData.cubierta.cabezada = data.cabezada; this.formData.cubierta.papelCubiertaId = data.papelCubiertaId; this.formData.cubierta.gramajeCubierta = data.gramajeCubierta; + this.formData.cubierta.acabado = data.acabado; } #addGramajesCubierta(gramajes) { @@ -910,8 +929,8 @@ class PresupuestoCliente { else { $('.tapa-dura-options').removeClass('d-none'); $('.tapa-blanda-options').addClass('d-none'); - $('#papel-guardas option[data-papel-id="' + - this.formData.cubierta.guardasPapelId + '"][data-gramaje="' + + $('#papel-guardas option[data-papel-id="' + + this.formData.cubierta.guardasPapelId + '"][data-gramaje="' + this.formData.cubierta.guardasGramaje + '"]').prop('selected', true).trigger('change'); this.guardasImpresas.val(this.formData.cubierta.guardasImpresas); this.cabezada.val(this.formData.cubierta.cabezada); @@ -933,7 +952,7 @@ class PresupuestoCliente { } this.carasImpresionCubierta.val(this.formData.cubierta.cubiertaCaras); - + } /****************************** * END CUBIERTA 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 f31bb5e..e67a341 100644 --- a/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_cubierta.html +++ b/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_cubierta.html @@ -216,6 +216,29 @@ + + +
+
+
Acabado +
+
+ Acabado de la cubierta
+
+ +
+
+

+
+ +
+ +
+ +
+
+ +