46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
#!/usr/bin/env python 3.11
|
|
from docx.shared import Inches
|
|
from app.util.globals import flex
|
|
import docx
|
|
|
|
def putMasterTimetable(timetable: dict) -> None:
|
|
pass
|
|
|
|
def putScheduleToWord(courses: dict, student: dict, output_dir: str='../../output/final/student_schedules') -> None:
|
|
# create an instance of a word doc.
|
|
doc = docx.Document()
|
|
|
|
doc.add_heading(f'Schedule for Student {student["Pupil #"]}')
|
|
|
|
# Create a table object
|
|
table = doc.add_table(rows=1, cols=3)
|
|
table.autofit = True
|
|
table.style = 'Colorful List'
|
|
|
|
# course name + (code) | block | semester
|
|
row = table.rows[0].cells
|
|
row[0].text = 'Course'
|
|
row[1].text = 'Block'
|
|
row[2].text = 'Sem.'
|
|
|
|
table.columns[0].width = Inches(3.5)
|
|
table.columns[1].width = Inches(0.75)
|
|
table.columns[2].width = Inches(0.75)
|
|
|
|
for block in student['schedule']:
|
|
courseCode = student["schedule"][block][0]
|
|
if courseCode in flex: courseName = 'Study'
|
|
else: courseName = courses[courseCode[:-2]]["Description"]
|
|
blockNum = int(block.split('block')[1])
|
|
semester = 2 if blockNum > 5 else 1
|
|
if blockNum > (len(student["schedule"])/2): blockNum -= (len(student["schedule"])/2)
|
|
row = table.add_row().cells
|
|
row[0].text = f'{courseName}\n({courseCode})'
|
|
row[1].text = str(blockNum)
|
|
row[2].text = str(semester)
|
|
|
|
for row in table.rows:
|
|
row.height = Inches(0.75)
|
|
|
|
doc.save(f'{output_dir}/{student["Pupil #"]}_schedule.docx')
|