"""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