Beispiel #1
0
        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);
        }
Beispiel #2
0
        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());
        }