From 9a038260514f6fadf4daed6e8a0f0277f2d36c71 Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Wed, 16 Nov 2022 17:13:08 -0800 Subject: [PATCH] write master timetable to xlsx --- app/generator.py | 4 ++++ app/util/convertRawData.py | 30 ++++++++++++++++++++++++++++-- main.py | 6 +++++- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/app/generator.py b/app/generator.py index 1621b9b..ba883c0 100644 --- a/app/generator.py +++ b/app/generator.py @@ -555,4 +555,8 @@ def generateScheduleV3( with open(coursesDir, "w") as outfile: 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) diff --git a/app/util/convertRawData.py b/app/util/convertRawData.py index 389ba47..b39f8f8 100644 --- a/app/util/convertRawData.py +++ b/app/util/convertRawData.py @@ -1,10 +1,36 @@ #!/usr/bin/env python 3.11 from docx.shared import Inches from app.util.globals import flex +import xlsxwriter import docx -def putMasterTimetable(timetable: dict) -> None: - pass +def putMasterTimetable(table: dict, output_dir: str='./output/final') -> None: + + 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: diff --git a/main.py b/main.py index 64f2658..1b04bd8 100755 --- a/main.py +++ b/main.py @@ -2,11 +2,12 @@ import eel import os import json + +from app.util.convertRawData import putScheduleToWord, putMasterTimetable from app.generator import generateScheduleV3 from app.util.globals import Error from app.util.courses import getCourses, writeCoursesToCSV from app.util.students import getStudents, writeStudentsToCSV -from app.util.convertRawData import putScheduleToWord, putMasterTimetable eel.init('template') @@ -92,6 +93,9 @@ def start( writeStudentsToCSV(students, output_dir='./output/raw/csv/students.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...') if save_student_schedules: for student in students: