corregidas unidades por marcapaginas en resumen. tambien corregido el manejo de los datos de session en marcapaginas form y maquetacion form

This commit is contained in:
Jaime Jiménez
2025-09-24 12:32:18 +02:00
parent 096e5387c4
commit e2194a5e3e
4 changed files with 145 additions and 84 deletions

View File

@ -831,8 +831,12 @@ public class PresupuestoService {
if(servicios != null){ if(servicios != null){
for (Map<String, Object> servicio : servicios) { for (Map<String, Object> servicio : servicios) {
HashMap<String, Object> servicioData = new HashMap<>(); HashMap<String, Object> servicioData = new HashMap<>();
servicioData.put("id", servicio.get("id"));
servicioData.put("descripcion", servicio.get("label")); servicioData.put("descripcion", servicio.get("label"));
servicioData.put("precio", servicio.get("price")); servicioData.put("precio", servicio.get("id").equals("marcapaginas") ?
Double.parseDouble(servicio.get("price").toString())/Double.parseDouble(servicio.get("units").toString()) :
servicio.get("price"));
servicioData.put("unidades", servicio.get("units"));
serviciosExtras.add(servicioData); serviciosExtras.add(servicioData);
} }
} }

View File

@ -1401,6 +1401,7 @@ class PresupuestoCliente {
servicios.push({ servicios.push({
id: $servicio.attr('id') ?? $(`label[for="${$servicio.attr('id')}"] .service-title`).text().trim(), id: $servicio.attr('id') ?? $(`label[for="${$servicio.attr('id')}"] .service-title`).text().trim(),
label: $(`label[for="${$servicio.attr('id')}"] .service-title`).text().trim(), label: $(`label[for="${$servicio.attr('id')}"] .service-title`).text().trim(),
units: $servicio.attr('id') === 'marcapaginas' ? self.formData.servicios.datosMarcapaginas.marcapaginas_tirada : 1,
price: $servicio.data('price') ?? $(`label[for="${$servicio.attr('id')}"] .service-price`).text().trim().replace(" " + self.divExtras.data('currency'), ''), price: $servicio.data('price') ?? $(`label[for="${$servicio.attr('id')}"] .service-price`).text().trim().replace(" " + self.divExtras.data('currency'), ''),
}); });
}); });
@ -1442,6 +1443,9 @@ class PresupuestoCliente {
Summary.updateExtras(); Summary.updateExtras();
this.#cacheFormData(); this.#cacheFormData();
}); });
this.#bindMaquetacionEvents();
this.#bindMarcapaginasEvents();
} }
#loadExtrasData(servicios) { #loadExtrasData(servicios) {
@ -1473,6 +1477,67 @@ class PresupuestoCliente {
this.#cacheFormData(); this.#cacheFormData();
Summary.updateExtras(); Summary.updateExtras();
} }
#bindMaquetacionEvents() {
$(document).on('maquetacion:request', (e) => {
const data = this.formData.servicios.datosMaquetacion;
$(document).trigger('maquetacion:response', [data]);
});
$(document).on('maquetacion:update', (e, payload) => {
// payload: campos planos (num_caracteres, formato_maquetacion, ...)
this.formData.servicios.datosMaquetacion = {
...this.formData.servicios.datosMaquetacion,
...payload,
};
this.#cacheFormData();
});
$(document).on('maquetacion:result', (e, result) => {
this.formData.servicios.datosMaquetacion.resultado = {
...this.formData.servicios.datosMaquetacion.resultado,
...result,
};
const list = this.formData.servicios.servicios;
if (!list.includes('maquetacion')) list.push('maquetacion');
this.#cacheFormData();
});
}
#bindMarcapaginasEvents() {
$(document).on('marcapaginas:request', (e) => {
const data = this.formData.servicios.datosMarcapaginas;
$(document).trigger('marcapaginas:response', [data]);
});
$(document).on('marcapaginas:update', (e, payload) => {
// payload: { marcapaginas_tirada, tamanio_marcapaginas, ... }
this.formData.servicios.datosMarcapaginas = {
...this.formData.servicios.datosMarcapaginas,
...payload,
};
this.#cacheFormData();
});
$(document).on('marcapaginas:result', (e, result) => {
// result: { precio_unitario, precio }
this.formData.servicios.datosMarcapaginas.resultado = {
...this.formData.servicios.datosMarcapaginas.resultado,
...result,
};
// asegúrate de añadir el servicio seleccionado
const list = this.formData.servicios.servicios;
if (!list.includes('marcapaginas')) list.push('marcapaginas');
this.#cacheFormData();
});
}
/****************************** /******************************
* END EXTRAS * END EXTRAS
******************************/ ******************************/
@ -1541,9 +1606,9 @@ class PresupuestoCliente {
<tr> <tr>
<td></td> <td></td>
<td>${s.descripcion}</td> <td>${s.descripcion}</td>
<td class="text-center">1</td> <td class="text-center">${s.unidades}</td>
<td class="text-center">${formateaMoneda(s.precio, 2, locale)}</td> <td class="text-center">${s.id === "marcapaginas" ? formateaMoneda(s.precio, 4, locale) : formateaMoneda(s.precio, 2, locale)}</td>
<td class="text-end">${formateaMoneda(s.precio, 2, locale)}</td> <td class="text-end">${s.id === "marcapaginas" ? formateaMoneda(s.precio * s.unidades, 2, locale) : formateaMoneda(s.precio, 2, locale)}</td>
</tr> </tr>
`; `;
total += s.precio; total += s.precio;

View File

@ -66,25 +66,22 @@ $(document).on("submit", "#maquetacionForm", function (e) {
if (result.isConfirmed) { if (result.isConfirmed) {
$('#maquetacion').prop('checked', true); $('#maquetacion').prop('checked', true);
$('#maquetacion').data('price', json.precio); $('#maquetacion').data('price', json.precio);
$('label[for="maquetacion"] .service-price') $('label[for="maquetacion"] .service-price').text(formateaMoneda(json.precio));
.text(formateaMoneda(json.precio));
Summary.updateExtras(); Summary.updateExtras();
// guardamos los datos del formulario en sessionStorage // 🔔 Notifica el resultado a PresupuestoCliente
const stored = JSON.parse(sessionStorage.getItem("formData")); $(document).trigger('maquetacion:result', [{
stored.servicios.datosMaquetacion.resultado.num_paginas_estimadas = json.numPaginasEstimadas; num_paginas_estimadas: json.numPaginasEstimadas,
stored.servicios.datosMaquetacion.resultado.precio_pagina_estimado = json.precioPaginaEstimado; precio_pagina_estimado: json.precioPaginaEstimado,
stored.servicios.datosMaquetacion.resultado.precio = json.precio; precio: json.precio
if(stored.servicios.servicios.includes("maquetacion") === false) { }]);
stored.servicios.servicios.push("maquetacion"); } else {
} // reset UI si cancelan
sessionStorage.setItem("formData", JSON.stringify(stored));
}
else {
const calcularStr = $('#div-extras').data('language-calcular'); const calcularStr = $('#div-extras').data('language-calcular');
$('#maquetacion').prop('checked', false); $('#maquetacion').prop('checked', false);
$('#maquetacion').data('price', calcularStr); $('#maquetacion').data('price', calcularStr);
$('label[for="maquetacion"] .service-price').text(calcularStr); $('label[for="maquetacion"] .service-price').text(calcularStr);
Summary.updateExtras();
} }
}); });
}, },
@ -126,13 +123,28 @@ $(document).on('hidden.bs.modal', '#maquetacionModal', function () {
$(document).on('change', '.maquetacion-item', () => { $(document).on('change', '.maquetacion-item', () => {
saveMaquetacionData(); $(document).on('change', '.maquetacion-item', () => {
const payload = {
num_caracteres: parseInt($('#num-caracteres').val()) || 0,
formato_maquetacion: $('#formato-maquetacion').val() || 'A5',
cuerpo_texto: $('#cuerpo-texto').val() || 'medium',
num_columnas: parseInt($('#num-columnas').val()) || 1,
num_tablas: parseInt($('#num-tablas').val()) || 0,
num_fotos: parseInt($('#num-fotos').val()) || 0,
correccion_ortotipografica: $('#correccion-ortotipografica').is(':checked'),
texto_mecanografiado: $('#texto-mecanografiado').is(':checked'),
disenio_portada: $('#disenio-portada').is(':checked'),
epub: $('#epub').is(':checked'),
};
$(document).trigger('maquetacion:update', [payload]);
});
}); });
function loadMaquetacionData() { function loadMaquetacionData() {
const stored = JSON.parse(sessionStorage.getItem("formData")).servicios.datosMaquetacion; $(document).one('maquetacion:response', (e, stored) => {
$('#num-caracteres').val(stored.num_caracteres); $('#num-caracteres').val(stored.num_caracteres);
$('#formato-maquetacion').val(stored.formato_maquetacion); $('#formato-maquetacion').val(stored.formato_maquetacion);
$('#cuerpo-texto').val(stored.cuerpo_texto); $('#cuerpo-texto').val(stored.cuerpo_texto);
@ -145,23 +157,8 @@ function loadMaquetacionData() {
$('#epub').prop('checked', stored.epub); $('#epub').prop('checked', stored.epub);
Summary.updateExtras(); Summary.updateExtras();
} });
$(document).trigger('maquetacion:request');
function saveMaquetacionData() {
const stored = JSON.parse(sessionStorage.getItem("formData"));
stored.servicios.datosMaquetacion.num_caracteres = parseInt($('#num-caracteres').val()) || 0;
stored.servicios.datosMaquetacion.formato_maquetacion = $('#formato-maquetacion').val() || 'A5';
stored.servicios.datosMaquetacion.cuerpo_texto = $('#cuerpo-texto').val() || 'medium';
stored.servicios.datosMaquetacion.num_columnas = parseInt($('#num-columnas').val()) || 1;
stored.servicios.datosMaquetacion.num_tablas = parseInt($('#num-tablas').val()) || 0;
stored.servicios.datosMaquetacion.num_fotos = parseInt($('#num-fotos').val()) || 0;
stored.servicios.datosMaquetacion.correccion_ortotipografica = $('#correccion-ortotipografica').is(':checked');
stored.servicios
.datosMaquetacion.texto_mecanografiado = $('#texto-mecanografiado').is(':checked');
stored.servicios.datosMaquetacion.disenio_portada = $('#disenio-portada').is(':checked');
stored.servicios.datosMaquetacion.epub = $('#epub').is(':checked');
sessionStorage.setItem("formData", JSON.stringify(stored));
} }

View File

@ -65,24 +65,20 @@ $(document).on("submit", "#marcapaginasForm", function (e) {
if (result.isConfirmed) { if (result.isConfirmed) {
$('#marcapaginas').prop('checked', true); $('#marcapaginas').prop('checked', true);
$('#marcapaginas').data('price', json.precio_total); $('#marcapaginas').data('price', json.precio_total);
$('label[for="marcapaginas"] .service-price') $('label[for="marcapaginas"] .service-price').text(formateaMoneda(json.precio_total));
.text(formateaMoneda(json.precio_total));
Summary.updateExtras(); Summary.updateExtras();
// guardamos los datos del formulario en sessionStorage // 🔔 Notifica el resultado a PresupuestoCliente
const stored = JSON.parse(sessionStorage.getItem("formData")); $(document).trigger('marcapaginas:result', [{
stored.servicios.datosMarcapaginas.resultado.precio_unitario = json.precio_unitario; precio_unitario: json.precio_unitario,
stored.servicios.datosMarcapaginas.resultado.precio = json.precio_total; precio: json.precio_total
if(stored.servicios.servicios.includes("marcapaginas") === false) { }]);
stored.servicios.servicios.push("marcapaginas"); } else {
}
sessionStorage.setItem("formData", JSON.stringify(stored));
}
else {
const calcularStr = $('#div-extras').data('language-calcular'); const calcularStr = $('#div-extras').data('language-calcular');
$('#marcapaginas').prop('checked', false); $('#marcapaginas').prop('checked', false);
$('#marcapaginas').data('price', calcularStr); $('#marcapaginas').data('price', calcularStr);
$('label[for="marcapaginas"] .service-price').text(calcularStr); $('label[for="marcapaginas"] .service-price').text(calcularStr);
Summary.updateExtras();
} }
}); });
}, },
@ -118,11 +114,11 @@ $(document).on("change", "#caras-impresion", function (e) {
$(document).on('hidden.bs.modal', '#marcapaginasModal', function () { $(document).on('hidden.bs.modal', '#marcapaginasModal', function () {
const calcularStr = $('#div-extras').data('language-calcular'); const calcularStr = $('#div-extras').data('language-calcular');
$('#marcapaginas').data('price', calcularStr); $('#marcapaginas').data('price', calcularStr);
$('label[for="marcapaginas"] .service-price').text(calcularStr); $('label[for="marcapaginas"] .service-price').text(calcularStr);
$('#marcapaginas').prop('checked', false).trigger('change'); $('#marcapaginas').prop('checked', false);
Summary.updateExtras(); Summary.updateExtras();
}); });
@ -154,32 +150,31 @@ function filtrarAcabados() {
$(document).on('change', '.marcapaginas-item', () => { $(document).on('change', '.marcapaginas-item', () => {
saveMarcapaginasData(); const payload = {
marcapaginas_tirada: parseInt($('#marcapaginas-tirada').val()) || 100,
tamanio_marcapaginas: $('#tamanio-marcapaginas').val() || '_50x140_',
caras_impresion: $('#caras-impresion').val() || 'una_cara',
papel_marcapaginas: $('#papel-marcapaginas').val() || 'cartulina_grafica',
gramaje_marcapaginas: parseInt($('#gramaje-marcapaginas').val()) || 300,
acabado_marcapaginas: $('#acabado-marcapaginas').val() || 'ninguno',
};
$(document).trigger('marcapaginas:update', [payload]);
}); });
function loadMarcapaginasData() { function loadMarcapaginasData() {
const stored = JSON.parse(sessionStorage.getItem("formData")).servicios.datosMarcapaginas; $(document).one('marcapaginas:response', (e, stored) => {
$('#marcapaginas-tirada').val(stored.marcapaginas_tirada); $('#marcapaginas-tirada').val(stored.marcapaginas_tirada);
$('#tamanio-marcapaginas').val(stored.tamanio_marcapaginas); $('#tamanio-marcapaginas').val(stored.tamanio_marcapaginas);
$('#caras-impresion').val(stored.caras_impresion); $('#caras-impresion').val(stored.caras_impresion);
$('#papel-marcapaginas').val(stored.papel_marcapaginas); $('#papel-marcapaginas').val(stored.papel_marcapaginas);
$('#gramaje-marcapaginas').val(stored.gramaje_marcapaginas); $('#gramaje-marcapaginas').val(stored.gramaje_marcapaginas);
$('#acabado-marcapaginas').val(stored.acabado_marcapaginas); $('#acabado-marcapaginas').val(stored.acabado_marcapaginas);
} });
$(document).trigger('marcapaginas:request');
function saveMarcapaginasData() {
const stored = JSON.parse(sessionStorage.getItem("formData"));
stored.servicios.datosMarcapaginas.marcapaginas_tirada = parseInt($('#marcapaginas-tirada').val()) || 100;
stored.servicios.datosMarcapaginas.tamanio_marcapaginas = $('#tamanio-marcapaginas').val() || '_50x140_';
stored.servicios.datosMarcapaginas.caras_impresion = $('#caras-impresion').val() || 'una_cara';
stored.servicios.datosMarcapaginas.papel_marcapaginas = $('#papel-marcapaginas').val() || 'cartulina_grafica';
stored.servicios.datosMarcapaginas.gramaje_marcapaginas = parseInt($('#gramaje-marcapaginas').val()) || 300;
stored.servicios.datosMarcapaginas.acabado_marcapaginas = $('#acabado-marcapaginas').val() || 'ninguno';
sessionStorage.setItem("formData", JSON.stringify(stored));
} }