Cotizador Towers Cleaning


Towers Cleaning

Calculadora & Cotización


Deep Cleaning







¿A dónde enviamos tu cotización?

¡Enviado! Revisa tu correo.

🔒
Completa tus datos arriba
para ver el precio
Estimado Mensual
$—
Esperando datos…

Al solicitar cotización aceptas recibir un correo con la información.


document.addEventListener('DOMContentLoaded', function() { const E = id => document.getElementById(id); const jobType = E('jobType'); if(!jobType) return; function toggleFields(){ const st = jobType.value==='shortterm'; E('officeFields').style.display = st?'none':'block'; E('shortTermFields').style.display = st?'block':'none'; calculate(); } jobType.addEventListener('change', toggleFields); ['timesPerWeek','sqft','timesPerMonth','bedrooms','bathrooms','laundryBags', 'baseOffice','baseResidential','baseShortRoom','notes'].forEach(id => { if(E(id)) E(id).addEventListener('input', calculate); }); function calculate(){ const type = jobType.value; const baseOffice = parseFloat(E('baseOffice').value)||0; const baseResidential = parseFloat(E('baseResidential').value)||0; const baseShortRoom = parseFloat(E('baseShortRoom').value)||0; let total=0, breakdown='', breakdown2=''; if(type==='office' || type==='residential'){ const sqft = parseFloat(E('sqft').value)||0; const times = parseFloat(E('timesPerWeek').value)||0; const base = type==='office'?baseOffice:baseResidential; total = sqft * base * times * 4.33; breakdown = `${sqft} sqft × $${base.toFixed(2)} × ${times} × 4.33`; breakdown2 = `Base: ${type==='office'?'Office':'Residential'} rate`; } else { const bed = parseInt(E('bedrooms').value)||0; const bath = parseInt(E('bathrooms').value)||0; const bags = parseInt(E('laundryBags').value)||0; const times = parseInt(E('timesPerMonth').value)||0; total = (((bed + bath) * baseShortRoom) + (bags * 20)) * times; breakdown = `((${bed}+${bath})×$${baseShortRoom}) + (${bags}×$20) × ${times}`; breakdown2 = `Short-Term Rental calculation`; } let notesText = E('notes').value; let discountMatch = notesText.match(/(\d+)%/); if(discountMatch){ let discount = parseFloat(discountMatch[1]); total = total * (1 - discount/100); notesText += ` → Discount applied: ${discount}%`; } E('line1').textContent = breakdown; E('line2').textContent = breakdown2; E('total').textContent = `$${total.toFixed(2)}`; E('notesOut').textContent = notesText; } ['baseOffice','baseResidential','baseShortRoom'].forEach(id=>{ if(E(id)) E(id).addEventListener('change',()=>{ localStorage.setItem(id,E(id).value); }); }); window.addEventListener('load',()=>{ ['baseOffice','baseResidential','baseShortRoom'].forEach(id=>{ if(localStorage.getItem(id)) E(id).value = localStorage.getItem(id); }); toggleFields(); calculate(); }); });