waiver admin section,

This commit is contained in:
2026-03-11 18:06:29 -04:00
parent bbe2b374a9
commit 901b3bb116
3 changed files with 54 additions and 6 deletions

View File

@@ -121,6 +121,7 @@ function calcQuote() {
const hstEnabled = document.getElementById('hstToggle')?.checked || false;
const oneTimeFee = parseFloat(document.getElementById('oneTimeFee')?.value) || 0;
const ztActive = addZT || ztSeats > 0;
const adminWaived = document.getElementById('adminWaived')?.checked || false;
const VOIP_RATES = { basic: VOIP_RATE_BASIC, standard: VOIP_RATE_STANDARD, premium: VOIP_RATE_PREMIUM };
const CONTRACT_DISCOUNT = { 'm2m': DISCOUNT_M2M, '12mo': DISCOUNT_12MO, '24mo': DISCOUNT_24MO };
@@ -145,7 +146,8 @@ function calcQuote() {
const baseSubtotal = userBase + endpointBase + serverBase;
const siteAdminBase = Math.max(ADMIN_FEE_FLOOR, ADMIN_FEE_MINIMUM - baseSubtotal);
const admin1PWM = addPWM ? Math.round(userPWM * ADMIN_1PWM_PCT) : 0;
const adminFeeNet = siteAdminBase + (ztActive ? ADMIN_FEE_ZT : 0) + admin1PWM;
const adminFeeNet = siteAdminBase + (ztActive ? ADMIN_FEE_ZT : 0) + admin1PWM;
const adminFeeEffective = adminWaived ? 0 : adminFeeNet;
const ztNetSeats = ztSeats * ZT_SEAT_RATE;
const ztNetRouters = ztRouters * ZT_ROUTER_RATE;
@@ -157,7 +159,7 @@ function calcQuote() {
const voipFaxAmt = addVoipFax ? VOIP_FAX_RATE : 0;
const voipTotal = voipSeatsAmt + voipPhoneAmt + voipFaxAmt;
const MRR = userTotal + endpointTotal + adminFeeNet + ztNetTotal + voipTotal;
const MRR = userTotal + endpointTotal + adminFeeEffective + ztNetTotal + voipTotal;
const annual = MRR * 12;
const perUserAllin = users > 0 ? MRR / users : 0;
@@ -258,7 +260,12 @@ function update() {
});
// Admin Fee
getEl('adminFeeDisplay').textContent = fmt(adminFeeNet) + '/mo';
if (adminWaived) {
getEl('adminFeeDisplay').innerHTML =
`<span class="admin-fee-strike">${fmt(adminFeeNet)}/mo</span> <span class="admin-fee-waived-badge">WAIVED</span>`;
} else {
getEl('adminFeeDisplay').textContent = fmt(adminFeeNet) + '/mo';
}
const fillPct = Math.min(100, Math.max(0, (baseSubtotal / ADMIN_FEE_MINIMUM) * 100));
getEl('floorBar').style.width = fillPct + '%';
getEl('floorProgress').textContent = fmt(baseSubtotal) + ' / ' + fmt(ADMIN_FEE_MINIMUM);
@@ -272,7 +279,19 @@ function update() {
getEl('fb-zt-row').classList.toggle('hidden', !ztActive);
getEl('fb-pwm-row').classList.toggle('hidden', !addPWM);
getEl('fb-pwm').textContent = '+' + fmt(admin1PWM);
getEl('fb-total').textContent = fmt(adminFeeNet);
if (adminWaived) {
getEl('fb-total').innerHTML =
`<span class="admin-fee-strike">${fmt(adminFeeNet)}</span> <span class="admin-fee-waived-badge">WAIVED</span>`;
} else {
getEl('fb-total').textContent = fmt(adminFeeNet);
}
// Savings callout below fee table
const adminWaivedSavingsEl = document.getElementById('adminWaivedSavings');
if (adminWaivedSavingsEl) {
adminWaivedSavingsEl.classList.toggle('hidden', !adminWaived || adminFeeNet === 0);
const awAmt = document.getElementById('adminWaivedAmt');
if (awAmt) awAmt.textContent = fmt(adminFeeNet);
}
// Sidebar lines
const show = (id, val) => {
@@ -309,7 +328,16 @@ function update() {
if (ztNetTotal > 0) getEl('sl-zt-val').textContent = fmt(ztNetTotal);
show('sl-voip', voipTotal > 0);
if (voipTotal > 0) getEl('sl-voip-val').textContent = fmt(voipTotal);
getEl('sl-admin-val').textContent = fmt(adminFeeNet);
const slAdminEl = getEl('sl-admin');
const slAdminValEl = getEl('sl-admin-val');
if (adminWaived) {
slAdminEl?.classList.add('sl-admin-waived');
if (slAdminValEl) slAdminValEl.innerHTML =
`<span class="otf-amt">${fmt(adminFeeNet)}</span> <span class="otf-waived-label">WAIVED</span>`;
} else {
slAdminEl?.classList.remove('sl-admin-waived');
if (slAdminValEl) slAdminValEl.textContent = fmt(adminFeeNet);
}
// MRR + totals — show effective MRR (after term discount) as the headline number
getEl('mrrDisplay').textContent = fmt(effectiveMrr);
@@ -518,7 +546,7 @@ function updateSectionSummaries(q) {
el.style.display = show ? 'inline-block' : 'none';
};
setSummary('sec01-summary', fmt(q.adminFeeNet) + '/mo');
setSummary('sec01-summary', q.adminWaived ? 'WAIVED' : fmt(q.adminFeeNet) + '/mo');
setSummary('sec02-summary', q.users > 0 ? `${q.users} user${q.users !== 1 ? 's' : ''} · ${fmt(q.userTotal)}/mo` : '');
setSummary('sec03-summary', q.endpoints > 0 ? `${q.endpoints} endpoint${q.endpoints !== 1 ? 's' : ''} · ${fmt(q.endpointTotal - q.serverBase)}/mo` : '');
setSummary('sec04-summary', q.servers > 0 ? `${q.servers} server${q.servers !== 1 ? 's' : ''} · ${fmt(q.serverBase)}/mo` : '');