public ActionResult Show(int masterId, int?next)
        {
            var masterPerson = educatorEmploymentRepository.GetEducatorMasterPersonById(masterId);

            if (masterPerson != null)
            {
                var viewModel = EducatorEventsShowAllViewModel.Build(masterPerson, next);
                return(View(viewModel));
            }
            return(View());
        }
        public FileStreamResult Excel(int masterId, int?next)
        {
            var masterPerson = educatorEmploymentRepository.GetEducatorMasterPersonById(masterId);

            if (masterPerson != null)
            {
                var viewModel = EducatorEventsShowAllViewModel.Build(masterPerson, next);
                return(File(
                           GetXmlContentAsStream(masterPerson, viewModel),
                           "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                           $"расписание преподавателя на семестр - {masterPerson.DisplayName} ({viewModel.From:dd MMMM yyyy} - {viewModel.To:dd MMMM yyyy} г. на дату {DateTime.Now:dd.MM}).xlsx"));
            }
            return(null);
        }
        private Stream GetXmlContentAsStream(EducatorMasterPerson masterPerson, EducatorEventsShowAllViewModel viewModel)
        {
            var aggregatedEventDayModels = viewModel.EducatorEventsDays.Select(day =>
                                                                               new AggregatedEventDayModel(day.DayString, day.DayStudyEvents.Select(aggregatedEvent =>
                                                                                                                                                    new AggregatedEventModel(
                                                                                                                                                        aggregatedEvent.DateTime.Time.Value,
                                                                                                                                                        string.Join("\n", aggregatedEvent.DateTime.Dates.Select(d => d.Value)),
                                                                                                                                                        aggregatedEvent.Subject,
                                                                                                                                                        aggregatedEvent.Cohort,
                                                                                                                                                        aggregatedEvent.ShowCohort,
                                                                                                                                                        aggregatedEvent.EventLocations.FirstOrDefault().DisplayName,
                                                                                                                                                        string.Join("; ", aggregatedEvent.ContingentUnits.Select(cu => $"{cu.Name} ({cu.DivisionAndCourse})")),
                                                                                                                                                        null))));
            var stream = AppointmentsSpreadsheetsHelper.GetEducatorTimetableWorkbookStream(viewModel.From, viewModel.To,
                                                                                           $"{masterPerson.LastName} {masterPerson.FirstName} {masterPerson.MiddleName}", aggregatedEventDayModels);

            return(stream);
        }