protected override List <AbsenceError> CalculateReportData() { Logger.Info("Calculating absence errors"); var jiraAbsences = _jiraAbsenceReporter.Report(); var holidays = _publicHolidayReporter.Report(); var errors = ValidateJiraAbsences(jiraAbsences, holidays); if (errors.Any()) { var errorString = string.Join(Environment.NewLine, errors.Select(x => $"{x.JiraAbsence.IssueKey} {x.AbsenceErrorType}")); Logger.Warn("Found {0} errors in absences!", errors.Count); Logger.Warn(errorString); } else { Logger.Info("All absences are OK"); } return(errors); }
protected override List <SalaryData> CalculateReportData() { Logger.Info("Calculating salary data"); var jiraAbsences = _jiraAbsenceReporter.Report(); var users = _usersActiveInMonthReporter.Report(); var salariedUsers = users.Where(x => SalariedContractTypes.Contains(x.GetContractType())).ToList(); Logger.Info("Found {0} salaried users", salariedUsers.Count); var relevantAttendance = _attendanceReporter.Report() .Where(x => x.Date.Year == _year && x.Date.Month == _month) .GroupBy(x => x.User) .Select(x => new { User = x.Key, HoursWorkedTotal = x.Sum(y => y.HoursWorked), AbsenceVacationTotal = x.Sum(y => y.AbsenceVacation), AbsenceDoctorTotal = x.Sum(y => y.AbsenceDoctor), AbsenceDoctorFamilyTotal = x.Sum(y => y.AbsenceDoctorFamily), AbsencePersonalLeaveTotal = x.Sum(y => y.AbsencePersonalLeave) }) .Join(salariedUsers, a => a.User, u => u.Login, (a, u) => new { u.Login, u.Title, u.StartDate, u.Benefit, u.FirstName, u.LastName, u.Salary, u.Rate, ContractType = u.GetContractType(), a.HoursWorkedTotal, a.AbsenceVacationTotal, a.AbsenceDoctorTotal, a.AbsenceDoctorFamilyTotal, a.AbsencePersonalLeaveTotal }); var result = relevantAttendance.Select(x => { decimal?salary = null; if (x.ContractType == ContractType.Employee) { salary = x.Salary; } else if (x.ContractType == ContractType.PartTimeEmployee) { salary = x.Rate * x.HoursWorkedTotal; } return(new SalaryData { Year = _year, Month = _month, Title = x.Title, StartDate = x.StartDate, Benefit = x.Benefit, FirstName = x.FirstName, Login = x.Login, LastName = x.LastName, DoctorFamilyHours = x.AbsenceDoctorFamilyTotal, DoctorHours = x.AbsenceDoctorTotal, VacationDays = x.AbsenceVacationTotal / 8, Salary = salary, IllnessDays = CalculateIllnessDays(x.Login, jiraAbsences), PersonalLeaveDays = x.AbsencePersonalLeaveTotal / 8 }); }); return(result.ToList()); }