Actualizar index2.html
This commit is contained in:
69
index2.html
69
index2.html
@@ -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, '<br>');
|
||||
if (empObs && empObs.trim() !== "") {
|
||||
document.getElementById('pdf-obs-text').innerHTML = String(empObs).replace(/\n/g, '<br>');
|
||||
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.";
|
||||
|
||||
Reference in New Issue
Block a user