public async Task <ActionResult <List <SchoolYearsModel> > > GetSchoolYears() { return(await _schoolYearsService.Get()); }
public async Task GenerateLetters() { var students = await _studentAbsencesForEmailService.GetAbsencesByStudent(); var currentSchoolYear = (await _schoolYearService.Get()).FirstOrDefault().SchoolYear; // If a student doesn't have more than 2 absences it should be ignored foreach (var student in students) { var letters = await _queries.GetLettersByStudentId(student.StudentUniqueId); var Day3Letter = letters .Where(x => x.AttendanceLetterTypeId == AttendanceLetterTypeEnum.Day3Letter.Value) .OrderByDescending(x => x.LastAbsence) .FirstOrDefault(); var Day5Letter = letters .Where(x => x.AttendanceLetterTypeId == AttendanceLetterTypeEnum.Day5Letter.Value) .OrderByDescending(x => x.LastAbsence) .FirstOrDefault(); var Day10Letter = letters .Where(x => x.AttendanceLetterTypeId == AttendanceLetterTypeEnum.Day10Letter.Value) .OrderByDescending(x => x.LastAbsence) .FirstOrDefault(); bool create3DayLetter = false, create5DayLetter = false, create10DayLetter = false; string Day3Period = "", Day5Period = "", Day10Period = ""; foreach (var period in student.Periods) { if (create10DayLetter) { continue; } foreach (var date in period.Absences) { if (create10DayLetter) { continue; } var last10LetterDateRange = await _calendarQueries .GetFutureDateFromAbsenceDate(student.SchoolId, date, Day10Range); var absencesBy10DayLetterRange = period.Absences.Where(x => x.Date.Date >= date.Date && x.Date.Date <= last10LetterDateRange.Date.Date).Take(10).Count(); if (!create10DayLetter) { create10DayLetter = absencesBy10DayLetterRange > 9; if (create10DayLetter) { Day10Period = period.Period; } } if (create5DayLetter) { continue; } var last5LetterDateRange = await _calendarQueries .GetFutureDateFromAbsenceDate(student.SchoolId, date, Day5Range); var absencesBy5DayLetterRange = period.Absences.Where(x => x.Date.Date >= date.Date && x.Date.Date <= last5LetterDateRange.Date.Date).Take(5).Count(); if (!create5DayLetter) { create5DayLetter = absencesBy5DayLetterRange > 4; if (create5DayLetter) { Day5Period = period.Period; } } if (create3DayLetter) { continue; } var last3LetterDateRange = await _calendarQueries .GetFutureDateFromAbsenceDate(student.SchoolId, date, Day3Range); var absencesBy3DayLetterRange = period.Absences.Where(x => x.Date.Date >= date.Date && x.Date.Date <= last3LetterDateRange.Date.Date).Take(3).Count(); if (!create3DayLetter) { create3DayLetter = absencesBy3DayLetterRange > 2; if (create3DayLetter) { Day3Period = period.Period; } } } } if (create3DayLetter == false && Day3Letter != null) { Day3Letter.AttendanceLetterStatus = null; Day3Letter.AttendanceLetterStatusId = AttendanceLetterStatusEnum.AutoCancelled.Value; await _commands.UpdateLetter(Day3Letter); } else if (create3DayLetter && Day3Letter == null) { Persistence.Models.AttendanceLetters new3DayLetter = GenerateAttendanceLetter(student, Day3Period, currentSchoolYear, AttendanceLetterStatusEnum.Open.Value, AttendanceLetterTypeEnum.Day3Letter.Value); await _commands.SaveLetter(new3DayLetter); } else if (create3DayLetter && Day3Letter != null && Day3Letter.AttendanceLetterStatusId == AttendanceLetterStatusEnum.Open.Value) { var absences = student.Periods.Where(x => x.Period == Day3Period).FirstOrDefault().Absences; Day3Letter.ClassPeriodName = Day3Period; Day3Letter.FirstAbsence = absences.First(); Day3Letter.LastAbsence = absences.Last(); await _commands.UpdateLetter(Day3Letter); } if (create5DayLetter == false && Day5Letter != null) { Day5Letter.AttendanceLetterStatus = null; Day5Letter.AttendanceLetterStatusId = AttendanceLetterStatusEnum.AutoCancelled.Value; await _commands.UpdateLetter(Day5Letter); } else if (create5DayLetter && Day5Letter == null) { Persistence.Models.AttendanceLetters new5DayLetter = GenerateAttendanceLetter(student, Day5Period, currentSchoolYear, AttendanceLetterStatusEnum.Open.Value, AttendanceLetterTypeEnum.Day5Letter.Value); await _commands.SaveLetter(new5DayLetter); } else if (create5DayLetter && Day5Letter != null && Day5Letter.AttendanceLetterStatusId == AttendanceLetterStatusEnum.Open.Value) { var absences = student.Periods.Where(x => x.Period == Day5Period).FirstOrDefault().Absences; Day5Letter.ClassPeriodName = Day5Period; Day5Letter.FirstAbsence = absences.First(); Day5Letter.LastAbsence = absences.Last(); await _commands.UpdateLetter(Day5Letter); } if (create10DayLetter == false && Day10Letter != null) { Day10Letter.AttendanceLetterStatus = null; Day10Letter.AttendanceLetterStatusId = AttendanceLetterStatusEnum.AutoCancelled.Value; await _commands.UpdateLetter(Day10Letter); } else if (create10DayLetter && Day10Letter == null) { Persistence.Models.AttendanceLetters new10DayLetter = GenerateAttendanceLetter(student, Day10Period, currentSchoolYear, AttendanceLetterStatusEnum.Open.Value, AttendanceLetterTypeEnum.Day10Letter.Value); await _commands.SaveLetter(new10DayLetter); } else if (create10DayLetter && Day10Letter != null && Day10Letter.AttendanceLetterStatusId == AttendanceLetterStatusEnum.Open.Value) { var absences = student.Periods.Where(x => x.Period == Day10Period).FirstOrDefault().Absences; Day10Letter.ClassPeriodName = Day10Period; Day10Letter.FirstAbsence = absences.First(); Day10Letter.LastAbsence = absences.Last(); await _commands.UpdateLetter(Day10Letter); } // Reverse Logic create3DayLetter = false; create5DayLetter = false; create10DayLetter = false; Day3Period = ""; Day5Period = ""; Day10Period = ""; foreach (var period in student.Periods) { if (create10DayLetter) { continue; } var today = DateTime.Now.Date; var last10LetterDateRange = await _calendarQueries.GetPastDateFromAbsenceDate(student.SchoolId, today, Day10Range); var absencesBy10DayLetterRange = period.Absences.Where(x => x.Date.Date <= today && x.Date.Date >= last10LetterDateRange.Date.Date).Take(10).Count(); if (!create10DayLetter) { create10DayLetter = absencesBy10DayLetterRange > 9; if (create10DayLetter) { Day10Period = period.Period; } } if (create5DayLetter) { continue; } var last5LetterDateRange = await _calendarQueries.GetPastDateFromAbsenceDate(student.SchoolId, today, Day5Range); var absencesBy5DayLetterRange = period.Absences.Where(x => x.Date.Date <= today && x.Date.Date >= last5LetterDateRange.Date.Date).Take(5).Count(); if (!create5DayLetter) { create5DayLetter = absencesBy5DayLetterRange > 4; if (create5DayLetter) { Day5Period = period.Period; } } if (create3DayLetter) { continue; } var last3LetterDateRange = await _calendarQueries.GetPastDateFromAbsenceDate(student.SchoolId, today, Day3Range); var absencesBy3DayLetterRange = period.Absences.Where(x => x.Date.Date <= today && x.Date.Date >= last3LetterDateRange.Date.Date).Take(3).Count(); if (!create3DayLetter) { create3DayLetter = absencesBy3DayLetterRange > 2; if (create3DayLetter) { Day3Period = period.Period; } } } if (create3DayLetter && ((Day10Letter != null && Day10Letter.AttendanceLetterStatusId == AttendanceLetterStatusEnum.Sent.Value && student.Periods.Where(x => x.Period == Day3Period).FirstOrDefault().Absences.First() > Day10Letter.LastAbsence) || (Day5Letter != null && Day5Letter.AttendanceLetterStatusId == AttendanceLetterStatusEnum.Sent.Value && student.Periods.Where(x => x.Period == Day3Period).FirstOrDefault().Absences.First() > Day5Letter.FirstAbsence.AddDays(120)) || (Day3Letter != null && student.Periods.Where(x => x.Period == Day3Period).FirstOrDefault().Absences.Last() > Day3Letter.FirstAbsence.AddDays(60)))) { Persistence.Models.AttendanceLetters new3DayLetter = GenerateAttendanceLetter(student, Day3Period, currentSchoolYear, AttendanceLetterStatusEnum.Open.Value, AttendanceLetterTypeEnum.Day3Letter.Value); await _commands.SaveLetter(new3DayLetter); } if (create5DayLetter && ((Day10Letter != null && Day10Letter.AttendanceLetterStatusId == AttendanceLetterStatusEnum.Sent.Value && student.Periods.Where(x => x.Period == Day5Period).FirstOrDefault().Absences.First() > Day10Letter.LastAbsence) || (Day5Letter != null && student.Periods.Where(x => x.Period == Day5Period).FirstOrDefault().Absences.Last() > Day5Letter.FirstAbsence.AddDays(120)))) { Persistence.Models.AttendanceLetters new5DayLetter = GenerateAttendanceLetter(student, Day5Period, currentSchoolYear, AttendanceLetterStatusEnum.Open.Value, AttendanceLetterTypeEnum.Day5Letter.Value); await _commands.SaveLetter(new5DayLetter); } if (create10DayLetter && (Day10Letter != null && Day10Letter.AttendanceLetterStatusId == AttendanceLetterStatusEnum.Sent.Value && student.Periods.Where(x => x.Period == Day10Period).FirstOrDefault().Absences.First() > Day10Letter.LastAbsence)) { Persistence.Models.AttendanceLetters new10DayLetter = GenerateAttendanceLetter(student, Day10Period, currentSchoolYear, AttendanceLetterStatusEnum.Open.Value, AttendanceLetterTypeEnum.Day10Letter.Value); await _commands.SaveLetter(new10DayLetter); } } }