This request covers —
Submit by the 20th of this month. WFM responds within 2 business days.
Shifts Per Week
⏱ How many per week?
Morning
0
Afternoon
0
Night
0
Preferred Shift Times
☀️ Select All That Work
Tap to select
Consecutive Off Days
📅 Prefer consecutive days off?
✅ Yes
❌ No
🤷 Any
Preferred Off Days
🗓 Which days off?
🏖 Weekends
📅 Mid-Week
🤷 Any
Sun
Mon
Tue
Wed
Thu
Fri
Sat
Special Requests
📝 Any Special Requests?
Review Your Request
📋 Schedule Request Summary
🔍 Full Details
✅ By submitting, your request will be sent to WFM. You'll be notified within 2 business days.
🎉
Request Submitted!
Your preference has been sent to WFM.
Reference: —
You'll receive a response within 2 business days.
Full Schedule Grid
🔄 Swap
🌴 Leave
✅ Attendance
📬 Swap Requests for You
🔄 New Swap Request
Shows colleagues working the same shift as you
My Swap History
🌴 New Leave Request
Leave Balance
My Leave History
My Attendance — March 2026
3
Present Days
100%
Rate
👥 Monitor
✅ Attendance
🔄 Swaps 0
🌴 Leaves
📊 Reports
📤 Upload
🗓️ Build
📜 Log
🔗 Sheets
Daily Operations
DAILY KPI
Extra break, meeting, permissions, and system issue forms
Today
0
Extra Break
0
Meetings
0
Permissions
0
System Issues
Daily KPI Forms
Extra Break
📋
Select a form type above to get started
📅 My KPI History
Last 5 days
Loading...
My Profile
KB
—
—
Today's Shift
Team
Break Usage Today
Loading…
Monthly Attendance
Loading…
Swap Request History
No swap history
Change PIN
Notifications
Schedule Published
When new schedule is ready
Swap Decision
Approval or rejection
Leave Decision
Leave request outcome
Coverage Alert
When team is understaffed
// ── Toggle announcement bar ────────────────────────────────────────
function toggleAnnBar(){
var bar=document.getElementById('u-ann-bar');
var showBtn=document.getElementById('u-ann-show');
if(!bar)return;
var hidden=bar.style.display==='none';
bar.style.display=hidden?'':('none');
if(showBtn)showBtn.style.display=hidden?'none':'block';
}
// ── Quick Swap from schedule grid ────────────────────────────────────
var _qs_date='',_qs_myShift='';
function openQuickSwap(date,shift){
_qs_date=date;_qs_myShift=shift;
var ol=document.getElementById('quickSwapOverlay');
if(!ol)return;
var myShiftEl=document.getElementById('qs-myShift');
var dateEl=document.getElementById('qs-date');
if(myShiftEl)myShiftEl.textContent=shift||'—';
if(dateEl)dateEl.textContent=date||'';
// Populate swap-with dropdown filtered by date
var sel=document.getElementById('qs-swWith');
if(sel){
sel.innerHTML='';
var idx=DATES.indexOf(date);
AGENTS.filter(function(a){
if(!me||a.n===me.n)return false;
if(!['agent','maker','checker'].includes(a.r))return false;
if(idx>=0){var s=a.sch[idx]||'OFF';if(s==='OFF'||s==='Leave'||s==='Sick')return false;}
return true;
}).forEach(function(a){
var sched=idx>=0?(a.sch[idx]||'OFF'):'?';
sel.innerHTML+='';
});
}
var reason=document.getElementById('qs-reason');if(reason)reason.value='';
ol.style.display='flex';
}
function closeQuickSwap(){
var ol=document.getElementById('quickSwapOverlay');if(ol)ol.style.display='none';
}
function submitQuickSwap(){
var wId=document.getElementById('qs-swWith').value;
if(!wId){if(typeof sp_showToast==='function')sp_showToast('Select a colleague','err');return;}
var ag=AGENTS.find(function(a){return a.id===wId;});
if(!ag)return;
var reason=document.getElementById('qs-reason').value||'Schedule swap';
var idx=DATES.indexOf(_qs_date);
var theirShift=idx>=0?(ag.sch[idx]||'OFF'):'?';
var entry={id:'SW'+(Date.now()%100000),from:me.n,to:ag.n,date:_qs_date,sA:_qs_myShift,sB:theirShift,reason:reason,status:'pending_peer',ts:new Date().toISOString()};
SWAPS.push(entry);
fetch(API,{method:'POST',body:JSON.stringify({action:'saveSwapRequest',id:entry.id,from:entry.from,to:entry.to,date:entry.date,fromShift:entry.sA,toShift:entry.sB,reason:entry.reason,ts:entry.ts}),headers:{'Content-Type':'text/plain'}})
.then(function(r){return r.json();}).then(function(res){if(res&&res.ok)setSy(true);else setSy(false);}).catch(function(){setSy(false);});
if(typeof logA==='function')logA('SWAP_REQUEST',me.n+' ↔ '+ag.n+' on '+_qs_date,'inf');
closeQuickSwap();
if(typeof sp_showToast==='function')sp_showToast('Swap request sent to '+ag.n,'ok');
else if(typeof showToast==='function')showToast('Swap request sent to '+ag.n,'ok');
}