public async Task <IActionResult> AbsentsReport(DateTime startDate, DateTime endDate , int[] employeesIds = null, string[] departments = null, string absentNotes = "all" , bool summaryReport = true, int?pageNumber = null, int pageSize = 31) { try { startDate = startDate.Date; endDate = endDate.Date; employeesIds = employeesIds ?? new int[] { }; departments = departments ?? new string[] { }; var employeesIdsList = employeesIds.ToList(); if (departments.Count() > 0) { var departmentsEmployees = new List <EmployeeInfoViewModel>(); foreach (var department in departments) { departmentsEmployees.AddRange(await _erpManager.GetDepartmentEmployeesInfo(department)); } if (departmentsEmployees.Any()) { employeesIdsList.AddRange(departmentsEmployees.Select(d => d.EmployeeId)); employeesIds = employeesIdsList.Distinct().OrderBy(e => e).ToArray(); } } try { string reportType = "Absents " + (pageNumber.HasValue ? "Page : 1" : "All Pages") + ", "; reportType += $"Notes : {absentNotes} ,"; reportType += summaryReport ? "Summary" : "Details"; saveReportRequest(employeesIds, departments, startDate, endDate, reportType); } catch (Exception) { } var resultsQuery = _employeesDaysReportsManager .GetAll(d => (employeesIds.Count() < 1 || employeesIds.Contains(d.EmployeeId)) && (absentNotes.Trim().ToLower() == "show" || (absentNotes.Trim().ToLower() == "hide" && !d.IsDelegationRequest && !d.IsVacationRequest) || (absentNotes.Trim().ToLower() == "notes" && (d.IsDelegationRequest || d.IsVacationRequest)) || (absentNotes.Trim().ToLower() == "vacations" && d.IsVacationRequest) || (absentNotes.Trim().ToLower() == "delegations" && d.IsDelegationRequest)) && d.DayDate >= startDate && d.DayDate <= endDate && d.IsAbsentEmployee == true); if (pageNumber.HasValue) { resultsQuery = resultsQuery.Skip((pageNumber.Value - 1) * pageSize).Take(pageSize); } var resultsData = await resultsQuery.AsNoTracking().ToListAsync(); var resultViewModels = _mapper.Map <List <EmployeeDayReportViewModel> >(resultsData); if (resultViewModels.Count > 0) { employeesIds = resultViewModels.Select(d => d.EmployeeId).Distinct().ToArray(); //var erpEmployees = await _erpManager.GetEmployeesInfo(employeesIds); //foreach (var erpEmp in erpEmployees) //{ // foreach (var dayReport in resultViewModels.Where(d => d.EmployeeId == erpEmp.EmployeeId)) // { // dayReport.EmployeeName = erpEmp.Name; // dayReport.DepartmentName = erpEmp.DepartmentName; // } //} } resultViewModels = resultViewModels.OrderBy(d => d.EmployeeId).ThenBy(d => d.DayDate).ToList(); if (!summaryReport) { return(PartialView(resultViewModels)); } else { var summaryViewModels = new List <EmployeeMonthReportViewModel>(); foreach (var employeeDays in resultViewModels.GroupBy(e => e.EmployeeId)) { var newSummary = new EmployeeMonthReportViewModel { EmployeeId = employeeDays.Key, EmployeeName = employeeDays.First().EmployeeName, DepartmentName = employeeDays.First().DepartmentName, ProcessingDate = employeeDays.Max(d => d.ProcessingDate), StartDate = startDate, ToDate = endDate, TotalAbsentsDays = employeeDays.Count(), AllAbsentsNotified = !employeeDays.Where(d => d.IsAbsentEmployee && !d.IsDelegationRequest && !d.IsVacationRequest).Any(d => !d.AbsentNotified), AllAbsentsWithNotes = !employeeDays.Where(d => d.IsAbsentEmployee && !d.IsDelegationRequest && !d.IsVacationRequest).Any() }; summaryViewModels.Add(newSummary); } ViewBag.ShowAbsents = true; ViewBag.ShowWaste = false; return(PartialView("WastesReport", summaryViewModels.OrderBy(s => s.EmployeeId).ToList())); } } catch (Exception ex) { throw; } }
public IEnumerable <EmployeeMonthReportViewModel> getSummaryData(DateTime startDate, DateTime endDate, IEnumerable <EmployeeDayReportViewModel> detailsData) { try { var summaryViewModels = new List <EmployeeMonthReportViewModel>(); foreach (var employeeDays in detailsData.GroupBy(e => e.EmployeeId)) { var newSummary = new EmployeeMonthReportViewModel { EmployeeId = employeeDays.Key, EmployeeName = employeeDays.First().EmployeeName, DepartmentName = employeeDays.First().DepartmentName, ProcessingDate = employeeDays.Max(d => d.ProcessingDate), StartDate = startDate, ToDate = endDate, ContractWorkDurationAvarage = employeeDays.Where(d => d.ContractWorkDuration.HasValue).Count() > 0 ? employeeDays.Where(d => d.ContractWorkDuration.HasValue) .Average(d => d.ContractWorkDuration.Value) : 0, TotalActualWorkDuration = employeeDays .Sum(d => d.ActualWorkDuration.HasValue ? d.ActualWorkDuration.Value : 0), TotalContractWorkDuration = employeeDays .Sum(d => d.ContractWorkDuration.HasValue ? d.ContractWorkDuration.Value : 0), TotalWasteHours = employeeDays .Sum(d => d.WasteDuration.HasValue ? d.WasteDuration.Value : 0), DayReportsList = employeeDays.ToList(), TotalWasteDays = employeeDays.Count(d => d.IsAbsentEmployee), VacationsDays = employeeDays.Count(d => d.IsVacation && d.VacationRegisterDate.HasValue), }; newSummary.ContractWorkDurationAvarageTime = newSummary.ContractWorkDurationAvarage.ConvertToTime(); newSummary.TotalActualWorkDurationTime = newSummary.TotalActualWorkDuration.ConvertToTime(); newSummary.TotalContractWorkDurationTime = newSummary.TotalContractWorkDuration.ConvertToTime(); newSummary.TotalWasteHoursTime = newSummary.TotalWasteHours.ConvertToTime(); newSummary.SingleProofDays = employeeDays.Where(d => d.WasteDuration >= d.ContractWorkDuration).Count(); newSummary.WasteHours = newSummary.TotalWasteHours - newSummary.ContractWorkDurationAvarage; if (newSummary.SingleProofDays > 0) { newSummary.WasteHours -= newSummary.ContractWorkDurationAvarage; } newSummary.WasteHours = newSummary.WasteHours > 0 ? newSummary.WasteHours : 0; newSummary.WasteHoursTime = newSummary.WasteHours.ConvertToTime(); if (newSummary.WasteHours > 0 && newSummary.ContractWorkDurationAvarage > 0) { newSummary.WasteDays = (int)(newSummary.WasteHours / newSummary.ContractWorkDurationAvarage); } //newSummary.VacationsDays = employeeDays.Where(d => d.IsVacation && d.VacationRegisterDate.HasValue).Count(); summaryViewModels.Add(newSummary); } return(summaryViewModels); } catch (Exception) { throw; } }