diff --git a/client/src/app/components/constraint-summary-view/constraint-summary.component.html b/client/src/app/components/constraint-summary-view/constraint-summary.component.html
index cf9b708d..abcc9dcb 100644
--- a/client/src/app/components/constraint-summary-view/constraint-summary.component.html
+++ b/client/src/app/components/constraint-summary-view/constraint-summary.component.html
@@ -13,6 +13,18 @@
Constraint Summary
Add Constraint
+
+ @if (isCompanyGreedyMode) {
+
+
Greedy Matching Strategy
+
+ The system builds matches step by step by selecting the best currently available option. Participants are
+ organized into priority tiers, and higher-priority candidates are matched first. This makes the process fast
+ and efficient for larger datasets, but because each decision is made locally, the final allocation may not
+ always be the globally optimal solution.
+
+
+ }
@if (constraintWrappers.length) {
diff --git a/client/src/app/components/constraint-summary-view/constraint-summary.component.scss b/client/src/app/components/constraint-summary-view/constraint-summary.component.scss
index 9d45b299..fcb64a61 100644
--- a/client/src/app/components/constraint-summary-view/constraint-summary.component.scss
+++ b/client/src/app/components/constraint-summary-view/constraint-summary.component.scss
@@ -39,3 +39,12 @@ th {
}
}
}
+
+.greedy-strategy-note {
+ padding: 0.875rem 1rem;
+ border: 1px solid $border-color;
+ border-radius: 0.5rem;
+ background: $accent-color-light;
+ color: $text-color;
+ line-height: 1.5;
+}
\ No newline at end of file
diff --git a/client/src/app/components/constraint-summary-view/constraint-summary.component.ts b/client/src/app/components/constraint-summary-view/constraint-summary.component.ts
index 54214123..0b5a8c85 100644
--- a/client/src/app/components/constraint-summary-view/constraint-summary.component.ts
+++ b/client/src/app/components/constraint-summary-view/constraint-summary.component.ts
@@ -24,8 +24,7 @@ import { ToastsService } from 'src/app/shared/services/toasts.service';
import { StudentSortService } from 'src/app/shared/services/student-sort.service';
import { ConstraintBuilderNationalityComponent } from '../constraint-builder-nationality/constraint-builder-nationality.component';
import { Subscription } from 'rxjs';
-import { MatchingRouterService } from 'src/app/shared/matching/matching-router.service';
-import { CourseIterationsService } from 'src/app/shared/data/course-iteration.service';
+import { MatchingMode, MatchingRouterService } from 'src/app/shared/matching/matching-router.service';import { CourseIterationsService } from 'src/app/shared/data/course-iteration.service';
@Component({
selector: 'app-constraint-summary',
@@ -48,6 +47,7 @@ export class ConstraintSummaryComponent implements OverlayComponentData, OnInit,
constraintWrappers: ConstraintWrapper[] = [];
projects: Project[] = [];
+ matchingMode: MatchingMode;
private subscription: Subscription;
@@ -69,6 +69,13 @@ export class ConstraintSummaryComponent implements OverlayComponentData, OnInit,
this.constraintWrappers = constraintWrappers;
});
this.projects = this.projectsService.getProjects();
+ this.matchingMode = this.matchingRouterService.getMatchingMode({
+ students: this.studentsService.getStudents(),
+ projects: this.projects,
+ constraintWrappers: this.constraintWrappers,
+ locks: this.lockedStudentsService.getLocks(),
+ courseIteration: this.courseIterationsService.getCourseIteration(),
+ });
}
ngOnDestroy(): void {
@@ -120,4 +127,8 @@ export class ConstraintSummaryComponent implements OverlayComponentData, OnInit,
this.constraintsService.setActive(id, active);
this.constraintWrappers = this.constraintsService.getConstraints();
}
+
+ get isCompanyGreedyMode(): boolean {
+ return this.matchingMode === 'company-greedy';
+ }
}