Help Us Improve Your Experience
Tell us which marketing partner brought you! This helps us understand our audience better.
let companyModalTimerInterval = null;
const COMPANY_MODAL_DISMISS_DURATION = 3600; // 1 hour after dismiss
const COMPANY_MODAL_IDLE_TRIGGER = 30 * 60; // Show after 30 min idle OR on revisit
const COMPANY_MODAL_TIMER_DURATION = 15 * 60; // 15 min countdown timer on modal
function hideCompanyModal() {
const modal = document.getElementById('companyAssignmentModal');
if (modal) modal.style.display = 'none';
if (companyModalTimerInterval) clearInterval(companyModalTimerInterval);
}
function showCompanyModal() {
const modal = document.getElementById('companyAssignmentModal');
if (!modal) return;
loadCompaniesIntoSelect();
modal.style.display = 'flex';
startCompanyModalCountdown();
}
function startCompanyModalCountdown() {
let timeLeft = COMPANY_MODAL_TIMER_DURATION;
const timerEl = document.getElementById('companyAssignmentTimer');
function updateTimer() {
if (timeLeft <= 0) {
if (companyModalTimerInterval) clearInterval(companyModalTimerInterval);
hideCompanyModal();
return;
}
const mins = Math.floor(timeLeft / 60);
const secs = timeLeft % 60;
if (timerEl) timerEl.textContent = `Time remaining to choose: ${mins}:${secs.toString().padStart(2, '0')}`;
timeLeft--;
}
updateTimer();
if (companyModalTimerInterval) clearInterval(companyModalTimerInterval);
companyModalTimerInterval = setInterval(updateTimer, 1000);
}
function dismissCompanyModal() {
hideCompanyModal();
companyModalDismissTime = Math.floor(Date.now() / 1000);
localStorage.setItem('companyModal_dismissTime', companyModalDismissTime);
}
function saveCompanyAssignment() {
const company = document.getElementById('companySelect').value;
if (!company) {
alert('Please select a marketing partner');
return;
}
const msisdn = localStorage.getItem('katakata_msisdn') || '';
if (!msisdn) {
alert('Phone number not found');
return;
}
const btn = event.target;
btn.disabled = true;
const prevText = btn.textContent;
btn.textContent = 'Saving...';
const form = new FormData();
form.append('msisdn', msisdn);
form.append('company_id', company);
const csrftoken = getCookie('csrftoken');
fetch('/marketing/assign/', {
method: 'POST',
body: form,
credentials: 'same-origin',
headers: csrftoken ? { 'X-CSRFToken': csrftoken } : {}
})
.then(r => r.json())
.then(data => {
if (data.ok) {
hideCompanyModal();
companyModalDismissTime = Math.floor(Date.now() / 1000);
localStorage.setItem('companyModal_dismissTime', companyModalDismissTime);
localStorage.setItem('companyModal_assigned', 'true');
} else {
alert(data.error || 'Failed to save');
}
})
.catch(() => alert('Network error'))
.finally(() => {
btn.disabled = false;
btn.textContent = prevText;
});
}
function loadCompaniesIntoSelect() {
const sel = document.getElementById('companySelect');
if (!sel) return;
fetch('/marketing/companies/json/', { credentials: 'same-origin' })
.then(r => r.json())
.then(data => {
if (!data || !data.companies) return;
sel.innerHTML = '