write master timetable to xlsx
This commit is contained in:
3 files changed
+37
-3
No files matched your search
@@ -555,4 +555,8 @@ def generateScheduleV3(
|
|||||||
with open(coursesDir, "w") as outfile:
|
with open(coursesDir, "w") as outfile:
|
||||||
json.dump(courses, outfile, indent=2)
|
json.dump(courses, outfile, indent=2)
|
||||||
|
|
||||||
|
# Save timetable to json
|
||||||
|
with open('./output/raw/json/timetable.json', 'w') as outfile:
|
||||||
|
json.dump(running, outfile, indent=2)
|
||||||
|
|
||||||
return (running, None)
|
return (running, None)
|
||||||
@@ -1,10 +1,36 @@
|
|||||||
#!/usr/bin/env python 3.11
|
#!/usr/bin/env python 3.11
|
||||||
from docx.shared import Inches
|
from docx.shared import Inches
|
||||||
from app.util.globals import flex
|
from app.util.globals import flex
|
||||||
|
import xlsxwriter
|
||||||
import docx
|
import docx
|
||||||
|
|
||||||
def putMasterTimetable(timetable: dict) -> None:
|
def putMasterTimetable(table: dict, output_dir: str='./output/final') -> None:
|
||||||
pass
|
|
||||||
|
workbook = xlsxwriter.Workbook(f'{output_dir}/master_timetable.xlsx')
|
||||||
|
worksheet = workbook.add_worksheet()
|
||||||
|
|
||||||
|
sem1Header = workbook.add_format({'bold': True, 'align': 'center', 'bg_color': '#91c5fa', 'border': 1})
|
||||||
|
sem2Header = workbook.add_format({'bold': True, 'align': 'center', 'bg_color': '#a2fa91', 'border': 1})
|
||||||
|
sem1Data = workbook.add_format({'bg_color': '#cee1f5', 'border': 1})
|
||||||
|
sem2Data = workbook.add_format({'bg_color': '#d8f7d2', 'border': 1})
|
||||||
|
worksheet.merge_range(0, 0, 0, len(table) * 2 - 1, 'Semester 1', sem1Header)
|
||||||
|
worksheet.merge_range(0, len(table) * 2, 0, (len(table) * 4) - 1, 'Semester 2', sem2Header)
|
||||||
|
|
||||||
|
tracker = 0
|
||||||
|
for i in range(0, len(table) * 4, 4):
|
||||||
|
tracker += 1
|
||||||
|
block, index = tracker, f'block{tracker}'
|
||||||
|
header = sem1Header if tracker <= len(table) / 2 else sem2Header
|
||||||
|
block = block if block <= len(table) / 2 else block - (len(table) // 2)
|
||||||
|
worksheet.merge_range(1, i, 1, i + 3, f'Block {block}', header)
|
||||||
|
|
||||||
|
row = 2
|
||||||
|
for course in table[index]:
|
||||||
|
style = sem1Data if tracker <= len(table) / 2 else sem2Data
|
||||||
|
worksheet.merge_range(row, i, row + 1, i + 3, f'{table[index][course]["Description"]}\n{course[:-2]}', style)
|
||||||
|
row += 2
|
||||||
|
|
||||||
|
workbook.close()
|
||||||
|
|
||||||
def putScheduleToWord(courses: dict, student: dict, output_dir: str='./output/final/student_schedules') -> None:
|
def putScheduleToWord(courses: dict, student: dict, output_dir: str='./output/final/student_schedules') -> None:
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,12 @@
|
|||||||
import eel
|
import eel
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
from app.util.convertRawData import putScheduleToWord, putMasterTimetable
|
||||||
from app.generator import generateScheduleV3
|
from app.generator import generateScheduleV3
|
||||||
from app.util.globals import Error
|
from app.util.globals import Error
|
||||||
from app.util.courses import getCourses, writeCoursesToCSV
|
from app.util.courses import getCourses, writeCoursesToCSV
|
||||||
from app.util.students import getStudents, writeStudentsToCSV
|
from app.util.students import getStudents, writeStudentsToCSV
|
||||||
from app.util.convertRawData import putScheduleToWord, putMasterTimetable
|
|
||||||
|
|
||||||
eel.init('template')
|
eel.init('template')
|
||||||
|
|
||||||
@@ -92,6 +93,9 @@ def start(
|
|||||||
writeStudentsToCSV(students, output_dir='./output/raw/csv/students.csv')
|
writeStudentsToCSV(students, output_dir='./output/raw/csv/students.csv')
|
||||||
writeCoursesToCSV(courses, output_dir='./output/raw/csv/courses.csv')
|
writeCoursesToCSV(courses, output_dir='./output/raw/csv/courses.csv')
|
||||||
|
|
||||||
|
eel.post_data('Writing master timetable to .xlsx file...')
|
||||||
|
putMasterTimetable(master_timetable, './output/final')
|
||||||
|
|
||||||
eel.post_data('Writing timetables to .docx files...')
|
eel.post_data('Writing timetables to .docx files...')
|
||||||
if save_student_schedules:
|
if save_student_schedules:
|
||||||
for student in students:
|
for student in students:
|
||||||
|
|||||||
Reference in new issue
Block a user