[Backend][Populations] Don't filter population's students' credits and enrollments by start date by default

This commit is contained in:
Aaro Koivukangas
2026-07-26 22:02:52 +03:00
parent 2672ac8b63
commit 6115357a7c
3 changed files with 32 additions and 7 deletions
+12 -2
View File
@@ -150,8 +150,9 @@ router.get<never, CanError<PopulationstatisticsResBody>, PopulationstatisticsReq
const studyRights = [programme]
const tagMap = await getStudentTagMap(studyRights, studentNumbers, userId)
const filterCreditsAndEnrollmentsByDate = false
const result = await statisticsOf(studentNumbers, studyRights, tagMap, startDate)
const result = await statisticsOf(studentNumbers, studyRights, tagMap, filterCreditsAndEnrollmentsByDate, startDate)
const processed = obfuscateStuff({
result,
@@ -212,10 +213,12 @@ router.get<
const studyRights = []
const tagMap = await getStudentTagMap(studyRights, studentNumbers, userId)
const filterCreditsAndEnrollmentsByDate = true
const result = await statisticsOf(
studentNumbers,
studyRights,
tagMap,
filterCreditsAndEnrollmentsByDate,
startDate?.toISOString(),
endDate?.toISOString()
)
@@ -251,12 +254,19 @@ router.post<never, CanError<GetCustomPopulationResBody>, CustomPopulationQuery>(
const studyRights = [studyProgrammeCode].filter(value => value !== undefined)
const tagMap = await getStudentTagMap(studyRights, filteredStudentNumbers, userId)
const filterCreditsAndEnrollmentsByDate = false
const { startDate } = tags?.year
? parseDateRangeFromParams({ semesters: ['FALL', 'SPRING'], years: [tags?.year] })
: { startDate: undefined }
const result = await statisticsOf(filteredStudentNumbers, studyRights, tagMap, startDate)
const result = await statisticsOf(
filteredStudentNumbers,
studyRights,
tagMap,
filterCreditsAndEnrollmentsByDate,
startDate
)
const resultWithStudyProgramme = { ...result, studyProgramme: tags?.studyProgramme }
const discardedStudentNumbers = difference(students, filteredStudentNumbers)
@@ -30,18 +30,33 @@ export const statisticsOf = async (
studentNumbers: string[],
studyRights: string[],
tagMap: Map<string, StudentTags[]>,
filterByDates: boolean,
startDate?: string,
endDate?: string
) => {
const defaultStartDate = new Date(1900, 0, 1).toISOString()
const defaultEndDate = new Date(new Date().getFullYear() + 1, 0, 1).toISOString()
const code = studyRights[0] ?? ''
const mockedStartDate = startDate ?? new Date(1900, 0, 1).toISOString()
const mockedEndDate = endDate ?? new Date(new Date().getFullYear(), 0, 1).toISOString()
const mockedStartDate = startDate ?? defaultStartDate
const mockedEndDate = endDate ?? defaultEndDate
const [students, enrollments, credits, degreeProgrammeType, criteria, studyRightElementsForStudyRight] =
await Promise.all([
getStudents(studentNumbers),
getEnrollments(studentNumbers, mockedStartDate, mockedEndDate),
getCredits(studentNumbers, mockedStartDate, mockedEndDate),
// NOTE: If filterByDates is set, use default values for filtering credits and enrollments
getEnrollments(
studentNumbers,
filterByDates ? mockedStartDate : defaultStartDate,
filterByDates ? mockedEndDate : defaultEndDate
),
getCredits(
studentNumbers,
filterByDates ? mockedStartDate : defaultStartDate,
filterByDates ? mockedEndDate : defaultEndDate
),
getDegreeProgrammeType(code),
getCriteria(code),
getStudyRightElementsForStudyRight(studentNumbers, code),
+1 -1
View File
@@ -56,7 +56,7 @@ export const getStudentTotalCredits = (
return student.courses
.filter(course => !course.isStudyModuleCredit && validCreditTypes.includes(course.credittypecode))
.reduce((a, b) => a + b.credits, 0)
.reduce((acc, studentCourse) => acc + studentCourse.credits, 0)
}
const getGradedCourses = (student: FormattedStudent, includeTransferredCredits = true) =>