Skip to content

Programme-scoped academic admin pages, and BL slots that show what they clear - #293

Merged
vikrantwiz02 merged 1 commit into
FusionIIIT:acad-mainfrom
vikrantwiz02:acad-roles-scoping
Aug 18, 2026
Merged

Programme-scoped academic admin pages, and BL slots that show what they clear#293
vikrantwiz02 merged 1 commit into
FusionIIIT:acad-mainfrom
vikrantwiz02:acad-roles-scoping

Conversation

@vikrantwiz02

@vikrantwiz02 vikrantwiz02 commented Aug 18, 2026

Copy link
Copy Markdown
Member

Frontend half of the Acad UG / Acad PG / Acad Ph.D. roles. Needs FusionIIIT/Fusion#1957, which does the scoping the UI relies on.

Programme-scoped roles

src/ui/nav/roles.js gains PROGRAMME_ADMIN_ROLES and programmesForRole() as the single place that maps a role to the levels it administers. From there:

  • the three roles reach the academic, examination and curriculum pages acadadmin reaches, wherever the backend scopes the data behind them
  • a programme dropdown is filtered to the levels the role administers, and locked when only one remains (Allocate Courses, Generate Student List, View Roll List, PhD Course Requests, Submit Grades)
  • pages that only apply to one level are hidden from the others: UG loses Thesis & Course Requests and the Registration Type dropdown (UG has only courses), PG/Ph.D. lose the UG-only Swayam / Add / Drop / Replacement / Verify Registration pages
  • acadadmin is unchanged and still sees everything

BL slots

A backlog course may be cleared by retaking it, not only by one of the slot's stand-ins, so the slot's own source stays selectable while still being excluded from every other slot's dropdown. A source already being cleared through another slot is left out entirely, matching the rule the backend now enforces.

Both request tables and the pre-submit preview name what a registration clears — "Replaces CS8007 · Improvement" or "Retake · Improvement" — from source_course / registration_type, which the API already returned and neither table rendered. The preview also stops printing "Invalid" for a retake: it looked the chosen course up in the slot's list, and a retaken course is not in it.

Also

  • a regression test asserts that for all nine roles no nav group repeats its own child's label, which is what the duplicate "Batches" entry was
  • dist is excluded from eslint: the advisory CI step runs after npm run build and was linting the 4.9 MB bundle, which left run 32101147557 in that step for four and a half hours after tests and build had passed (also in Commit the lockfile so CI can actually run #292, whichever lands first)

Checks

409 tests pass (32 in blSlot, 9 of them new), lint:strict clean, build clean.

…ears

Acad UG, Acad PG and Acad Ph.D. join the role vocabulary as programme-level
admins. Where the backend scopes its data, those roles now reach the same pages
acadadmin does; where a page asks which programme to act on, the dropdown is
filtered to the one they administer and locked when only one choice remains.
Pages that only make sense for one level are hidden from the others: UG loses
Thesis & Course Requests, and PG/Ph.D. lose the UG-only course-change pages.
acadadmin keeps everything it had.

BL slots gain the missing case: a course may be cleared by retaking it, so the
slot's own source stays selectable while remaining excluded from every other
slot. The tables that report a request now name what it clears -- "Replaces
CS8007 - Improvement" or "Retake - Improvement" -- and the pre-submit preview
resolves a retake instead of printing "Invalid", since the retaken course is
not in the slot's own course list.

A regression test asserts no nav group repeats its own child's label for any of
the nine roles, which is what the duplicate "Batches" entry was.
@vikrantwiz02
vikrantwiz02 merged commit 14d0482 into FusionIIIT:acad-main Aug 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant