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){
for (Map<String, Object> servicio : servicios) {
HashMap<String, Object> servicioData = new HashMap<>();
servicioData.put("id", servicio.get("id"));
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);
}
}

View File

@ -1401,6 +1401,7 @@ class PresupuestoCliente {
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(),
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'), ''),
});
});
@ -1442,6 +1443,9 @@ class PresupuestoCliente {
Summary.updateExtras();
this.#cacheFormData();
});
this.#bindMaquetacionEvents();
this.#bindMarcapaginasEvents();
}
#loadExtrasData(servicios) {
@ -1473,6 +1477,67 @@ class PresupuestoCliente {
this.#cacheFormData();
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
******************************/
@ -1526,7 +1591,7 @@ class PresupuestoCliente {
for (const l of lineas) {
const row = `
<tr>
<td>${l=="linea0" ? `<img style="max-width: 60px; height: auto;" src="${data.imagen}" alt="${data.imagen_alt}" class="img-fluid" />` : ''}</td>
<td>${l == "linea0" ? `<img style="max-width: 60px; height: auto;" src="${data.imagen}" alt="${data.imagen_alt}" class="img-fluid" />` : ''}</td>
<td>${data[l].descripcion}</td>
<td class="text-center">${data[l].cantidad}</td>
<td class="text-center">${formateaMoneda(data[l].precio_unitario, 4, locale)}</td>
@ -1541,9 +1606,9 @@ class PresupuestoCliente {
<tr>
<td></td>
<td>${s.descripcion}</td>
<td class="text-center">1</td>
<td class="text-center">${formateaMoneda(s.precio, 2, locale)}</td>
<td class="text-end">${formateaMoneda(s.precio, 2, locale)}</td>
<td class="text-center">${s.unidades}</td>
<td class="text-center">${s.id === "marcapaginas" ? formateaMoneda(s.precio, 4, locale) : 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>
`;
total += s.precio;

View File

@ -44,7 +44,7 @@ $(document).on("submit", "#maquetacionForm", function (e) {
<p>${json.language.precio_por_pagina_estimado || 'Precio por página estimado'}: ${formateaMoneda(json.precioPaginaEstimado) || "-"}</p>
<hr class="my-2">
${json.precio ?
`<h3 class="mb-0"><strong>Precio:</strong> ${formateaMoneda(json.precio)}</h3>` : ""}
`<h3 class="mb-0"><strong>Precio:</strong> ${formateaMoneda(json.precio)}</h3>` : ""}
</div>
`;
@ -66,25 +66,22 @@ $(document).on("submit", "#maquetacionForm", function (e) {
if (result.isConfirmed) {
$('#maquetacion').prop('checked', true);
$('#maquetacion').data('price', json.precio);
$('label[for="maquetacion"] .service-price')
.text(formateaMoneda(json.precio));
$('label[for="maquetacion"] .service-price').text(formateaMoneda(json.precio));
Summary.updateExtras();
// guardamos los datos del formulario en sessionStorage
const stored = JSON.parse(sessionStorage.getItem("formData"));
stored.servicios.datosMaquetacion.resultado.num_paginas_estimadas = json.numPaginasEstimadas;
stored.servicios.datosMaquetacion.resultado.precio_pagina_estimado = json.precioPaginaEstimado;
stored.servicios.datosMaquetacion.resultado.precio = json.precio;
if(stored.servicios.servicios.includes("maquetacion") === false) {
stored.servicios.servicios.push("maquetacion");
}
sessionStorage.setItem("formData", JSON.stringify(stored));
}
else {
// 🔔 Notifica el resultado a PresupuestoCliente
$(document).trigger('maquetacion:result', [{
num_paginas_estimadas: json.numPaginasEstimadas,
precio_pagina_estimado: json.precioPaginaEstimado,
precio: json.precio
}]);
} else {
// reset UI si cancelan
const calcularStr = $('#div-extras').data('language-calcular');
$('#maquetacion').prop('checked', false);
$('#maquetacion').data('price', calcularStr);
$('label[for="maquetacion"] .service-price').text(calcularStr);
Summary.updateExtras();
}
});
},
@ -126,42 +123,42 @@ $(document).on('hidden.bs.modal', '#maquetacionModal', function () {
$(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() {
const stored = JSON.parse(sessionStorage.getItem("formData")).servicios.datosMaquetacion;
$('#num-caracteres').val(stored.num_caracteres);
$('#formato-maquetacion').val(stored.formato_maquetacion);
$('#cuerpo-texto').val(stored.cuerpo_texto);
$('#num-columnas').val(stored.num_columnas);
$('#num-tablas').val(stored.num_tablas);
$('#num-fotos').val(stored.num_fotos);
$('#correccion-ortotipografica').prop('checked', stored.correccion_ortotipografica);
$('#texto-mecanografiado').prop('checked', stored.texto_mecanografiado);
$('#disenio-portada').prop('checked', stored.disenio_portada);
$('#epub').prop('checked', stored.epub);
$(document).one('maquetacion:response', (e, stored) => {
$('#num-caracteres').val(stored.num_caracteres);
$('#formato-maquetacion').val(stored.formato_maquetacion);
$('#cuerpo-texto').val(stored.cuerpo_texto);
$('#num-columnas').val(stored.num_columnas);
$('#num-tablas').val(stored.num_tablas);
$('#num-fotos').val(stored.num_fotos);
$('#correccion-ortotipografica').prop('checked', stored.correccion_ortotipografica);
$('#texto-mecanografiado').prop('checked', stored.texto_mecanografiado);
$('#disenio-portada').prop('checked', stored.disenio_portada);
$('#epub').prop('checked', stored.epub);
Summary.updateExtras();
}
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));
Summary.updateExtras();
});
$(document).trigger('maquetacion:request');
}

View File

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