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() }); }
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); }
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); }
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() }); }