public async Task <CourseScheduleViewModel> Get(CourseScheduleDtoModel input)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            _logger.LogInformation("Get: " +
                                   "DatetimeRequest: " + input.DateTimeRequest + " " +
                                   "GroupName: " + input.GroupName);

            try
            {
                // подготавливаем параметры для получения расписания
                var courseScheduleParameters = new CourseScheduleParameters
                {
                    NumberWeek    = _parityOfTheWeekService.GetCountParityOfWeek(input.DateTimeRequest),
                    NameOfDayWeek = CultureInfo.GetCultureInfo("ru-RU").DateTimeFormat
                                    .GetDayName(input.DateTimeRequest.DayOfWeek).ToLower(),
                    ParityWeek      = _parityOfTheWeekService.GetParityOfTheWeekByDateTime(input.DateTimeRequest),
                    GroupName       = input.GroupName,
                    DatetimeRequest = input.DateTimeRequest,
                    FileName        = _fileName
                };

                var courseScheduleDatabaseModel =
                    await _courseScheduleDatabaseService.GetByParameters(courseScheduleParameters);

                var courseScheduleModel = _mapper.Map <List <CourseScheduleModel> >(courseScheduleDatabaseModel);

                var result = PrepareViewModel(courseScheduleModel, courseScheduleParameters);

                _logger.LogInformation("Get: " + result);

                return(result);
            }
            catch (Exception ex)
            {
                _logger.LogError("Get Exception: " + ex);
                throw new NotSupportedException("Ошибка во время выполнения." + ex);
            }
        }
        private CourseScheduleViewModel PrepareViewModel(
            List <CourseScheduleModel> input,
            CourseScheduleParameters parameters)
        {
            if (input == null || parameters == null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            try
            {
                _logger.LogInformation("PrepareViewModel: " +
                                       "CourseScheduleModel: " + input.Count + " " +
                                       "CourseScheduleParameters: " + parameters.DatetimeRequest + " " +
                                       "GroupName: " + parameters.GroupName
                                       );

                // если отсутствуют данные о расписании, возвращаем пустую модель
                if (IsEmptyCourseSchedule(input))
                {
                    var emptyCourseScheduleViewModel = new CourseScheduleViewModel
                    {
                        NameOfDayWeek =
                            parameters.NameOfDayWeek.ToUpper(),
                        DatetimeRequest  = parameters.DatetimeRequest.Date.ToShortDateString(),
                        UpdateDatetime   = _fileService.GetLastWriteTime(parameters.FileName).Result.ToShortDateString(),
                        CoursesViewModel = new List <CourseViewModel> {
                            new CourseViewModel()
                        },
                        NumberWeek = _parityOfTheWeekService.GetCountParityOfWeek(parameters.DatetimeRequest.Date)
                    };

                    return(emptyCourseScheduleViewModel);
                }

                // маппим список предметов из бд в модель представления
                var coursesViewModel = _mapper.Map <List <CourseViewModel> >(input);

                // удаляем пустые предметы и сортируем по позиции в раписании
                var sortedCoursesViewModel = coursesViewModel
                                             .Where(w => !string.IsNullOrEmpty(w.CourseName))
                                             .OrderBy(o => o.CourseNumber)
                                             .ToList();

                // создаем результирующую модель представления
                var resultCourseScheduleViewModel = new CourseScheduleViewModel
                {
                    CoursesViewModel = sortedCoursesViewModel,
                    NameOfDayWeek    = parameters.NameOfDayWeek.ToUpper(),
                    DatetimeRequest  = parameters.DatetimeRequest.Date.ToShortDateString(),
                    UpdateDatetime   = _fileService.GetLastWriteTime(parameters.FileName).Result.Date.ToShortDateString(),
                    NumberWeek       = _parityOfTheWeekService.GetCountParityOfWeek(parameters.DatetimeRequest)
                };

                _logger.LogInformation("PrepareViewModel: "
                                       + "CoursesViewModel: " + "DatetimeRequest: " +
                                       resultCourseScheduleViewModel.DatetimeRequest + " " +
                                       "CoursesViewModel.Count: " + resultCourseScheduleViewModel.CoursesViewModel.Count
                                       );

                return(resultCourseScheduleViewModel);
            }
            catch (Exception ex)
            {
                _logger.LogInformation("PrepareViewModel Exception: " + ex);
                throw new NotSupportedException("Ошибка во время выполнения." + ex);
            }
        }
Exemplo n.º 3
0
#pragma warning disable 1998
        public async Task <List <CourseScheduleDatabaseModel> > GetByParameters(CourseScheduleParameters parameters)
#pragma warning restore 1998
        {
            try
            {
                if (parameters == null)
                {
                    throw new NotSupportedException();
                }

                var courseSchedules = _context.CourseSchedules
                                      .Include(i => i.TeacherModel)
                                      .Include(d => d.StudyGroupModel)
                                      .Where(d => (d.CourseType == CourseType.Lecture ||
                                                   d.CourseType == CourseType.Practicte ||
                                                   d.CourseType == CourseType.LaboratoryWork ||
                                                   d.CourseType == CourseType.Other))
                                      .ToList();

                var list = new List <CourseScheduleDatabaseModel>();

                foreach (var scheduleDatabaseModel in courseSchedules)
                {
                    var model = scheduleDatabaseModel;

                    model.NumberWeek = _importDataExcelService.ParseNumberWeek(scheduleDatabaseModel.NumberWeekString);

                    list.Add(model);
                }

                var result = list.Where(f =>
                                        string.Equals(f.NameOfDayWeek, parameters.NameOfDayWeek, StringComparison.OrdinalIgnoreCase) &&
                                        (f.NumberWeek.Any(a => a == parameters.NumberWeek) || f.NumberWeek.Count == 0) &&
                                        f.ParityWeek == parameters.ParityWeek &&
                                        f.StudyGroupModel?.Name == parameters.GroupName &&
                                        f.IsDeleted == false)
                             .ToList();

                var studyGroupCombined = new List <StudyGroupModel>();

                var filteredCourseSchedules = courseSchedules.Where(f =>
                                                                    string.Equals(f.NameOfDayWeek, parameters.NameOfDayWeek, StringComparison.OrdinalIgnoreCase) &&
                                                                    (f.NumberWeek.Any(a => a == parameters.NumberWeek) || f.NumberWeek.Count == 0) &&
                                                                    f.ParityWeek == parameters.ParityWeek &&
                                                                    f.IsDeleted == false)
                                              .ToList();

                foreach (var model in result)
                {
                    foreach (var scheduleDatabaseModel in filteredCourseSchedules
                             .Where(scheduleDatabaseModel => model.CoursePlace == scheduleDatabaseModel.CoursePlace &&
                                    model.CourseNumber == scheduleDatabaseModel.CourseNumber &&
                                    model.StudyGroupModel.Name != scheduleDatabaseModel.StudyGroupModel.Name))
                    {
                        studyGroupCombined.Add(scheduleDatabaseModel.StudyGroupModel);

                        model.CombinedGroup = studyGroupCombined.Distinct().ToList();
                    }
                }

                return(result);
            }
            catch (Exception)
            {
                throw new NotSupportedException();
            }
        }