SIPA
South India Pipe Agency
⚠ You are offline – showing cached data
SIPA
Today
Refresh
Walk-in
Direct Call
Today's Active Leads
0
–
Leads
–
Won
–
Conv%
–
Revenue
Leads
✕
All
New
Contacted
Quote Sent
Won
Lost
Customers
✕
Customer
Edit
Delete
—
—
WhatsApp
0
Orders
₹0
Revenue
₹0
Avg Order
Leads
Activity
Messages
Notes
Inbox
Refresh
Leads
Lead Detail
Edit
Delete
—
–
WhatsApp
Quote ₹
Notes
Save Note
Messages
Activity
Today
New Walk-in
Customer Name *
Phone Number *
🇮🇳 +91
🇺🇸 +1
🇬🇧 +44
🇦🇪 +971
🇸🇦 +966
🇸🇬 +65
🇱🇰 +94
🇵🇰 +92
🇧🇩 +880
🇲🇾 +60
Customer Type
Homeowner
Contractor
Builder
Architect
Engineer
Product Interest
Referrer (optional)
Referrer's phone (optional)
🇮🇳 +91
🇺🇸 +1
🇬🇧 +44
🇦🇪 +971
🇸🇦 +966
🇸🇬 +65
🇱🇰 +94
🇵🇰 +92
🇧🇩 +880
🇲🇾 +60
Notes
Save Lead
Monthly Summary
Refresh
This Month
–%
Conversion Rate
–
Leads
–
Won
–
Lost
Revenue Won
₹0
Lead Sources
Today
Leads
Customers
Messages
Summary
Leads
✕
Filter Leads
✕
Added
Source
Customer Type
Product
Clear All
Apply
Filter Customers
✕
Added (First Order)
Original Source
Customer Type
Clear All
Apply
Edit Lead Info
✕
Customer Name
Phone Number
🇮🇳 +91
🇺🇸 +1
🇬🇧 +44
🇦🇪 +971
🇸🇦 +966
🇸🇬 +65
🇱🇰 +94
🇵🇰 +92
🇧🇩 +880
🇲🇾 +60
Changing phone affects WhatsApp messages — double-check before saving.
Customer Type
Homeowner
Contractor
Builder
Architect
Engineer
Product Interest
Referrer name (optional)
Referrer phone (optional)
🇮🇳 +91
🇺🇸 +1
🇬🇧 +44
🇦🇪 +971
🇸🇦 +966
🇸🇬 +65
🇱🇰 +94
🇵🇰 +92
🇧🇩 +880
🇲🇾 +60
Notes
Save Changes
Edit Customer Info
✕
Name
Customer Type
Homeowner
Contractor
Builder
Architect
Engineer
Tags
Notes
Save Changes
SIPA
Who are you?
← Back
Name
Enter your PIN
PIN
1
2
3
4
5
6
7
8
9
0
⌫
When to call back?
Cancel
Confirm
Delete?
This cannot be undone.
Cancel
Delete
/* ══════════════════════════════════════════ EDIT LEAD ══════════════════════════════════════════ */ function openEditLead() { const lead = STATE.currentLead; if (!lead) return; document.getElementById('edit-name').value = lead.name || ''; const rawPhone = String(lead.phone || ''); const prefixes = ['+971','+966','+880','+44','+65','+94','+92','+60','+91','+1']; let editCC = '+91', editDigits = rawPhone.replace(/\D/g,''); for (const p of prefixes) { if (rawPhone.startsWith(p)) { editCC = p; editDigits = rawPhone.slice(p.length).replace(/\D/g,''); break; } } document.getElementById('edit-cc').value = editCC; document.getElementById('edit-phone-digits').value = editDigits; document.querySelectorAll('#edit-type-chips .type-chip').forEach(c => c.classList.toggle('selected', c.dataset.val === (lead.type || 'Homeowner'))); document.getElementById('edit-product-search').value = lead.product || ''; document.getElementById('edit-product-results').style.display = 'none'; document.getElementById('edit-referrer').value = lead.referrer || ''; const rawRefPhone = String(lead.referrerPhone || ''); let refCC = '+91', refDigits = ''; if (rawRefPhone) { refDigits = rawRefPhone; for (const p of prefixes) { if (rawRefPhone.startsWith(p)) { refCC = p; refDigits = rawRefPhone.slice(p.length).replace(/\D/g,''); break; } } } document.getElementById('edit-referrer-cc').value = refCC; document.getElementById('edit-referrer-phone-digits').value = refDigits; document.getElementById('edit-notes').value = lead.notes || ''; document.getElementById('lead-edit-modal').classList.add('open'); } function closeLeadEdit() { document.getElementById('lead-edit-modal').classList.remove('open'); } function filterEditProductResults(val) { const products = STATE.products || []; const q = val.toLowerCase().trim(); const res = document.getElementById('edit-product-results'); if (!q || products.length === 0) { res.style.display = 'none'; return; } const matches = products.filter(p => (p.name||'').toLowerCase().includes(q) || (p.category||'').toLowerCase().includes(q) || (p.brand||'').toLowerCase().includes(q) ).slice(0, 8); if (!matches.length) { res.style.display = 'none'; return; } res.innerHTML = matches.map(p => { const lbl = (p.name + ' ' + p.brand).trim(); const safeLbl = lbl.replace(/&/g,'&').replace(/"/g,'"'); const rate = p.rate ? '\u20B9' + Number(p.rate).toLocaleString('en-IN') : ''; return '
' + '
' + p.name + '
' + '
' + p.brand + '
' + (rate ? '
' + rate + '
' : '') + '
'; }).join(''); res.onpointerdown = function(ev) { const item = ev.target.closest('.product-result-item'); if (!item) return; ev.preventDefault(); selectEditProduct(item.dataset.label); }; res.style.display = 'block'; } function selectEditProduct(label) { document.getElementById('edit-product-search').value = label; document.getElementById('edit-product-results').style.display = 'none'; } async function submitEditLead() { const lead = STATE.currentLead; if (!lead) return; const name = document.getElementById('edit-name').value.trim(); if (!name) { toast('Name is required', 'error'); return; } const cc = document.getElementById('edit-cc').value; const digits = document.getElementById('edit-phone-digits').value.trim().replace(/\D/g,''); if (!digits || digits.length < 6) { toast('Enter a valid phone number', 'error'); return; } const type = document.querySelector('#edit-type-chips .type-chip.selected')?.dataset.val || lead.type || ''; const product = document.getElementById('edit-product-search').value.trim(); const referrer= document.getElementById('edit-referrer').value.trim(); const refCC = document.getElementById('edit-referrer-cc').value; const refDig = document.getElementById('edit-referrer-phone-digits').value.trim().replace(/\D/g,''); const refPhone= refDig ? (refCC + refDig) : ''; const notes = document.getElementById('edit-notes').value.trim(); const phone = cc + digits; const btn = document.getElementById('edit-lead-save-btn'); btn.disabled = true; btn.textContent = 'Saving…'; try { if (CONFIG.BACKEND_URL !== 'REPLACE_WITH_APPS_SCRIPT_URL') { await apiPost('updateLead', { Lead_ID: lead.id, Name: name, Phone: phone, Customer_Type: type, Product_Asked: product, Referred_By: referrer, Referred_By_Phone: refPhone, Notes: notes, }); } lead.name = name; lead.phone = phone; lead.type = type; lead.product = product; lead.referrer = referrer; lead.referrerPhone = refPhone; lead.notes = notes; lead.updated_at = new Date().toISOString(); closeLeadEdit(); openLead(lead.id); toast('Lead updated', 'success'); } catch(err) { toast('Failed: ' + (err.message||'check connection'), 'error'); } finally { btn.disabled = false; btn.innerHTML = '
Save Changes'; } } /* ══════════════════════════════════════════ EDIT CUSTOMER ══════════════════════════════════════════ */ function openEditCustomer() { const c = STATE.currentCustomer; if (!c) return; document.getElementById('cedit-name').value = c.name || ''; document.getElementById('cedit-tags').value = c.tags || ''; document.getElementById('cedit-notes').value = c.notes || ''; document.querySelectorAll('#cedit-type-chips .type-chip').forEach(ch => ch.classList.toggle('selected', ch.dataset.val === (c.type || 'Homeowner'))); document.getElementById('customer-edit-modal').classList.add('open'); } function closeCustomerEdit() { document.getElementById('customer-edit-modal').classList.remove('open'); } async function submitEditCustomer() { const c = STATE.currentCustomer; if (!c) return; const name = document.getElementById('cedit-name').value.trim(); if (!name) { toast('Name is required', 'error'); return; } const type = document.querySelector('#cedit-type-chips .type-chip.selected')?.dataset.val || c.type || ''; const tags = document.getElementById('cedit-tags').value.trim(); const notes = document.getElementById('cedit-notes').value.trim(); const btn = document.getElementById('edit-customer-save-btn'); btn.disabled = true; btn.textContent = 'Saving…'; try { if (CONFIG.BACKEND_URL !== 'REPLACE_WITH_APPS_SCRIPT_URL') { await apiPost('updateCustomer', { Customer_ID: c.id, Name: name, Type: type, Tags: tags, Notes: notes }); } c.name = name; c.type = type; c.tags = tags; c.notes = notes; closeCustomerEdit(); openCustomer(c.id); toast('Customer updated', 'success'); } catch(err) { toast('Failed: ' + (err.message||'check connection'), 'error'); } finally { btn.disabled = false; btn.innerHTML = '
Save Changes'; } } /* ══════════════════════════════════════════ WON → CUSTOMERS MANUAL SYNC ══════════════════════════════════════════ */