From 9e5af107937dc77a5de1c5b061e19bde28cda29f Mon Sep 17 00:00:00 2001 From: marsalva Date: Sun, 29 Mar 2026 10:15:37 +0000 Subject: [PATCH] Actualizar index2.html --- index2.html | 71 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/index2.html b/index2.html index 40b56be..d361f87 100644 --- a/index2.html +++ b/index2.html @@ -445,7 +445,7 @@ }, 300); } - // --- LÓGICA DE PDF AÑADIDA --- +// --- LÓGICA DE PDF AÑADIDA --- let allServicesGlobalBackup = []; // <--- Variable para no perder los datos del cliente async function generatePDF(id) { @@ -454,16 +454,21 @@ showToast("⏳ Generando PDF, espera unos segundos..."); - // 1. CARGAMOS DATOS FISCALES DE LA EMPRESA (IBAN, OBS, CIF) + // 1. FIX DE PARSEO: A veces PostgreSQL manda el JSON como String. Lo forzamos a Objeto. + let bSet = globalCompanyData?.billing_settings || {}; + if (typeof bSet === 'string') { + try { bSet = JSON.parse(bSet); } catch(e) { bSet = {}; } + } + let empNombre = globalCompanyData?.name || "Empresa Reparadora"; let empLogo = globalCompanyData?.logo || null; - let empDni = globalCompanyData?.billing_settings?.dni ? `CIF/NIF: ${globalCompanyData.billing_settings.dni}` : ""; - let empAddress = globalCompanyData?.billing_settings?.address || ""; - let empCity = globalCompanyData?.billing_settings?.city || ""; - let empState = globalCompanyData?.billing_settings?.state || ""; - let empZip = globalCompanyData?.billing_settings?.zip || ""; - let empIban = globalCompanyData?.billing_settings?.iban || null; - let empObs = globalCompanyData?.billing_settings?.obs || null; + let empDni = bSet.dni ? `CIF/NIF: ${bSet.dni}` : ""; + let empAddress = bSet.address || ""; + let empCity = bSet.city || ""; + let empState = bSet.state || ""; + let empZip = bSet.zip || ""; + let empIban = bSet.iban || null; + let empObs = bSet.obs || null; document.getElementById('pdf-company-name').innerText = empNombre; document.getElementById('pdf-company-dni').innerText = empDni; @@ -488,29 +493,42 @@ if(fDate && fDate.includes('T')) fDate = fDate.split('T')[0].split('-').reverse().join('/'); document.getElementById('pdf-date').innerText = fDate; - // 2. 🛑 FIX CRÍTICO: RESCATAMOS DATOS DEL CLIENTE SI EL PRESUPUESTO ESTÁ VACÍO - let fallbackClient = allServicesGlobalBackup[0]?.raw_data || {}; + // 2. FIX DE CLIENTE: Si el cliente viene vacío o como la palabra "null", tira del expediente base + let fallbackClient = {}; + if (allServicesGlobalBackup && allServicesGlobalBackup.length > 0) { + fallbackClient = allServicesGlobalBackup[0]?.raw_data || {}; + } - let finalName = budget.client_name; - if(!finalName || finalName.trim() === "") finalName = fallbackClient["Nombre Cliente"] || fallbackClient["CLIENTE"] || document.getElementById('clientName').innerText; + let finalName = String(budget.client_name || ""); + if(finalName.trim() === "" || finalName === "null") { + finalName = fallbackClient["Nombre Cliente"] || fallbackClient["CLIENTE"] || document.getElementById('clientName').innerText || "Cliente"; + } - let finalPhone = budget.client_phone; - if(!finalPhone || finalPhone.trim() === "") finalPhone = fallbackClient["Teléfono"] || fallbackClient["TELEFONO"] || "-"; + let finalPhone = String(budget.client_phone || ""); + if(finalPhone.trim() === "" || finalPhone === "null") { + finalPhone = fallbackClient["Teléfono"] || fallbackClient["TELEFONO"] || fallbackClient["TELEFONOS"] || "-"; + } - let finalAddress = budget.client_address; - if(!finalAddress || finalAddress.trim() === "") { + let finalAddress = String(budget.client_address || ""); + if(finalAddress.trim() === "" || finalAddress === "null") { let fallbackAddr = fallbackClient["Dirección"] || fallbackClient["DOMICILIO"] || ""; let fallbackCp = fallbackClient["Código Postal"] || fallbackClient["C.P."] || ""; let fallbackPob = fallbackClient["Población"] || fallbackClient["POBLACION-PROVINCIA"] || ""; finalAddress = `${fallbackAddr}, ${fallbackCp} ${fallbackPob}`.trim(); - if (finalAddress === ",") finalAddress = "Dirección no especificada"; + if (finalAddress === "," || finalAddress === "") finalAddress = "Dirección no especificada"; } document.getElementById('pdf-client-name').innerText = finalName; document.getElementById('pdf-client-phone').innerText = finalPhone; document.getElementById('pdf-client-address').innerText = finalAddress; - const itemsArr = budget.items || []; + // 3. FIX DE ITEMS: Forzamos parseo por si viene como String de BD + let itemsArr = budget.items || []; + if (typeof itemsArr === 'string') { + try { itemsArr = JSON.parse(itemsArr); } catch(e) { itemsArr = []; } + } + if (!Array.isArray(itemsArr)) itemsArr = []; + let itemsHtml = ''; if (itemsArr.length > 0) { itemsHtml = itemsArr.map(item => ` @@ -539,8 +557,9 @@ document.getElementById('pdf-tax').innerText = tx.toFixed(2) + " €"; document.getElementById('pdf-total').innerText = tot.toFixed(2) + " €"; + // 4. MOSTRAR BLOQUES OCULTOS (IBAN / OBS) const bankContainer = document.getElementById('pdf-bank-info'); - if (empIban) { + if (empIban && empIban.trim() !== "") { document.getElementById('pdf-bank-account').innerText = empIban; bankContainer.style.display = 'block'; } else { @@ -548,13 +567,14 @@ } const obsContainer = document.getElementById('pdf-obs-info'); - if (empObs) { - document.getElementById('pdf-obs-text').innerHTML = empObs.replace(/\n/g, '
'); + if (empObs && empObs.trim() !== "") { + document.getElementById('pdf-obs-text').innerHTML = String(empObs).replace(/\n/g, '
'); obsContainer.style.display = 'block'; } else { obsContainer.style.display = 'none'; } + // REVELAR, DIBUJAR Y ESCONDER const wrapper = document.getElementById('pdf-wrapper'); wrapper.classList.remove('hidden'); wrapper.style.position = 'absolute'; @@ -589,6 +609,13 @@ setTimeout(() => t.classList.add('hidden'), 3000); } + function showToast(msg) { + const t = document.getElementById('toast'); + t.innerHTML = msg; + t.classList.remove('hidden'); + setTimeout(() => t.classList.add('hidden'), 3000); + } + // --- FUNCIONES DE TEXTO Y FECHAS --- function summarizeDescription(rawText) { if (!rawText) return "Revisión técnica en el domicilio.";