Exemplo n.º 1
0
 private AttendanceLetterModel MapAttendanceLetterEntityToModel(Persistence.Models.AttendanceLetters entity)
 {
     return(new AttendanceLetterModel
     {
         AttendanceLetterStatusId = entity.AttendanceLetterStatusId,
         AttendanceLetterId = entity.AttendanceLetterId,
         AttendanceLetterTypeId = entity.AttendanceLetterTypeId,
         Type = entity.AttendanceLetterType?.CodeValue,
         ClassPeriodName = entity.ClassPeriodName,
         FirstAbsence = entity.FirstAbsence,
         LastAbsence = entity.LastAbsence,
         UserLastSurname = entity.UserLastSurname,
         UserCreatedUniqueId = entity.UserCreatedUniqueId,
         UserFirstName = entity.UserFirstName,
         UserRole = entity.UserRole,
         FirstName = entity.FirstName,
         LastSurname = entity.LastSurname,
         Id = entity.Id,
         CreateDate = entity.CreateDate,
         MiddleName = entity.MiddleName,
         SchoolId = entity.SchoolId,
         Status = entity.AttendanceLetterStatus?.CodeValue,
         StudentUniqueId = entity.StudentUniqueId,
         GradeLevel = entity.GradeLevel,
         SchoolYear = entity.SchoolYear,
         ResolutionDate = entity.ResolutionDate,
         Comments = entity.Comments,
     });
 }
Exemplo n.º 2
0
 private Persistence.Models.StudentExtraHours MapEntityAttendanceLettersEntityToStudentExtraHoursEntity(Persistence.Models.AttendanceLetters letter)
 {
     return(new Persistence.Models.StudentExtraHours
     {
         Comments = letter.Comments,
         Date = letter.LastAbsence,
         FirstName = letter.FirstName,
         LastSurname = letter.LastSurname,
         GradeLevel = letter.GradeLevel,
         Hours = 0,
         ReasonId = GetReasonIdFromAttendanceLetterTypeId(letter.AttendanceLetterTypeId),
         SchoolYear = letter.SchoolYear,
         StudentUniqueId = letter.StudentUniqueId,
         UserCreatedUniqueId = letter.UserCreatedUniqueId,
         UserFirstName = letter.UserFirstName,
         UserLastSurname = letter.UserLastSurname,
         UserRole = letter.UserRole,
         Version = 1
     });
 }
Exemplo n.º 3
0
        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);
                }
            }
        }