more chnages

This commit is contained in:
Talhadeveloperr
2026-09-09 17:07:11 +05:00
parent a7bb2f3dae
commit 1c5b8f38c8
57 changed files with 147 additions and 31 deletions

View File

@@ -9,6 +9,7 @@ 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
from template_logger import log_error # noqa: E402
def _sessions_for_batch(sessions, batch_code):
@@ -23,17 +24,38 @@ def generate_student_wise_templates(sessions, data, output_dir):
batch = data["batches_by_code"].get(batch_code)
student_sessions = _sessions_for_batch(sessions, batch_code)
by_day_slot = {}
# A student can only be in one place at a time: each (day, slot)
# must resolve to exactly one session. If the schedule places more
# than one, that's a real scheduling error - log it instead of
# silently picking/overwriting one.
raw_by_day_slot = {}
for s in student_sessions:
for slot_index in s["slot_indices"]:
by_day_slot[(s["day"], slot_index)] = s
raw_by_day_slot.setdefault((s["day"], slot_index), []).append(s)
def cell_text(day, slot_index, by_day_slot=by_day_slot):
s = by_day_slot.get((day, slot_index))
if not s:
by_day_slot = {}
for (day, slot_index), entries in raw_by_day_slot.items():
if len(entries) > 1:
course_list = ", ".join(
f'{e["course_id"]} ({e["course_type"]}) with {e["instructor_name"]} in {e["room_id"]}'
for e in entries
)
log_error(
f"Student conflict: roll {roll_no} (batch {batch_code}) has "
f"{len(entries)} overlapping courses on {day} slot {slot_index}: {course_list}"
)
by_day_slot[(day, slot_index)] = entries[0]
def cell_text(day, slot_index, raw_by_day_slot=raw_by_day_slot):
entries = raw_by_day_slot.get((day, slot_index))
if not entries:
return ""
s = entries[0]
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"]}'
text = f'{s["course_name"]}{tag}\n{s["instructor_name"]}\n{s["room_id"]}'
if len(entries) > 1:
text = "CONFLICT!\n" + text
return text
subtitle = f'{student["student_name"]} - Batch {batch_code}'
if batch: