@@ -146,7 +213,6 @@
let clientData = {};
let selectedPlanId = null;
- // CANVAS
const canvas = document.getElementById('signature-pad');
const ctx = canvas.getContext('2d');
let drawing = false;
@@ -169,16 +235,15 @@
}
function startDrawing(e) { if (e.touches && e.touches.length > 1) return; drawing = true; const pos = getPos(e); ctx.beginPath(); ctx.moveTo(pos.x, pos.y); }
function draw(e) { if (!drawing) return; e.preventDefault(); const pos = getPos(e); ctx.lineTo(pos.x, pos.y); ctx.stroke(); }
+
canvas.addEventListener('mousedown', startDrawing); canvas.addEventListener('mousemove', draw); canvas.addEventListener('mouseup', () => drawing = false);
canvas.addEventListener('touchstart', startDrawing); canvas.addEventListener('touchmove', draw); canvas.addEventListener('touchend', () => drawing = false);
function clearSignature() { ctx.clearRect(0, 0, canvas.width, canvas.height); }
- // REDIRECCIÓN VOLVER
function goBackToPortal() {
- window.location.href = `index.html?token=${token}`; // Ajusta 'index.html' si tu portal principal se llama 'portal.html'
+ window.location.href = `index.html?token=${token}`;
}
- // CARGA INICIAL
async function init() {
if(!token) return alert("Enlace inválido. Falta el token de seguridad.");
lucide.createIcons();
@@ -192,14 +257,12 @@
document.getElementById('company-name-badge').innerText = data.company.name;
document.getElementById('loader').classList.add('hidden');
- // 🛑 ESCUDO: Si el cliente ya tiene seguro, bloqueamos la página
if (data.hasActivePlan && data.activePlanDetails) {
document.getElementById('active-plan-name').innerText = data.activePlanDetails.plan_name;
document.getElementById('already-subscribed-container').classList.remove('hidden');
- return; // Detenemos la ejecución aquí, no mostramos los planes
+ return;
}
- // Si no tiene seguro, cargamos los datos y mostramos el contrato
loadedPlans = data.plans;
globalConfig = data.config;
clientData = data.client;
@@ -210,11 +273,8 @@
document.getElementById('pdf-dynamic-text').innerText = globalConfig.contract_text || "El mantenimiento y asistencia quedan cubiertos por las condiciones de la empresa proveedora.";
renderPlans();
-
- // Mostrar contenedor
document.getElementById('contract-container').classList.remove('hidden');
- // Esperar a que el contenedor esté visible para configurar el canvas correctamente
setTimeout(() => {
setupCanvas();
window.addEventListener('resize', setupCanvas);
@@ -223,34 +283,34 @@
lucide.createIcons();
} catch(e) {
- document.getElementById('loader').innerHTML = `
${e.message}
`;
+ document.getElementById('loader').innerHTML = `
${e.message}
`;
}
}
function renderPlans() {
const wrapper = document.getElementById('plans-wrapper');
if (loadedPlans.length === 0) {
- wrapper.innerHTML = `
El catálogo de planes se está actualizando. Vuelve pronto.
`;
+ wrapper.innerHTML = `
El catálogo de planes se está actualizando. Vuelve pronto.
`;
return;
}
wrapper.innerHTML = loadedPlans.map((p, index) => {
- const isRecommended = p.type === 'anual'; // Marcamos el anual como recomendado visualmente
+ const isRecommended = p.type === 'anual';
return `
-
- ${isRecommended ? `
Recomendado
` : ''}
-
-
-
+
+ ${isRecommended ? `
Ahorras dinero
` : ''}
+
+
-
${p.name}
-
${p.urgencies_limit} Urgencias | ${p.bricos_limit} Bricos
+
${p.name}
+
${p.urgencies_limit} Urg | ${p.bricos_limit} Bricos
-
-
${p.price}€
-
/ ${p.type}
+
+
${p.price}€
+
/ ${p.type}
`;
@@ -280,14 +340,13 @@
const blank = document.createElement('canvas');
blank.width = canvas.width; blank.height = canvas.height;
- if (canvas.toDataURL() === blank.toDataURL()) return alert("⚠️ Firma requerida: Por favor, firma el contrato en el recuadro blanco.");
+ if (canvas.toDataURL() === blank.toDataURL()) return alert("⚠️ Firma requerida: Por favor, firma el contrato en el recuadro con rayas.");
const btn = document.getElementById('btnAction');
btn.disabled = true;
- btn.innerHTML = '
Generando Contrato...';
+ btn.innerHTML = '
Preparando pasarela...';
lucide.createIcons();
- // 1. Inyectar firma y datos en PDF
const planSeleccionado = loadedPlans.find(p => p.id === selectedPlanId);
document.getElementById('pdf-signature-img').src = canvas.toDataURL("image/png");
document.getElementById('pdf-plan-name').innerText = `${planSeleccionado.name} (${planSeleccionado.price}€ / ${planSeleccionado.type})`;
@@ -305,13 +364,8 @@
};
try {
- // 2. Crear PDF (Internamente) y generar Base64
const pdfBase64 = await html2pdf().set(opt).from(element).output('datauristring');
- btn.innerHTML = '
Conectando con pasarela...';
- lucide.createIcons();
-
- // 3. Mandar al Servidor (Que crea el alta y genera el link de Stripe)
const payload = { plan_id: selectedPlanId, signature: canvas.toDataURL("image/png"), pdf_document: pdfBase64 };
const res = await fetch(`${API_URL}/public/portal/${token}/protection/subscribe`, {
@@ -323,16 +377,15 @@
const apiData = await res.json();
if (apiData.ok && apiData.checkout_url) {
- // 4. Redirigir a Stripe
window.location.href = apiData.checkout_url;
} else {
- throw new Error(apiData.error || "No se pudo conectar con la pasarela de pago.");
+ throw new Error(apiData.error || "No se pudo conectar con la pasarela de pago segura.");
}
} catch (err) {
alert("❌ Error: " + err.message);
btn.disabled = false;
- btn.innerHTML = '
Firmar y Pagar';
+ btn.innerHTML = '
Confirmar y Pagar';
lucide.createIcons();
} finally {
element.classList.add('hidden');