School ICT Self Study
Absolutely Free Learning Opportunity! No Need to Spend Money! Study at Your Own Pace! Everything You Need is Right Here
UNLOCK YOUR DIGITAL FUTURE!
Free ICT Learning for Sri Lanka
🌍
|
📅 aSc Editor Pro No File
📖 Guide 📄 aSc Sample XML
📊 Schedule 0
📋 Class Details
👨‍🏫 Teachers & Data 0
🏫 Manage Classes 0
📈 Statistics
Lessons0
Total Periods0.0
Filter StatusAll Data
Max Periods:
Class ⬍Subject ⬍Assigned TeachersPer ⬍
Class Workload Overview
Class ⬍Class Teacher ⬍Subjects ⬍Total Periods ⬍Status
⚡ Tools:
⚡ Sorting:

1. Get Started: Upload your aSc XML file using the "Open XML" button.

📄 Download Sample XML File (Download real XML from aSc PC software for your Data)

📊 Matrix Tools (Manual Data Collection):
Use the Matrix PDF or Matrix CSV buttons to print empty sheets for teachers to manually write their subject allocations.
Note: These are for manual use only. Importing them will NOT update lesson periods.

2. Edit Schedule: In the 'Schedule' tab, click on any teacher cell to assign/remove teachers.

3. Manage Workload: Use the Right Sidebar to check teacher loads.

4. Export: Click 'Save XML' to download your file for the aSc Desktop App.

Teacher Workload 0
`; w.document.write(html); w.document.close(); setTimeout(() => w.print(), 500); }// --- CSV EXPORT (MATRIX) --- function exportAllocationMatrixCSV() { let gradeCols = []; for(let g=1; g<=13; g++) { gradeCols.push(`${g}A`,`${g}B`,`${g}C`); } let csvContent = "ID,Code,Class Tr,Main Subject," + gradeCols.join(",") + ",Total\n"; let teacherSubCounts = {}; data.forEach(r => { r.tids.forEach(tid => { if(!teacherSubCounts[tid]) teacherSubCounts[tid] = {}; if(!teacherSubCounts[tid][r.subject]) teacherSubCounts[tid][r.subject] = 0; teacherSubCounts[tid][r.subject] += r.periods; }); });// SORTING BY SHORT NAME (CODE) Object.keys(teachers).sort((a,b)=>(shorts[a]||"").localeCompare(shorts[b]||"")).forEach(id => { let code = shorts[id] || ""; let mainSub = ""; if(teacherSubCounts[id]) { let sorted = Object.keys(teacherSubCounts[id]).sort((a,b) => teacherSubCounts[id][b] - teacherSubCounts[id][a]); mainSub = sorted[0].replace(/,/g, " "); } let emptyCommas = Array(40).fill('').join(','); csvContent += `${id},${code},,${mainSub},${emptyCommas}\n`; });let blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); let url = URL.createObjectURL(blob); let link = document.createElement("a"); link.href = url; link.download = "allocation_matrix.csv"; document.body.appendChild(link); link.click(); document.body.removeChild(link); }// --- ORIGINAL CSV EXPORT (TEACHER DATA) --- function exportCSV() { let ctMap = {}; Object.keys(classes).forEach(cid => { if(classes[cid].tid) ctMap[classes[cid].tid] = classes[cid].name; }); let csvContent = "ID,Full Name,Short Code,Color,Class Teacher Of,Email,Mobile\n"; Object.keys(teachers).forEach(id => { let cleanName = teachers[id].replace(/,/g, " "); let ctClass = ctMap[id] || ""; csvContent += `${id},${cleanName},${shorts[id]},${colors[id]},${ctClass},,\n`; }); let blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); let url = URL.createObjectURL(blob); let link = document.createElement("a"); link.href = url; link.download = "teacher_data.csv"; document.body.appendChild(link); link.click(); document.body.removeChild(link); }// --- SMART CSV IMPORT --- function importCSV(input) { if(!input.files[0]) return; let r = new FileReader(); r.onload = evt => { let lines = evt.target.result.split(/\r\n|\n/); let count = 0; // Detect CSV Type let header = lines[0].toLowerCase(); let isMatrix = header.includes("main subject") || header.includes("grade"); let classMap = {}; Object.keys(classes).forEach(cid => classMap[classes[cid].name] = cid); for(let i=1; i= 2) { let id = parts[0]; if(teachers[id]) { if(isMatrix) { if(parts[1]) shorts[id] = parts[1]; let ctClass = parts[2]; if(ctClass && classMap[ctClass]) { let cid = classMap[ctClass]; classes[cid].tid = id; let cNode = xml.querySelector(`class[id="${cid}"]`); if(cNode) cNode.setAttribute('teacherid', id); } let tNode = xml.querySelector(`teacher[id="${id}"]`); if(tNode) { tNode.setAttribute('short', shorts[id]); } } else { teachers[id] = parts[1]; if(parts[2]) shorts[id] = parts[2]; if(parts[3]) colors[id] = parts[3]; let ctClass = parts[4]; let tNode = xml.querySelector(`teacher[id="${id}"]`); if(tNode) { tNode.setAttribute('name', teachers[id]); tNode.setAttribute('short', shorts[id]); tNode.setAttribute('color', colors[id]); } if(ctClass && classMap[ctClass]) { let cid = classMap[ctClass]; classes[cid].tid = id; let cNode = xml.querySelector(`class[id="${cid}"]`); if(cNode) cNode.setAttribute('teacherid', id); } } count++; } } } input.value = ''; refresh(); renderTeacherManager(); renderClassManager(); showToast(`Updated ${count} teachers!`); }; r.readAsText(input.files[0]); }
🔴 Lesson List
SIDE BUTTON ON
Sign In Register
×

👋 Welcome Back!

🚀
Ready to Learn?Pick up where you left off.
🔑
Forgot Password?Click the link below to reset.
📢
New FeaturesCheck out the new AI Voice tool.

Sign In

👤
🔒
or continue with
Google Facebook

Already have an account? Register Now

🖥️ View Desktop Version Switch to full website view.