Skip to content

Comments

VPR-60 - Instructor Evaluation data#111

Open
rlorenzo wants to merge 11 commits intomainfrom
VPR-60-instructor-eval-data
Open

VPR-60 - Instructor Evaluation data#111
rlorenzo wants to merge 11 commits intomainfrom
VPR-60-instructor-eval-data

Conversation

@rlorenzo
Copy link
Contributor

No description provided.

Copilot AI review requested due to automatic review settings February 13, 2026 20:02
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds EvalHarvest-backed instructor evaluation visibility/editing to the Effort course detail experience, alongside new course-effort endpoints and UI refactors to support per-course effort management.

Changes:

  • Introduces EvalHarvest EF DbContext + service layer to read CERE evaluation data and manage ad-hoc evaluation entries.
  • Adds new Effort Courses API endpoints for course effort records, possible instructors, and evaluations (create/update/delete).
  • Updates Vue Effort UI to support course detail effort/evaluation tabs, grouped course lists, and shared CSS extraction.

Reviewed changes

Copilot reviewed 46 out of 46 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
web/appsettings.Test.json Adds EvalHarvest connection string key for test config.
web/appsettings.Production.json Adds EvalHarvest connection string key for prod config.
web/appsettings.Development.json Adds EvalHarvest connection string key for dev config.
web/Program.cs Registers EvalHarvest DbContext and service in DI.
web/Areas/Effort/Services/IEvalHarvestService.cs Defines EvalHarvest service contract for evaluations + ad-hoc CRUD.
web/Areas/Effort/Services/ICourseService.cs Adds course-effort and possible-instructors service methods.
web/Areas/Effort/Services/EvalHarvestService.cs Implements EvalHarvest evaluation lookup + ad-hoc create/update/delete.
web/Areas/Effort/Services/CourseService.cs Injects classification service into DTO mapping; implements new course-effort methods.
web/Areas/Effort/Models/Entities/EhQuestion.cs Adds EvalHarvest question entity mapping.
web/Areas/Effort/Models/Entities/EhQuant.cs Adds EvalHarvest quant entity mapping.
web/Areas/Effort/Models/Entities/EhPerson.cs Adds EvalHarvest person entity mapping.
web/Areas/Effort/Models/Entities/EhCourse.cs Adds EvalHarvest course entity mapping.
web/Areas/Effort/Models/DTOs/Responses/PossibleCourseInstructorsDto.cs Adds API response DTO for grouped instructor options.
web/Areas/Effort/Models/DTOs/Responses/CourseEvaluationStatusDto.cs Adds API response DTO for course evaluation matrix.
web/Areas/Effort/Models/DTOs/Responses/CourseEffortRecordDto.cs Adds API DTOs for course-effort record listing + wrapper response.
web/Areas/Effort/Models/DTOs/Responses/AdHocEvalResultDto.cs Adds result DTO for ad-hoc evaluation operations.
web/Areas/Effort/Models/DTOs/Requests/UpdateAdHocEvalRequest.cs Adds request DTOs for ad-hoc evaluation create/update.
web/Areas/Effort/Data/EvalHarvestDbContext.cs Adds DbContext + mappings for EvalHarvest tables.
web/Areas/Effort/Controllers/CoursesController.cs Adds endpoints for course effort, possible instructors, and evaluations CRUD.
web/Areas/Effort/Constants/EffortPermissions.cs Adds Eval permission constant used by Effort UI/API.
test/Effort/CoursesControllerTests.cs Adds controller tests covering the new endpoints.
test/Effort/CourseServiceTests.cs Updates tests to satisfy new CourseService constructor dependency.
VueApp/src/store/UserStore.ts Tightens permission typing and login check strictness.
VueApp/src/Effort/types/index.ts Re-exports new Effort course-effort and evaluation types.
VueApp/src/Effort/types/evaluation-types.ts Adds frontend types for evaluation matrix + ad-hoc requests/results.
VueApp/src/Effort/types/course-effort-types.ts Adds frontend types for course-effort endpoints.
VueApp/src/Effort/services/course-service.ts Adds frontend API calls for course effort and evaluations.
VueApp/src/Effort/router/routes.ts Extends CourseDetail route to support optional effort/evaluation tab param.
VueApp/src/Effort/router/index.ts Loads Eval permissions in navigation guard to enable evaluation UI.
VueApp/src/Effort/pages/InstructorList.vue Extracts shared dept table CSS into shared stylesheet.
VueApp/src/Effort/pages/CourseList.vue Groups courses by dept, adds resident course section, and reuses shared CSS.
VueApp/src/Effort/pages/CourseDetail.vue Adds effort/evaluation tab UI, loads effort records + evaluation data, adds dialogs.
VueApp/src/Effort/effort-record-table.css Extracts shared effort table styling into a global stylesheet.
VueApp/src/Effort/effort-forms.css Adjusts form spacing rules for hints/counters.
VueApp/src/Effort/effort-dialogs.css Adds shared dialog sizing utility classes.
VueApp/src/Effort/dept-table.css Adds shared grouped-by-dept table styles.
VueApp/src/Effort/composables/use-effort-permissions.ts Adds eval + create-effort permission helpers.
VueApp/src/Effort/components/EvaluationStatusMatrix.vue Adds evaluation status matrix table component.
VueApp/src/Effort/components/EvalStatusCell.vue Adds per-cell evaluation display/actions component.
VueApp/src/Effort/components/EffortRecordsTable.vue Reuses shared effort-record table styles and tweaks icon sizing.
VueApp/src/Effort/components/EffortRecordsDisplay.vue Reuses shared effort-record table styles and tweaks icon sizing.
VueApp/src/Effort/components/EditEvaluationDialog.vue Adds dialog for ad-hoc evaluation entry/edit with computed stats.
VueApp/src/Effort/components/CourseEffortTable.vue Adds per-course grouped effort table component.
VueApp/src/Effort/components/AddCourseEffortDialog.vue Adds dialog to create effort records from course detail page.
.vscode/settings.json Adds a VS Code chat setting.
.oxlintrc.json Adds UserStore to legacy filename-case override list.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 46 out of 46 changed files in this pull request and generated 4 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 47 out of 47 changed files in this pull request and generated 2 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 47 out of 47 changed files in this pull request and generated 4 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 47 out of 47 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 47 out of 47 changed files in this pull request and generated 7 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 47 out of 47 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 47 out of 47 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@rlorenzo rlorenzo requested a review from bsedwards February 14, 2026 08:29
@rlorenzo rlorenzo force-pushed the VPR-67-r-course-notes branch from fc72cbd to 3605da6 Compare February 20, 2026 18:33
Base automatically changed from VPR-67-r-course-notes to main February 20, 2026 18:34
- Add/edit/delete effort records from course detail page
  with per-record permission checks
- Instructor search grouped by course instructors vs all
  available, with type-ahead filtering
- Redesign course list with department table, search, and
  pagination
- Guard against stale effort data on course navigation and
  align add-effort UI gate with backend CreateEffort/
  VerifyEffort permissions
- Show evaluation status matrix in a tabbed view alongside effort                                                                                                                  records, with CERE harvest data and ad-hoc entry support
- Add EvalHarvest database integration (EhCourse, EhPerson, EhQuant
  entities) with read-only CERE + CRUD for ad-hoc evaluations
- New permissions: ViewEvalResults, EditAdHocEval
- Fix course list dialogs stacking when switching between Import
  from Banner and Manual Entry
- Replace manual mean/SD/N inputs with server-side derivation
  in ApplyRatingCounts; remove those fields from API requests
- Redesign eval dialog to horizontal grid matching legacy layout
  with consolidated validation instead of per-field error chips
- Always show tabs on course detail; sync active tab to URL
- Eval tab label now shows instructor coverage ratio (e.g. 2/3)
…ce column

- Show CERE redirect banner (Faculty Eval Viewer link) instead of tabs
  when harvest data exists; show tabs only for ad-hoc eval courses
- Remove "Source" column and Ad-Hoc/CERE labels from evaluation matrix
- Add ARIA roles, labels, and live regions across effort/eval dialogs
- Expand CoursesController test coverage with shared helpers and new
  tests for GetCourseEffort, GetPossibleInstructors, and edge cases
- Reject ad-hoc evals for instructors without effort on the course
- Skip redundant eval permission fetch if already loaded
- Use HashSet/Dictionary for instructor lookup performance
- Allow guest instructors in course instructor list
…rvice tests

- Prevent duplicate API calls when rapid navigation triggers
  concurrent beforeEach guards
- Add unit tests for ApplyRatingCounts (mean, SD, percentages),
  IsCereBlocked, and HasAnyResponses
…dex lookups

- Add FacilitatorEvalId==0 filter to evalData query to exclude
  facilitator evaluations from instructor course eval status
- Pre-index ehCourses and evalData into dictionary/lookup to
  eliminate O(n²) linear searches in nested loop
- Reset eval permissions latch on failed fetch so navigation retries
- Cap ad-hoc eval rating counts at 500 to prevent data-entry errors
- Add unit tests for GetCourseEffortAsync and
  GetPossibleInstructorsForCourseAsync
@rlorenzo rlorenzo force-pushed the VPR-60-instructor-eval-data branch from be7fdbe to fcf8e4c Compare February 20, 2026 21:52
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