Esempio n. 1
0
        public EmployeeReport GetEmployeeReport(string lastName)
        {
            var employee = _employeeRepository.GetEmployee(lastName);
            var timeLogs = _timesheetRepository.GetTimeLogs(employee.LastName);

            if (timeLogs == null || timeLogs.Length == 0)
            {
                return(new EmployeeReport
                {
                    LastName = employee.LastName
                });
            }

            var totalHours = timeLogs.Sum(x => x.WorkingHours);
            var bill       = employee.CalculateBill(timeLogs);

            return(new EmployeeReport
            {
                LastName = employee.LastName,
                TimeLogs = timeLogs.ToList(),
                Bill = bill,
                TotalHours = totalHours,
                StartDate = timeLogs.Select(t => t.Date).Min(),
                EndDate = timeLogs.Select(t => t.Date).Max()
            });
        }
Esempio n. 2
0
        public EmployeeReport GetEmployeeReport(string lastName)
        {
            var     timeLogs = _timesheetRepository.GetTimeLogs(lastName);
            var     employee = _authService.GetEmployee(lastName);
            decimal bill;
            int     hours = 0;

            foreach (var log in timeLogs)
            {
                hours += log.WorkingTimeHours;
            }
            bill = hours / 160 * employee.Salary;

            var result = new EmployeeReport
            {
                LastName   = lastName,
                TimeLogs   = timeLogs.ToList(),
                Bill       = bill,
                StartTime  = timeLogs.Select(t => t.Date).Min(),
                EndTime    = timeLogs.Select(t => t.Date).Max(),
                TotalHours = timeLogs.Sum(x => x.WorkingTimeHours)
            };

            return(result);
        }
Esempio n. 3
0
        public EmployeeReport GetEmployeeReport(string lastName)
        {
            var employee = _employeeRepository.GetEmployee(lastName);
            var timeLogs = _timesheetRepository.GetTimeLogs(employee.LastName);

            if (timeLogs.Length == 0 || timeLogs == null)
            {
                return(new EmployeeReport
                {
                    Bill = 0m,
                    TotalHours = 0,
                    LastName = employee.LastName
                });
            }

            decimal bill       = 0m;
            var     totalHours = timeLogs.Sum(x => x.WorkingHours);


            var workingHoursGroupByDay = timeLogs
                                         .GroupBy(x => x.Date.ToShortDateString());

            foreach (var workingLogsPerDay in workingHoursGroupByDay)
            {
                int dayHours = workingLogsPerDay.Sum(x => x.WorkingHours);

                if (dayHours > MAX_WORKING_HOURS_IN_DAY)
                {
                    var overtimeHours = dayHours - MAX_WORKING_HOURS_IN_DAY;

                    bill += MAX_WORKING_HOURS_IN_DAY * employee.Salary / MAX_WORKING_HOURS_IN_MONTH;
                    bill += overtimeHours * employee.Salary * OVERTIME_MULTIPLIER / MAX_WORKING_HOURS_IN_MONTH;
                }
                else
                {
                    bill += dayHours * employee.Salary / MAX_WORKING_HOURS_IN_MONTH;
                }
            }

            var result = new EmployeeReport
            {
                LastName   = employee.LastName,
                TimeLogs   = timeLogs.ToList(),
                TotalHours = totalHours,
                Bill       = bill
            };

            return(result);
        }
Esempio n. 4
0
        public EmployeeReport GetEmployeeReport(string lastName)
        {
            var employee = _employeeRepository.GetEmployee(lastName);
            var timeLogs = _timesheetRepository.GetTimeLogs(employee.LastName);

            if (timeLogs == null || timeLogs.Length == 0)
            {
                return(new EmployeeReport
                {
                    LastName = employee.LastName
                });
            }

            var     totalHours = timeLogs.Sum(x => x.WorkingHours);
            decimal bill       = 0;

            switch (lastName)
            {
            // staff
            case "Петров":
            {
                var workingHoursGroupsByDay = timeLogs
                                              .GroupBy(x => x.Date.ToShortDateString());

                foreach (var workingLogsPerDay in workingHoursGroupsByDay)
                {
                    int dayHours = workingLogsPerDay.Sum(x => x.WorkingHours);

                    if (dayHours > MAX_WORKING_HOURS_PER_DAY)
                    {
                        var overtime = dayHours - MAX_WORKING_HOURS_PER_DAY;

                        bill += MAX_WORKING_HOURS_PER_DAY / MAX_WORKING_HOURS_PER_MONTH * employee.Salary;
                        bill += overtime / MAX_WORKING_HOURS_PER_MONTH * employee.Salary * 2;
                    }
                    else
                    {
                        bill += dayHours / MAX_WORKING_HOURS_PER_MONTH * employee.Salary;
                    }
                }

                break;
            }

            // manager
            case "Иванов":
            {
                var workingHoursGroupsByDay = timeLogs
                                              .GroupBy(x => x.Date.ToShortDateString());

                foreach (var workingLogsPerDay in workingHoursGroupsByDay)
                {
                    int dayHours = workingLogsPerDay.Sum(x => x.WorkingHours);

                    if (dayHours > MAX_WORKING_HOURS_PER_DAY)
                    {
                        decimal bonusPerDay = MAX_WORKING_HOURS_PER_DAY / MAX_WORKING_HOURS_PER_MONTH * BONUS_FOR_MANAGER;
                        bill += MAX_WORKING_HOURS_PER_DAY / MAX_WORKING_HOURS_PER_MONTH * employee.Salary + bonusPerDay;
                    }
                    else
                    {
                        bill += dayHours / MAX_WORKING_HOURS_PER_MONTH * employee.Salary;
                    }
                }

                break;
            }

            // freelancer
            case "Сидоров":
            {
                bill = totalHours * employee.Salary;
                break;
            }

            default:
                break;
            }

            return(new EmployeeReport
            {
                LastName = employee.LastName,
                TimeLogs = timeLogs.ToList(),
                Bill = bill,
                TotalHours = totalHours,
                StartDate = timeLogs.Select(t => t.Date).Min(),
                EndDate = timeLogs.Select(t => t.Date).Max()
            });
        }