añadida carga de datos de cache en formularios

This commit is contained in:
Jaime Jiménez
2025-09-19 14:55:54 +02:00
parent 796a0ccb6e
commit 6d88608612
6 changed files with 187 additions and 40 deletions

View File

@ -59,6 +59,38 @@ class PresupuestoCliente {
acabado: 0
}
},
servicios: {
servicios: [],
datosMarcaPaginas: {
marcapaginas_tirada: 100,
tamanio_maquetacion: '_50x140_',
caras_impresion: 'una_cara',
papel_marcapaginas: 'cartulina_grafica',
gramaje_marcapaginas: 300,
acabado_marcapaginas: 'ninguno',
resultado: {
precio_unitario: 0,
precio_total: 0
}
},
datosMaquetacion: {
num_caracteres: 200000,
formato_maquetacion: 'A5',
cuerpo_texto: 'medium',
num_columnas: 1,
num_tablas: 0,
num_fotos: 0,
correccion_ortotipografica: false,
texto_mecanografiado: false,
disenio_portada: false,
epub: false,
resultado: {
num_paginas_estimadas: 0,
precio_pagina_estimado: 0,
precio: 0
}
}
},
selectedTirada: null,
}
@ -236,8 +268,9 @@ class PresupuestoCliente {
contenedor.append(label);
}
/******************************
* END OF DATOS GENERALES
* DATOS GENERALES
******************************/
#initDatosGenerales() {
@ -1087,7 +1120,7 @@ class PresupuestoCliente {
const tipoCubierta = $('.tapa-cubierta.selected').attr('id') || 'tapaBlanda';
const solapas = $('.solapas-cubierta.selected').id == 'sin-solapas' ? 0 : 1 || 0;
const tamanioSolapas = $('#tamanio-solapas-cubierta').val() || '80';
const tamanioSolapasCubierta = $('#tamanio-solapas-cubierta').val() || '80';
const cubiertaCaras = parseInt(this.carasImpresionCubierta.val()) || 2;
const guardasPapelId = parseInt($('#papel-guardas option:selected').data('papel-id')) || 3;
const guardasGramaje = parseInt($('#papel-guardas option:selected').data('gramaje')) || 170;
@ -1111,7 +1144,7 @@ class PresupuestoCliente {
return {
tipoCubierta: tipoCubierta,
solapas: solapas,
tamanioSolapas: tamanioSolapas,
tamanioSolapasCubierta: tamanioSolapasCubierta,
cubiertaCaras: cubiertaCaras,
guardasPapelId: guardasPapelId,
guardasGramaje: guardasGramaje,
@ -1142,7 +1175,7 @@ class PresupuestoCliente {
this.formData.cubierta.tipoCubierta = data.tipoCubierta;
this.formData.cubierta.solapas = data.solapas;
this.formData.cubierta.tamanioSolapas = data.tamanioSolapas;
this.formData.cubierta.tamanioSolapasCubierta = data.tamanioSolapasCubierta;
this.formData.cubierta.cubiertaCaras = data.cubiertaCaras;
this.formData.cubierta.guardasPapelId = data.guardasPapelId;
this.formData.cubierta.guardasGramaje = data.guardasGramaje;
@ -1219,7 +1252,7 @@ class PresupuestoCliente {
$(`.solapas-cubierta#con-solapas`).addClass('selected');
this.divSolapasCubierta.removeClass('d-none');
this.carasImpresionCubierta.val(this.formData.cubierta.cubiertaCaras);
this.tamanioSolapasCubierta.val(this.formData.cubierta.tamanioSolapas);
this.tamanioSolapasCubierta.val(this.formData.cubierta.tamanioSolapasCubierta);
}
this.carasImpresionCubierta.val(this.formData.cubierta.cubiertaCaras);
@ -1361,6 +1394,7 @@ class PresupuestoCliente {
// Eventos para el resumen
$(document).on('change', '.service-checkbox', (e) => {
Summary.updateExtras();
});
}

View File

@ -3,10 +3,12 @@ import { formateaMoneda } from "../utils.js";
$(document).on('change', '#maquetacion', function (e) {
e.preventDefault();
if ($('#maquetacion').is(':checked')) {
$.get("/presupuesto/public/maquetacion/form", function (data) {
$("#maquetacionModalBody").html(data);
loadMaquetacionData();
$("#maquetacionModal").modal("show");
});
} else {
@ -18,7 +20,9 @@ $(document).on('change', '#maquetacion', function (e) {
}
});
$(document).on("submit", "#maquetacionForm", function (e) {
e.preventDefault();
const $form = $(this);
@ -34,16 +38,15 @@ $(document).on("submit", "#maquetacionForm", function (e) {
const modal = bootstrap.Modal.getInstance(modalEl) || new bootstrap.Modal(modalEl);
modal.hide();
const resumenHtml = `
<div class="text-start">
<p>${json.language.num_paginas_estimadas || 'Páginas calculadas'}: ${json.numPaginasEstimadas ?? "-"}</p>
<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>` : ""}
</div>
`;
<div class="text-start">
<p>${json.language.num_paginas_estimadas || 'Páginas calculadas'}: ${json.numPaginasEstimadas ?? "-"}</p>
<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>` : ""}
</div>
`;
Swal.fire({
title: json.language.presupuesto_maquetacion || 'Presupuesto Maquetación',
@ -66,6 +69,13 @@ $(document).on("submit", "#maquetacionForm", function (e) {
$('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;
sessionStorage.setItem("formData", JSON.stringify(stored));
}
else {
const calcularStr = $('#div-extras').data('language-calcular');
@ -108,3 +118,43 @@ $(document).on('hidden.bs.modal', '#maquetacionModal', function () {
$('label[for="maquetacion"] .service-price').text(calcularStr);
});
$(document).on('change', '.maquetacion-item', () => {
saveMaquetacionData();
});
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);
}
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

@ -7,6 +7,8 @@ $(document).on('change', '#marcapaginas', function (e) {
$.get("/presupuesto/public/marcapaginas/form", function (data) {
$("#marcapaginasModalBody").html(data);
loadMarcapaginasData();
// init marcapaginas form
filtrarAcabados();
$("#marcapaginasModal").modal("show");
@ -65,6 +67,12 @@ $(document).on("submit", "#marcapaginasForm", function (e) {
$('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_unidad;
stored.servicios.datosMarcapaginas.resultado.precio_total = json.precio_total;
sessionStorage.setItem("formData", JSON.stringify(stored));
}
else {
const calcularStr = $('#div-extras').data('language-calcular');
@ -139,5 +147,37 @@ function filtrarAcabados() {
}
$(document).on('change', '.marcapaginas-item', () => {
saveMarcapaginasData();
});
function loadMarcapaginasData() {
const stored = JSON.parse(sessionStorage.getItem("formData")).servicios.datosMarcapaginas;
$('#marcapaginas-tirada').val(stored.marcapaginas_tirada);
$('#tamanio-maquetacion').val(stored.tamanio_maquetacion);
$('#caras-impresion').val(stored.caras_impresion);
$('#papel-marcapaginas').val(stored.papel_marcapaginas);
$('#gramaje-marcapaginas').val(stored.gramaje_marcapaginas);
$('#num-fotos').val(stored.num_fotos);
$('#acabado-marcapaginas').prop('checked', 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_maquetacion = $('#tamanio-maquetacion').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.num_fotos = parseInt($('#num-fotos').val()) || 0;
stored.servicios.datosMarcapaginas.acabado_marcapaginas = $('#acabado-marcapaginas').val() || 'ninguno';
sessionStorage.setItem("formData", JSON.stringify(stored));
}