Files
timetable/templates/batch-wise/batch_wise_template.py
Talhadeveloperr a7bb2f3dae initial project
2026-09-09 17:00:54 +05:00

50 lines
1.7 KiB
Python

"""Renders one timetable grid per batch."""
import sys
import os
_ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..")
sys.path.insert(0, os.path.join(_ROOT, "app"))
sys.path.insert(0, os.path.join(_ROOT, "controller"))
from xlsx_grid_helper import build_grid_sheet, new_workbook, save_workbook # noqa: E402
from template_controller import TIME_SLOTS as GRID_TIME_SLOTS # noqa: E402
def _sessions_for_batch(sessions, batch_code):
return [s for s in sessions if batch_code in s["batch_codes"]]
def generate_batch_wise_templates(sessions, data, output_dir):
written = []
for batch in data["batches"]:
batch_code = batch["batch_code"]
batch_sessions = _sessions_for_batch(sessions, batch_code)
by_day_slot = {}
for s in batch_sessions:
for slot_index in s["slot_indices"]:
by_day_slot[(s["day"], slot_index)] = s
def cell_text(day, slot_index, by_day_slot=by_day_slot):
s = by_day_slot.get((day, slot_index))
if not s:
return ""
tag = " (Lab)" if s["course_type"] == "lab" else (" (General)" if s["is_general"] else "")
return f'{s["course_name"]}{tag}\n{s["instructor_name"]}\n{s["room_id"]}'
wb = new_workbook()
ws = wb.active
subtitle = f'{batch["department"]} - {batch["program"]} - Session {batch["session"]}'
build_grid_sheet(
ws,
title=f"Batch {batch_code}",
subtitle=subtitle,
time_slots=GRID_TIME_SLOTS,
sessions_by_day_slot=by_day_slot,
cell_text_fn=cell_text,
)
path = save_workbook(wb, output_dir, f"{batch_code}.xlsx")
written.append(path)
return written