v313 UAT — Reservation ikut tarikh production, kemudian turutan request. Shortage sentiasa diberi warning. Draft pembelian meliputi semua demand aktif untuk material dipilih. Request Finance sedia ada perlu direkonsiliasi sebelum tambahan.
Foodie World

Foodie World

Project Management System

UAT FULL TEST · EXACT SUPPLIER LEAD TIME · CLEAN FULL UAT · v242 · LIVE UI CLEANUPAll static role buttons now use one permanent document-level router. Role rerenders do not replace the action listener.
PRODUCTION CALENDAR
CALENDAR · REQUEST DETAIL
Select an order/date from calendar to view status, owner and delay tracking.
Select a job from the calendar.
CALENDAR · DAILY SUMMARY
Today · activity recorded across the system
TOTAL ACTIVITY0
0events
SALES REQUEST0
PAYMENT REQUEST0
FINANCE APPROVAL0
PAYMENT PAID0
DELIVERY DATE SET0
MATERIAL ARRIVED0
PRODUCTION STARTED0
PRODUCTION COMPLETED0
Reschedule0
Cancelled0
No activity recorded for this date.
TOP MANAGEMENT · DAILY CONTROL
Daily exception control · active requests, risk, overdue and production delay accountability.
LIVE UAT · 0 REQUEST(S) IN DB
DEPARTMENT PERFORMANCE ANALYSIS
Task-level accountability from actual system timestamps, deadlines and workflow outcomes.
LIVE DATA
TODAY · PAYMENT CONTROL
Value requested by Inventory → value approved by Finance Planning → value paid by Account. Click a value to view the underlying orders.
TODAY
REQUESTED TODAY
Inventory OrderSales / RM OrderMaterialSupplierValueDate / TimeStatus
No payment request today.
ACTIVE REQUESTS · click a KPI above to filter
RequestProductionCurrent StageIssueOwnerVarianceAction
No delay / risk detected.
INVENTORY · INVENTORY DAILY DASHBOARD
Material readiness · incoming / critical stock · supplier outstanding · payment readiness
LIVE
MATERIAL READINESS0%BOM demand vs live available stock
CRITICAL MATERIALS0at / below minimum
WAITING APPROVAL0Inventory orders at Finance Planning
INCOMING TODAY0materials received today
OUTGOING TODAY0material issues today
AWAITING PAYMENT0payment items pending
RAW MATERIAL VALUE MOVEMENT · TODAY
OPENING · TOTAL RAW MATERIAL VALUERM 0.00total material value at start of day · source: Incoming / Outgoing Summary
+
INCOMINGRM 0.00received value
OUTGOINGRM 0.00issued to operation
=
CLOSING · 5:30 PMRM 0.00end-of-day material value
CRITICAL MATERIALS
Live stock control · Minimum Quantity is reference only on this dashboard and cannot be edited here · Days Left based on rolling 30-day material usage
0critical
Material Current Quantity Buffer Buffer Available Days Left Lead Time
OUTSTANDING SUPPLIER INVOICES
Outstanding by supplier · View pending invoices and invoice dates
TOTAL OUTSTANDING RM 0.00 0 invoice(s)
SupplierTotal Outstanding (RM)Details
OPERATION · OPERATION DAILY DASHBOARD
Production queue · output · active production · completion / change tracking
LIVE
READY TO PRODUCE0jobs in Operation queue
In Production0active jobs
Completed0production completed
PRODUCTION PERFORMANCE BY SKU
Source: Laporan Harian (Responses-Original) · Summary · Menunggu data API…
LIVE SOURCE
SKUProductTotal ProductionAverage Yield Total Production TodayProduction Yield Today Reject PackagingReject Raw (Kg)
Menunggu data yield daripada Google Sheets…
UAT AUDIT TRAIL
FINANCE PLANNING · REVIEW MATERIAL APPROVAL
INVOICE
/* v261 DASHBOARD CLICK CONTROLLER — deterministic after visual refactors */ document.addEventListener('click',function(e){ const master=e.target.closest?.('[data-master-dept-tab]'); if(master){ e.preventDefault();e.stopImmediatePropagation(); const tab=master.getAttribute('data-master-dept-tab'); masterDeptActiveTab=tab; document.querySelectorAll('[data-master-dept-tab]').forEach(x=>x.classList.toggle('active',x===master)); document.querySelectorAll('[data-master-dept-panel]').forEach(x=>x.classList.toggle('active',x.getAttribute('data-master-dept-panel')===tab)); try{ if(tab==='control'||tab==='inventory'||tab==='operation')renderMasterDepartmentDashboards(); if(tab==='control'){renderMgmtDelayControl();renderMgmtDelayAnalytics();renderMgmtLiveFlow();renderMasterCalendarDailySummary(masterSummaryDateKey());} if(tab==='calendar'){renderOneCalendar('master');renderMasterDrilldown();} }catch(err){console.error('v261 master tab',tab,err);} return false; } const dept=e.target.closest?.('[data-dept-analysis]'); if(dept){ e.preventDefault();e.stopImmediatePropagation(); mgmtDeptAnalysisView=dept.getAttribute('data-dept-analysis')||'SALES'; document.querySelectorAll('[data-dept-analysis]').forEach(x=>x.classList.toggle('active',x===dept)); try{renderMgmtDelayAnalytics();}catch(err){console.error('v261 department analysis',err);} return false; } const pay=e.target.closest?.('[data-mgmt-payment-view]'); if(pay){ e.preventDefault();e.stopImmediatePropagation(); mgmtPaymentView=pay.getAttribute('data-mgmt-payment-view')||'REQUESTED'; document.querySelectorAll('[data-mgmt-payment-view]').forEach(x=>x.classList.toggle('active',x===pay)); try{renderMgmtLiveFlow();}catch(err){console.error('v261 payment view',err);} return false; } },true); document.addEventListener('click',function(e){ const lab=e.target.closest?.('label[data-page-route],label[for^="pg-"]'); if(!lab)return; const id=lab.getAttribute('data-page-route')||lab.getAttribute('for'); if(!id)return; // Explicitly keep critical department routes live after UI changes. if(['pg-master','pg-acap-active','pg-acap-outstanding','pg-aty-calendar','pg-aty-queue', 'pg-laika-priority','pg-laika-invoices','pg-laika-outstanding','pg-faiz-queue','pg-faiz-manpower'].includes(id)){ e.preventDefault();e.stopImmediatePropagation(); activateUatPageByRadio(id); if(id==='pg-acap-outstanding')setTimeout(renderAcapSupplierOutstanding,0); if(id==='pg-laika-outstanding')setTimeout(renderLaikaOutstandingBalances,0); return false; } },true); /* v264 Inventory Ready For Production hard action */ document.addEventListener('click',function(e){ const btn=e.target.closest?.('.acapActionBtn[data-action="production"][data-id]'); if(!btn)return; e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); const id=btn.getAttribute('data-id'); return acapProceedProduction(id); },true);