From c1df92b8402a768fd42b29be48d28150bc79949c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Tue, 23 Sep 2025 15:09:08 +0200 Subject: [PATCH] trabajando en modificar para obtener los servicios --- .../presupuesto/PresupuestoController.java | 16 ++------- .../erp/presupuesto/PresupuestoService.java | 34 ++++++++++++++----- .../resources/i18n/presupuesto_es.properties | 2 +- .../presupuestador/presupuestador.js | 11 +++++- 4 files changed, 39 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java index ffa2100..f568b86 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java @@ -21,9 +21,6 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.http.MediaType; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.core.type.TypeReference; import com.imprimelibros.erp.externalApi.skApiClient; import com.imprimelibros.erp.presupuesto.classes.ImagenPresupuesto; import com.imprimelibros.erp.presupuesto.classes.PresupuestoMaquetacion; @@ -116,21 +113,14 @@ public class PresupuestoController { if (calcular) { - HashMap price = new HashMap<>(); - String priceStr = apiClient.getPrice(presupuestoService.toSkApiRequest(presupuesto)); + HashMap price = presupuestoService.calcularPresupuesto(presupuesto, locale); - 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")); + } return ResponseEntity.ok().build(); } @@ -154,7 +144,7 @@ public class PresupuestoController { Map resultado = new HashMap<>(); // servicios extra - resultado.putAll(presupuestoService.obtenerServiciosExtras(presupuesto, locale, apiClient)); + resultado.putAll(presupuestoService.obtenerServiciosExtras(presupuesto, locale)); Map language = new HashMap<>(); language.put("calcular", messageSource.getMessage("presupuesto.calcular", null, locale)); resultado.put("language", language); diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java index 10ba7b4..985343b 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java @@ -44,9 +44,6 @@ public class PresupuestoService { @Autowired protected MessageSource messageSource; - @Autowired - protected skApiClient skApiClient; - @Autowired protected MaquetacionPreciosRepository maquetacionPreciosRepository; @@ -58,10 +55,12 @@ public class PresupuestoService { private final PresupuestadorItems presupuestadorItems; private final PresupuestoFormatter presupuestoFormatter; + private final skApiClient apiClient; - public PresupuestoService(PresupuestadorItems presupuestadorItems, PresupuestoFormatter presupuestoFormatter) { + public PresupuestoService(PresupuestadorItems presupuestadorItems, PresupuestoFormatter presupuestoFormatter, skApiClient apiClient) { this.presupuestadorItems = presupuestadorItems; this.presupuestoFormatter = presupuestoFormatter; + this.apiClient = apiClient; } public boolean validateDatosGenerales(int[] tiradas) { @@ -453,18 +452,18 @@ public class PresupuestoService { Map requestBody = new HashMap<>(); requestBody.put("tirada", presupuesto.getSelectedTirada() != null ? presupuesto.getSelectedTirada() : tirada_min); - Double precio_retractilado = skApiClient.getRetractilado(requestBody); + Double precio_retractilado = apiClient.getRetractilado(requestBody); return precio_retractilado != null ? NumberFormat.getNumberInstance(locale) .format(Math.round(precio_retractilado * 100.0) / 100.0) : "0,00"; } - public Map obtenerServiciosExtras(Presupuesto presupuesto, Locale locale, skApiClient apiClient) { + public Map obtenerServiciosExtras(Presupuesto presupuesto, Locale locale) { List opciones = new ArrayList<>(); - Double price_prototipo = this.obtenerPrototipo(presupuesto, apiClient); + Double price_prototipo = this.obtenerPrototipo(presupuesto); opciones.add(new HashMap() { { @@ -561,7 +560,7 @@ public class PresupuestoService { return response; } - private Double obtenerPrototipo(Presupuesto presupuesto, skApiClient apiClient) { + private Double obtenerPrototipo(Presupuesto presupuesto) { // Obtenemos el precio de 1 unidad para el ejemplar de prueba HashMap price = new HashMap<>(); @@ -775,13 +774,30 @@ public class PresupuestoService { return out; } - public Map getResumen(Presupuesto presupuesto, String[] servicios, Locale locale) { Map resumen = new HashMap<>(); + + resumen.put("titulo", presupuesto.getTitulo()); resumen.put("texto", presupuestoFormatter.resumen(presupuesto, servicios, locale)); return resumen; } + + public HashMap calcularPresupuesto(Presupuesto presupuesto, Locale locale) { + + HashMap price = new HashMap<>(); + String priceStr = apiClient.getPrice(this.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)); + } + + return price; + } } diff --git a/src/main/resources/i18n/presupuesto_es.properties b/src/main/resources/i18n/presupuesto_es.properties index 7b1bb30..d3b5ce4 100644 --- a/src/main/resources/i18n/presupuesto_es.properties +++ b/src/main/resources/i18n/presupuesto_es.properties @@ -170,7 +170,7 @@ presupuesto.resumen-texto-guardas-cabezada=
  • Guardas {0} en {1} {2}. Color de presupuesto.resumen-texto-acabado-cubierta=
  • Acabado {0}.
  • presupuesto.resumen-texto-end= presupuesto.resumen-texto-sobrecubierta=
  • Sobrecubierta impresa en {0} {1} gr.
    • Acabado {2}
    • Solapas: {3} mm.
  • -presupuesto.resumen-texto-faja=
  • Faja impresa en {0} {1} gr. con un alto de {2} mm.
    • Acabado {3}
    • Solapas:{4} mm.
  • +presupuesto.resumen-texto-faja=
  • Faja impresa en {0} {1} gr. con un alto de {2} mm.
    • Acabado {3}
    • Solapas: {4} mm.
  • presupuesto.volver-extras=Volver a extras # Resumen del presupuesto 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 d32e732..0acae88 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 @@ -1390,9 +1390,18 @@ class PresupuestoCliente { this.summaryTableExtras.addClass('d-none'); } else { + const servicios = []; + $('.service-checkbox:checked').each(function () { + const $servicio = $(this); + servicios.push({ + id: $(`label[for="${$servicio.attr('id')}"] .service-title`).text().trim() || $servicio.attr('id'), + price: $(`label[for="${$servicio.attr('id')}"] .service-price`).text().trim() || $servicio.attr('price') + }); + }); + const body = { presupuesto: this.#getPresupuestoData(), // objeto JS con campos que coincidan con la entidad - servicios: this.formData.servicios.servicios // array de strings + servicios: servicios }; $.ajax({