waiver admin section,
This commit is contained in:
@@ -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` : '');
|
||||
|
||||
Reference in New Issue
Block a user