📣 Live
Welcome to the D4Drivers CS Dashboard! 👋🎉 Tap the podium cards to celebrate our top performers!📋 Click any week bar to drill into individual performance📥 Upload your Master Data CSV to refresh the dashboardWelcome to the D4Drivers CS Dashboard! 👋🎉 Tap the podium cards to celebrate our top performers!📋 Click any week bar to drill into individual performance📥 Upload your Master Data CSV to refresh the dashboard
Customer Service · Call Centre Performance
April 2026
14 agents · call centre performance
53% to target
CC Bookings
1,071
of 2,016 CC target
% to Target
53%
945 to go
Top Agent
Raj
281 bookings
Best Efficiency
7.49/hr
Raj
Monthly progress to target1,071 / 2,016
W11–5
W26–12
W313–19
W420–26
W527–30
↑ Click any week bar to drill down into individual performance
🏆
🥇 Raj Rajp leads with 281 bookings — ⚡ Raj Rajp tops efficiency at 7.49/hr. Incredible work!
Agent of the month — tap a card to celebrate 🎉
2nd
🥈
JN
Jenna Nickless
251
bookings this month
tap to celebrate 🎉
1st
🥇
R
Raj Rajp
281
bookings this month
AGENT OF THE MONTH
tap to celebrate 🎉
3rd
🥉
TE
Thomas Easton
187
bookings this month
tap to celebrate 🎉
Full leaderboard — total bookings
🥇
R
Raj Rajp
281
🥈
JN
Jenna Nickless
251
🥉
TE
Thomas Easton
187
4
AN
Anisha Nahan
132
5
CF
Caitlin Finzi
106
6
CB
Chloe Bythell
34
7
LB
Layla Breeze
26
8
JR
James Rocke
23
9
KH
Kacey Hislop
18
10
AE
Ashley Evans
4
11
NR
Natalie Rolands
4
12
EH
Emelia Hussain
3
13
HD
hannah dawes
1
14
CC
Courtney Chadwick
1
Efficiency leaderboard — bookings per contracted hour
🥇
R
Raj Rajp
7.49
🥈
JN
Jenna Nickless
6.69
🥉
TE
Thomas Easton
4.99
4
CF
Caitlin Finzi
4.71
5
AN
Anisha Nahan
3.52
6
CB
Chloe Bythell
0.91
7
LB
Layla Breeze
0.69
8
JR
James Rocke
0.61
9
KH
Kacey Hislop
0.48
10
AE
Ashley Evans
0.11
11
NR
Natalie Rolands
0.11
12
EH
Emelia Hussain
0.08
13
HD
hannah dawes
0.03
14
CC
Courtney Chadwick
0.03
Personal performance report
📄
Download your personalised report
Select your name and download a PDF summary of your month
Bookings into each week of the month
Bookings
CC Target
Weekly data
Agent breakdown by week
Agent data
"; // Render inside page overlay — avoids popup blockers on SharePoint/Teams var overlay = document.getElementById("pdfOverlay"); if (!overlay) { overlay = document.createElement("div"); overlay.id = "pdfOverlay"; overlay.style.cssText = "position:fixed;inset:0;z-index:10000;background:#0A0A0C;overflow-y:auto;"; document.body.appendChild(overlay); } overlay.innerHTML = '
' + '' + '' + 'Tip: in Print dialog, set destination to “Save as PDF” and enable Background graphics' + '
' + '
' + html + '
'; overlay.style.display = "block"; window.scrollTo(0, 0); } // ═══════════════════════════════════════════ // ADD MONTH // ═══════════════════════════════════════════ document.getElementById("addMonthBtn").onclick=function(){ var nl=prompt("Enter month label (e.g. April 2026):"); if(!nl)return; var prev=months[months.length-1]; months.push({label:nl,weekTargets:prev.weekTargets.slice(),agents:prev.agents.map(function(a){return{name:a.name,weeks:[0,0,0,0,0],hours:a.hours};}),lastUpdated:new Date().toISOString()}); activeIdx=months.length-1;buildTabs();render(); setTimeout(function(){openSettings();},200); }; // ═══════════════════════════════════════════ // SETTINGS // ═══════════════════════════════════════════ function openSettings(){ var m=am(); document.getElementById("settingMonth").value=m.label; var wtEl=document.getElementById("weekTargetInputs");wtEl.innerHTML=""; var settingRanges = (m.year && m.month) ? getWeekRanges(m.year, m.month) : null; m.weekTargets.forEach(function(t,i){ var lbl = settingRanges && settingRanges[i] ? "W"+(i+1)+"
"+settingRanges[i]+"" : "W"+(i+1); wtEl.innerHTML+="
"+lbl+"
"; }); renderAgentList(); document.getElementById("modalOverlay").classList.add("open"); } function renderAgentList(){ var el=document.getElementById("agentList");el.innerHTML=""; am().agents.forEach(function(a,i){ var row=document.createElement("div");row.className="agent-entry"; row.innerHTML=""; el.appendChild(row); }); el.querySelectorAll(".remove-btn").forEach(function(b){b.onclick=function(){am().agents.splice(parseInt(b.dataset.i),1);renderAgentList();};}); } document.getElementById("addAgentBtn").onclick=function(){am().agents.push({name:"",weeks:[0,0,0,0,0],hours:37.5});renderAgentList();var ins=document.getElementById("agentList").querySelectorAll("input[type=text]");ins[ins.length-1].focus();}; document.getElementById("settingsBtn").onclick=openSettings; document.getElementById("modalCancel").onclick=function(){document.getElementById("modalOverlay").classList.remove("open");}; document.getElementById("modalOverlay").onclick=function(e){if(e.target===e.currentTarget)e.currentTarget.classList.remove("open");}; document.getElementById("modalSave").onclick=function(){ var m=am();var ml=document.getElementById("settingMonth").value;if(ml)m.label=ml; m.weekTargets=m.weekTargets.map(function(_,i){var el=document.getElementById("wt"+i);return el?parseFloat(el.value)||0:0;}); m.agents=m.agents.map(function(a,i){var ne=document.getElementById("an"+i),he=document.getElementById("ah"+i);return{name:ne?ne.value:a.name,weeks:a.weeks,hours:he?parseFloat(he.value)||37.5:a.hours};}).filter(function(a){return a.name.trim()!=="";}); m.lastUpdated=new Date().toISOString(); document.getElementById("modalOverlay").classList.remove("open");buildTabs();render(); }; // ═══════════════════════════════════════════ // CSV // ═══════════════════════════════════════════ function parseCSV(txt){ var lines=txt.trim().split("\n");if(!lines.length)return[]; var hdr=lines[0].split(",").map(function(h){return h.trim().replace(/^"|"$/g,"").toLowerCase();}); return lines.slice(1).map(function(line){ var vals=[],cur="",inQ=false; for(var i=0;i= 0 && wi < numWeeks) amap[an].weeks[wi]++; }); return {agents:Object.values(amap), monthLabel:ml, numWeeks:numWeeks, year:detectedYear, month:detectedMonth}; } function handleFile(file){ if(!file)return; var rd=new FileReader(); rd.onload=function(e){ var res=procCSV(e.target.result); if(res){ var ei=months.findIndex(function(m){return m.label===res.monthLabel;}); if(ei>=0){ months[ei].agents=res.agents; months[ei].lastUpdated=new Date().toISOString(); if(res.numWeeks) months[ei].numWeeks=res.numWeeks; if(res.year) months[ei].year=res.year; if(res.month) months[ei].month=res.month; // Resize weekTargets to match actual weeks if(res.numWeeks && months[ei].weekTargets.length!==res.numWeeks){ var avg=months[ei].weekTargets.reduce(function(a,b){return a+b;},0)/months[ei].weekTargets.length; months[ei].weekTargets=[]; for(var i=0;i