Skip to content

Commit

Permalink
Implement GradeRegistrationCriteria in CsOrCp Validation #133. Also a…
Browse files Browse the repository at this point in the history
…dded some data to the RegistrationCriteriaSeed
  • Loading branch information
Xopabyteh committed Apr 14, 2024
1 parent 9fc63f6 commit 3bd76f0
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 20 deletions.
10 changes: 8 additions & 2 deletions DataLayer/Repositories/GradeDbRepository.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
namespace MensaGymnazium.IntranetGen3.DataLayer.Repositories;
using System.Linq.Expressions;
using MensaGymnazium.IntranetGen3.Model;

namespace MensaGymnazium.IntranetGen3.DataLayer.Repositories;

public partial class GradeDbRepository : IGradeRepository
{

protected override IEnumerable<Expression<Func<Grade, object>>> GetLoadReferences()
{
yield return g => g.RegistrationCriteria;
}
}
4 changes: 2 additions & 2 deletions DataLayer/Seeds/Core/GradeRegistrationCriteriaSeed.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ public override void SeedData()
new GradeRegistrationCriteria() { Id = (int) GradeEntry.Kvarta},
new GradeRegistrationCriteria() { Id = (int) GradeEntry.Kvinta},
new GradeRegistrationCriteria() { Id = (int) GradeEntry.Sexta},
new GradeRegistrationCriteria() { Id = (int) GradeEntry.Septima},
new GradeRegistrationCriteria() { Id = (int) GradeEntry.Oktava},
new GradeRegistrationCriteria() { Id = (int) GradeEntry.Septima, RequiresCspOrCpValidation = true, RequiredAmountOfDonatedHoursInAreaCspOrCp = 4},
new GradeRegistrationCriteria() { Id = (int) GradeEntry.Oktava, RequiresCspOrCpValidation = true, RequiredAmountOfDonatedHoursInAreaCspOrCp = 4},
};

Seed(For(data).PairBy(grade => grade.Id)); // TODO WithoutUpdate nebo bez AadGroupId?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace MensaGymnazium.IntranetGen3.Services.SubjectRegistration.ProgressValidation;

public record StudentCsOrCpRegistrationProgress(
public readonly record struct StudentCsOrCpRegistrationProgress(
bool DoesRequireCsOrCpValidation,
int AmountOfDonatedHoursInCsOrCp,
int RequiredAmountOfDonatedHoursInCsOrCp)
Expand All @@ -11,5 +11,7 @@ public record StudentCsOrCpRegistrationProgress(
/// </summary>
public bool DoesRequireCsOrCpValidation { get; init; } = DoesRequireCsOrCpValidation;

public bool MeetsCriteria => AmountOfDonatedHoursInCsOrCp == RequiredAmountOfDonatedHoursInCsOrCp;
public bool MeetsCriteria =>
(DoesRequireCsOrCpValidation)
&& (AmountOfDonatedHoursInCsOrCp == RequiredAmountOfDonatedHoursInCsOrCp);
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public async Task<StudentRegistrationProgress> GetRegistrationProgressOfStudentA

Contract.Requires<ArgumentNullException>(studentsRegistrations is not null);
Contract.Requires<ArgumentNullException>(futureGrade is not null);
Contract.Requires<ArgumentNullException>(futureGrade.RegistrationCriteria is not null);

var csOrCpProgress = GetCsOrCpRegistrationProgress(futureGrade, studentsRegistrations);

Expand All @@ -40,20 +41,22 @@ public async Task<StudentRegistrationProgress> GetRegistrationProgressOfStudentA
}

private StudentCsOrCpRegistrationProgress GetCsOrCpRegistrationProgress(
Grade forGrade, // Todo: Use the grade to determine the criteria
Grade forGrade,
List<StudentSubjectRegistration> forRegistrations)
{
static bool IsRegistrationWithinAreaCspOrCp(StudentSubjectRegistration registration)
=> registration.Subject.EducationalAreas.Any(area =>
EducationalArea.IsEntry(area, EducationalArea.Entry.HumanSociety)
|| EducationalArea.IsEntry(area, EducationalArea.Entry.HumanNature));

// Xopa Todo: Something like this?
//if (!forGrade.GradeRegistrationCriteria.RequiresCspOrCpValidation)
//{
// // Validation not needed here
// return new StudentCspOrCpRegistrationProgress(false, 0, 0);
//}
if (!forGrade.RegistrationCriteria.RequiresCspOrCpValidation)
{
// Validation not needed here
return new StudentCsOrCpRegistrationProgress()
{
DoesRequireCsOrCpValidation = false
};
}

// Calculate the sum of hours in those fields
var ammOfHoursInCsOrCp = forRegistrations
Expand All @@ -62,17 +65,13 @@ static bool IsRegistrationWithinAreaCspOrCp(StudentSubjectRegistration registrat
? total + reg.Subject.HoursPerWeek
: total);

// Xopa: Todo: Something like this?
//var requiredAmountOfDonatedHoursInCspOrCp =
// forGrade.GradeRegistrationCriteria.RequiredAmountOfDonatedHoursInAreaCspOrCp;
var requiredAmountOfDonatedHoursInCspOrCp =
forGrade.RegistrationCriteria.RequiredAmountOfDonatedHoursInAreaCspOrCp;

// Xopa: Todo: Change this random value with some configuration related to the grade
// For now just random magic value 4
var requiredAmountOfDonatedHoursInCsOrCp = 4;

return new StudentCsOrCpRegistrationProgress(
DoesRequireCsOrCpValidation: true,
AmountOfDonatedHoursInCsOrCp: ammOfHoursInCsOrCp,
RequiredAmountOfDonatedHoursInCsOrCp: requiredAmountOfDonatedHoursInCsOrCp);
RequiredAmountOfDonatedHoursInCsOrCp: requiredAmountOfDonatedHoursInCspOrCp);
}
}

0 comments on commit 3bd76f0

Please sign in to comment.