public RegistrationsViewModel ToRegistrationsViewModel( IEnumerable <RegistrationViewModel> registrations, ReportFilterForm filterForm) { return(new RegistrationsViewModel { DayRegistrations = ToDayRegistrations(registrations), FilterForm = filterForm }); }
public IActionResult StackedBar(ReportFilterForm form) { if (!RoleIs(Role.Administrator, Role.Manager)) { return(Forbid()); } var registrations = _registrationService .AllInclude(x => x.Employee, x => x.Entrance.Building) .ForEmployee(form.EmployeeId) .ForPeriod(form.DateFrom, form.DateTo) .WithStrictScheduleRestriction(form.StrictSchedule) .WithLateness(_timeService, form.Lateness); return(StackedBar(registrations, form)); }
public IActionResult List(ReportFilterForm form, string pdf, string excel) { if (!RoleIs(Role.Administrator, Role.Manager)) { return(Forbid()); } var registrations = _registrationService .AllInclude(x => x.Employee, x => x.Entrance.Building) .ForEmployee(form.EmployeeId) .ForPeriod(form.DateFrom, form.DateTo) .WithStrictScheduleRestriction(form.StrictSchedule) .WithLateness(_timeService, form.Lateness) .ToList(); var viewModel = GetViewModel(registrations, form); if (string.IsNullOrWhiteSpace(pdf) && string.IsNullOrWhiteSpace(excel)) { return(View(viewModel)); } viewModel.IsDocument = true; if (pdf != null) { var htmlContent = _htmlLayoutGenerator.RenderAsync($"Registration/{nameof(List)}", viewModel) .GetAwaiter().GetResult(); var file = _pdfGenerator.GenerateAsync(htmlContent).GetAwaiter().GetResult(); return(File(file, "application/json", $"Отчет_{_timeService.Now.ToShortDateString()}_{_timeService.Now.ToShortTimeString()}.pdf")); } else { var file = _excelGenerator.GenerateAsync(viewModel).GetAwaiter().GetResult(); return(File(file, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"Отчет_{_timeService.Now.ToShortDateString()}_{_timeService.Now.ToShortTimeString()}.xlsx")); } }
private ViewResult StackedBar(IEnumerable <Registration> registrations, ReportFilterForm form) { IEnumerable <RegistrationViewModel> registrationViewModels = _mapper.Map <IEnumerable <RegistrationViewModel> >(registrations); string selectedLateness = form.Lateness.HasValue ? Enum.GetName(typeof(Lateness), form.Lateness) : string.Empty; string selectedScheduleRestriction = form.StrictSchedule.HasValue ? Enum.GetName(typeof(StrictSchedureRequirement), form.StrictSchedule) : string.Empty; form.Registrations = registrationViewModels; form.Employees = _employeeService.All().ToSelectList(); form.LatenessSelectListItems = typeof(Lateness).ToSelectList(selectedLateness); form.StrictScheduleSelecrListItems = typeof(StrictSchedureRequirement).ToSelectList(selectedScheduleRestriction); RegistrationsViewModel registraionsViewModel = _registrationsViewModelService.ToRegistrationsViewModel(registrationViewModels, form); List <StackedBarDayViewModel> barViewModels = registraionsViewModel .DayRegistrations .Select(dayRegistrations => { IOrderedEnumerable <DayEmployeeRegistraionsViewModel> orderedDayEmployeeRegistrations = dayRegistrations.DayEmployeeRegistraions.OrderBy(x => x.EmployeeId); return(new StackedBarDayViewModel { Day = dayRegistrations.Day.DayOfYear.ToString(), Names = JsonConvert.SerializeObject(orderedDayEmployeeRegistrations.Select(x => x.Employee)), WorkTimes = JsonConvert.SerializeObject(orderedDayEmployeeRegistrations.Select(x => { int totalMinutes = (int)x.TotalWorkDayTimeInterval.TotalMinutes; if (dayRegistrations.Day.Date.Equals(_timeService.Now.Date)) { RegistrationRowViewModel last = x.RegistrationRows.OrderBy(y => y.Time).Last(); if (last.Event.Equals(RegistrationEventType.Coming)) { totalMinutes += (int)(_timeService.TimeNow - last.Time).TotalMinutes; } } return totalMinutes.ToString(); })), LatenessTimes = JsonConvert.SerializeObject(orderedDayEmployeeRegistrations.Select(x => { int totalMinutes = (int)x.LatenessTimeInterval.TotalMinutes; if (dayRegistrations.Day.Date.Equals(_timeService.Now.Date)) { RegistrationRowViewModel last = x.RegistrationRows.OrderBy(y => y.Time).Last(); if (last.Event.Equals(RegistrationEventType.Coming)) { if (totalMinutes < 1 && last.Time >= _timeService.WorkDayStartsAt) { totalMinutes = (int)(last.Time - _timeService.WorkDayStartsAt) .TotalMinutes; } } } else if (x.RegistrationRows.All(z => z.CheckResult == RegistrationCheckResult.Violation)) { totalMinutes = (int)_timeService.TotalWorkDayTimeSpan.TotalMinutes; } return totalMinutes.ToString(); })) }); }) .ToList(); StackedBarViewModel viewModel = new StackedBarViewModel { StackedBarDayViewModels = barViewModels, FilterForm = form, DayRegistrations = registraionsViewModel.DayRegistrations }; return(View(viewModel)); }
private RegistrationsViewModel GetViewModel(IEnumerable <Registration> registrations, ReportFilterForm form) { var registrationViewModels = _mapper.Map <IEnumerable <RegistrationViewModel> >(registrations); var selectedLateness = form.Lateness.HasValue ? Enum.GetName(typeof(Lateness), form.Lateness) : string.Empty; var selectedScheduleRestriction = form.StrictSchedule.HasValue ? Enum.GetName(typeof(StrictSchedureRequirement), form.StrictSchedule) : string.Empty; form.Registrations = registrationViewModels; form.Employees = _employeeService.All().ToSelectList(); form.LatenessSelectListItems = typeof(Lateness).ToSelectList(selectedLateness); form.StrictScheduleSelecrListItems = typeof(StrictSchedureRequirement).ToSelectList(selectedScheduleRestriction); var registrationsViewModel = _registrationsViewModelService.ToRegistrationsViewModel(registrationViewModels, form); return(registrationsViewModel); }