/* ============================================================ ZENITH — Admin (Open Ai Pvt Ltd) - Overview: institute KPIs, papers, classes - Batch & Release (SRS 3.1): Excel/CSV parser → staged "Hidden" records → Saturday-night CRON flips them to "Published", pushing Z-Scores & Island Ranks to student dashboards. ============================================================ */ function AdminOverview() { const { lang } = useApp(); const A = window.ZDATA.admin; const t = (en, si) => tx(lang, en, si); const statusTone = s => ({ Active: "green", Released: "blue", Published: "green", Marking: "amber", Draft: "grey", Archived: "grey" }[s] || "grey"); const [papers, setPapers] = useState(A.papers); const [building, setBuilding] = useState(false); const [viewing, setViewing] = useState(null); // examId currently open in the paper viewer return (
{t("Papers", "ප්රශ්න පත්ර")}
| {t("Paper", "පත්රය")} | {t("Sat", "ලියූ")} | {t("Marking progress", "ලකුණු ප්රගතිය")} | {t("Avg / 200", "සාමා. / 200")} | {t("Status", "තත්ත්වය")} |
|---|---|---|---|---|
| {p.title} | {p.sat} | {p.avg} |
|
{t("Classes", "පන්ති")}
{c.students} {t("students", "සිසුන්")} · {c.teacher}
{t("Step 1 · Batch result upload", "පියවර 1 · කාණ්ඩ ප්රතිඵල උඩුගත")}
.xlsx · .csv{t("Upload the offline-calculated file mapping System IDs to their Z-Score and Island Rank. The parser stages records in a hidden state.", "පද්ධති හැඳුනුම් ඔවුන්ගේ Z අගය හා දිවයින් ශ්රේණියට සම්බන්ධ කරන නොබැඳිව ගණනය කළ ගොනුව උඩුගත කරන්න. විග්රහකය වාර්තා සැඟවුණු තත්ත්වයක තබයි.")}
{t("Drop your .xlsx / .csv here, or click to browse", "ඔබගේ .xlsx / .csv මෙහි දමන්න, හෝ ක්ලික් කරන්න")}
{t("Columns: System ID · Z-Score · Island Rank · District Rank", "තීරු: පද්ධති හැඳුනුම · Z අගය · දිවයින් ශ්රේණිය · දිස්ත්රික් ශ්රේණිය")}
onFile(e.target.files)} />{t("Step 2 · Staged records", "පියවර 2 · staged වාර්තා")}
{published ? t("Now visible on student dashboards.", "දැන් සිසු උපකරණ පුවරු මත දෘශ්යමානයි.") : t("Invisible to students until release.", "නිකුත් වන තුරු සිසුන්ට නොපෙනේ.")}
| {t("System ID", "පද්ධති හැඳුනුම")} | {t("Z-Score", "Z අගය")} | {t("Island Rank", "දිවයින් ශ්රේණිය")} | {t("District Rank", "දිස්ත්රික් ශ්රේණිය")} | {t("State", "තත්ත්වය")} |
|---|---|---|---|---|
| {r.sysId} | {r.z.toFixed(2)} | #{r.islandRank.toLocaleString()} | #{r.districtRank} | {r.state === "Published" ? t("Published", "නිකුත්") : t("Hidden", "සැඟවුණු")} |
{t("Step 3 · Scheduled publishing protocol", "පියවර 3 · සැලසුම් කළ ප්රකාශන ක්රමවේදය")}
{t("A server-side CRON job (node-cron / Celery) runs every Saturday at 9:00 PM, flipping all staged records from Hidden to Published and pushing them to student dashboards at once.", "සේවාදායක CRON කාර්යයක් (node-cron / Celery) සෑම සෙනසුරාදාම රාත්රී 9.00ට ක්රියාත්මක වී, සියලු staged වාර්තා Hidden සිට Published වෙත මාරු කර එකවර සිසු උපකරණ පුවරු වෙත යවයි.")}