From bdfafea4583e45d365f1989661a7a3d3ade3ea15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Tue, 23 Sep 2025 21:51:51 +0200 Subject: [PATCH] terminado resumen --- .../erp/presupuesto/PresupuestoService.java | 15 +++++ .../resources/i18n/presupuesto_es.properties | 11 +++- .../presupuestador/presupuestador.js | 60 +++++++++++++++++-- .../presupuestador-items/_resumen_final.html | 43 ++++++++++++- 4 files changed, 122 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java index 1046fe0..412c51a 100644 --- a/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java +++ b/src/main/java/com/imprimelibros/erp/presupuesto/PresupuestoService.java @@ -783,6 +783,9 @@ public class PresupuestoService { Presupuesto pressupuestoTemp = presupuesto.clone(); + resumen.put("imagen", "/assets/images/imprimelibros/presupuestador/" + presupuesto.getTipoEncuadernacion() + ".png"); + resumen.put("imagen_alt", messageSource.getMessage("presupuesto." + presupuesto.getTipoEncuadernacion(), null, locale)); + boolean hayDepositoLegal = servicios != null && servicios.stream() .map(m -> java.util.Objects.toString(m.get("id"), "")) // null-safe -> String .map(String::trim) @@ -823,6 +826,18 @@ public class PresupuestoService { counter++; } + List> serviciosExtras = new ArrayList<>(); + + if(servicios != null){ + for (Map servicio : servicios) { + HashMap servicioData = new HashMap<>(); + servicioData.put("descripcion", servicio.get("label")); + servicioData.put("precio", servicio.get("price")); + serviciosExtras.add(servicioData); + } + } + resumen.put("servicios", serviciosExtras); + return resumen; } diff --git a/src/main/resources/i18n/presupuesto_es.properties b/src/main/resources/i18n/presupuesto_es.properties index 6f67f94..72ec2d2 100644 --- a/src/main/resources/i18n/presupuesto_es.properties +++ b/src/main/resources/i18n/presupuesto_es.properties @@ -160,6 +160,13 @@ presupuesto.calcular-presupuesto=Calcular presupuesto presupuesto.consultar-soporte=Consultar con soporte # Pestaña resumen del presupuesto +presupuesto.resumen.tabla.descripcion=Descripción +presupuesto.resumen.tabla.cantidad=Cantidad +presupuesto.resumen.tabla.precio-unidad=Precio/unidad +presupuesto.resumen.tabla.precio-total=Precio total +presupuesto.resumen.tabla.base=Base +presupuesto.resumen.tabla.iva=I.V.A. (4%) +presupuesto.resumen.tabla.total=Total presupuesto presupuesto.resumen-texto=Impresion de {0} unidades encuadernadas en {1} en {2} con {3} páginas en formato {4} x {5} mm. \
    \
  • Papel interior {6} {7} gr.
  • \ @@ -171,8 +178,10 @@ 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-deposito-legal=4 ejemplares para el Depósito Legal +presupuesto.resumen-deposito-legal=Ejemplares para el Depósito Legal presupuesto.volver-extras=Volver a extras +presupuesto.resumen.inicie-sesion=Inicie sesión para continuar +presupuesto.resumen.agregar-cesta=Agregar a la cesta # Resumen del presupuesto presupuesto.resumen-presupuesto=Resumen 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 b765fd9..11809bc 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,7 +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"; +import { formateaMoneda } from "../utils.js"; class PresupuestoCliente { @@ -157,6 +157,9 @@ class PresupuestoCliente { // pestaña extras this.divExtras = $('#div-extras'); + // pestaña resumen + this.tablaResumen = $('#resumen-tabla-final'); + // resumen this.summaryTableInterior = $('#summary-interior'); this.summaryTableCubierta = $('#summary-cubierta'); @@ -1394,16 +1397,17 @@ class PresupuestoCliente { const servicios = []; $('.service-checkbox:checked').each(function () { - const $servicio = $(this); + const $servicio = $(this); servicios.push({ id: $servicio.attr('id') ?? $(`label[for="${$servicio.attr('id')}"] .service-title`).text().trim(), + label: $(`label[for="${$servicio.attr('id')}"] .service-title`).text().trim(), price: $servicio.data('price') ?? $(`label[for="${$servicio.attr('id')}"] .service-price`).text().trim().replace(" " + self.divExtras.data('currency'), ''), }); }); const body = { - presupuesto: this.#getPresupuestoData(), - servicios: servicios + presupuesto: this.#getPresupuestoData(), + servicios: servicios }; $.ajax({ @@ -1413,7 +1417,7 @@ class PresupuestoCliente { data: JSON.stringify(body) }).then((data) => { $('#resumen-titulo').text(data.titulo); - $('#resumen-texto').html(data.texto); + this.#updateResumenTable(data); }).catch((error) => { console.error("Error obtener resumen: ", error); }); @@ -1505,6 +1509,52 @@ class PresupuestoCliente { }); } + #updateResumenTable(data) { + this.tablaResumen.find('tbody').empty(); + + const lineas = Object.keys(data).filter(k => k.startsWith("linea")).sort((a, b) => { + const numA = parseInt(a.replace("linea", ""), 10); + const numB = parseInt(b.replace("linea", ""), 10); + return numA - numB; + }); + const servicios = data.servicios || []; + + let total = 0; + + const locale = document.documentElement.lang || 'es-ES'; + + for (const l of lineas) { + const row = ` + + ${l=="linea0" ? `${data.imagen_alt}` : ''} + ${data[l].descripcion} + ${data[l].cantidad} + ${formateaMoneda(data[l].precio_unitario, 4, locale)} + ${formateaMoneda(data[l].precio_total, 2, locale)} + + `; + total += data[l].precio_total; + this.tablaResumen.find('tbody').append(row); + } + for (const s of servicios) { + const row = ` + + + ${s.descripcion} + 1 + ${formateaMoneda(s.precio, 2, locale)} + ${formateaMoneda(s.precio, 2, locale)} + + `; + total += s.precio; + this.tablaResumen.find('tbody').append(row); + } + + $('#resumen-base').text(formateaMoneda(total, 2, locale)); + $('#resumen-iva').text(formateaMoneda(total * 0.04, 2, locale)); + $('#resumen-total').text(formateaMoneda(total * 1.04, 2, locale)); + } + /****************************** * END RESUMEN ******************************/ diff --git a/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_resumen_final.html b/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_resumen_final.html index 8524b1e..e976517 100644 --- a/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_resumen_final.html +++ b/src/main/resources/templates/imprimelibros/presupuestos/presupuestador-items/_resumen_final.html @@ -16,7 +16,33 @@
    -

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    DescripciónCantidadPrecio unitarioPrecio total
    Total0,00 €
    IVA (4%)0,00 €
    Total con IVA0,00 €
    @@ -25,5 +51,20 @@ Volver a extras + +
    + +
    +
    + +
    \ No newline at end of file