From 479cecf52b11653b9a9db649f88b299bb9e2870d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Mon, 22 Sep 2025 09:37:54 +0200 Subject: [PATCH] trabajando en el paso de parametros --- .../presupuesto/PresupuestoController.java | 13 ++++--- .../erp/presupuesto/PresupuestoService.java | 3 +- .../presupuestador/presupuestador.js | 17 +++++---- .../assets/js/pages/imprimelibros/utils.js | 35 +++++++++++++++---- 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java index 4163208..99a6515 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoController.java @@ -375,10 +375,15 @@ public class PresupuestoController { return ResponseEntity.ok(resultado); } - @GetMapping("/public/getresumen") - public ResponseEntity getResumen(Presupuesto presupuesto, @RequestParam HashMap summary, Locale locale) { - return ResponseEntity.ok(presupuestoService.getResumen(presupuesto, summary, locale)); + // Se hace un post para no tener problemas con la longitud de la URL + @PostMapping("/public/getresumen") + public ResponseEntity getResumen(@ModelAttribute("presupuesto") Presupuesto presupuesto, + @RequestParam String summary, Locale locale) throws JsonProcessingException { + + Map summaryMap = new ObjectMapper().readValue(summary, + new TypeReference>() { + }); + return ResponseEntity.ok(presupuestoService.getResumen(presupuesto, summaryMap, locale)); } - } diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java index 18457d4..d9a523d 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java @@ -781,7 +781,7 @@ public class PresupuestoService { return out; } - public Map getResumen(Presupuesto presupuesto, HashMap servicios, Locale locale) { + public Map getResumen(Presupuesto presupuesto, Map summary, Locale locale) { Map resumen = new HashMap<>(); resumen.put("titulo", presupuesto.getTitulo()); @@ -795,6 +795,7 @@ public class PresupuestoService { */ String textoResumen = messageSource.getMessage("presupuesto.resumen-texto", null, locale); + textoResumen = textoResumen.replace("{tipoEncuadernacion}", summary.get("encuadernacion").toString()); resumen.put("resumen", textoResumen); return resumen; } 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 3d196ff..72658b7 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 @@ -2,6 +2,7 @@ import imagen_presupuesto from "./imagen-presupuesto.js"; import ServiceOptionCard from "./service-option-card.js"; import TiradaCard from "./tirada-price-card.js"; import * as Summary from "./summary.js"; +import { bracketPrefix, dotify } from "../utils.js"; class PresupuestoCliente { @@ -1388,14 +1389,18 @@ class PresupuestoCliente { this.#changeTab('pills-seleccion-tirada'); this.summaryTableExtras.addClass('d-none'); } else { - const data = Summary.getSummaryData(); + const summaryData = Summary.getSummaryData(); + const presupuestoData = this.#getPresupuestoData(); + + const payload = { + ...dotify(this.#getPresupuestoData(), 'presupuesto'), + summary: JSON.stringify(Summary.getSummaryData()), + }; + $.ajax({ url: '/presupuesto/public/getresumen', - type: 'GET', - data: { - presupuesto: this.#getPresupuestoData(), - summary: data, - } + type: 'POST', + data: payload, }).then((data) => { console.log("Extras validados correctamente", data); }).catch((error) => { diff --git a/src/main/resources/static/assets/js/pages/imprimelibros/utils.js b/src/main/resources/static/assets/js/pages/imprimelibros/utils.js index 15a4a3a..2723cdc 100644 --- a/src/main/resources/static/assets/js/pages/imprimelibros/utils.js +++ b/src/main/resources/static/assets/js/pages/imprimelibros/utils.js @@ -1,14 +1,13 @@ -function formateaMoneda(valor, digits = 2, locale = 'es-ES', currency = 'EUR') { +export function formateaMoneda(valor, digits = 2, locale = 'es-ES', currency = 'EUR') { try { return new Intl.NumberFormat(locale, { style: 'currency', currency, minimumFractionDigits: digits, useGrouping: true }).format(valor); } catch { return valor; } } -export { formateaMoneda }; -function formateaNumero({ +export function formateaNumero({ valor, digits = 2, style = 'decimal', @@ -31,10 +30,34 @@ function formateaNumero({ return new Intl.NumberFormat(locale, opts).format(n); } -export { formateaNumero }; -function isNumber(value) { +export function isNumber(value) { return !isNaN(Number(value)) && value.trim() !== ''; } -export { isNumber }; \ No newline at end of file + +// Aplana un objeto a "prefijo.clave" (sin arrays) +export function dotify(obj, prefix = '') { + const out = {}; + const walk = (o, path) => { + Object.entries(o).forEach(([k, v]) => { + const key = path ? `${path}.${k}` : k; + if (v !== null && typeof v === 'object' && !Array.isArray(v)) { + walk(v, key); + } else { + out[key] = v; + } + }); + }; + walk(obj, prefix); + return out; +} + +// Convierte {a:1, b:2} en {"summary[a]":1, "summary[b]":2} +export function bracketPrefix(obj, prefix) { + const out = {}; + Object.entries(obj).forEach(([k, v]) => { + out[`${prefix}[${k}]`] = v; + }); + return out; +} \ No newline at end of file