예제 #1
0
        public async Task  Init(EducationalDivision division, ApplicationDbContext dbContex)
        {
            Id             = division.Id;
            Name           = division.Name;
            PageUrl        = division.PageUrl;
            UniversityId   = division.UniversityId;
            UniversityName = division.University.Name;

            Directions      = new DirectionsListViewModel();
            Directions.Page = DirectionPage;
            await Directions.InitAsync(division.Id, dbContex);
        }
        public async Task <IActionResult> CreateOrUpdate(DivisionViewModel model)
        {
            EducationalDivision division;

            if (!ModelState.IsValid)
            {
                return(View("Create", model));
            }
            TrimStringProperties(ref model);
            if (model.Id > 0)
            {
                if (!ModelState.IsValid)
                {
                    return(View("Edit", model));
                }
                division = await _dbContext.Divisions.FindAsync(model.Id);

                if (division == null)
                {
                    return(NotFound("CreateOrUpdate", model.Id));
                }
                division.ModifiedDateTime = DateTime.Now;
            }
            else
            {
                division = new EducationalDivision();
                division.UniversityId   = model.UniversityId;
                division.CreateDateTime = division.ModifiedDateTime = DateTime.Now;
                division.PageUrl        = model.PageUrl;
                _dbContext.Add(division);
            }
            division.Name = model.Name;
            try
            {
                await _dbContext.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                return(Error("CreateOrUpdate", ex));
            }
            return(RedirectToAction("Edit", "University", new { id = division.UniversityId, DivisionsPage = model.Page }));
        }
예제 #3
0
        private async Task <ResponceExcelService> SaveToDatabase(ICollection <ImportDataDto> dataDtos)
        {
            var responce = new ResponceExcelService();

            try
            {
                var subjects = dataDtos
                               .SelectMany(x => x.Subjects.Select(s => s.Name))
                               .Distinct().ToList();
                var subjectsInDb = _dbContext.Subjects.Select(s => s.Name).ToList();

                if (!subjects.All(s => subjectsInDb.Any(x => x == s)))
                {
                    responce.IsOk        = false;
                    responce.ErrorMesage = "В файле присутствуют предметы, которых нет в списке. Скачайте шаблон и заполните его.";
                    return(responce);
                }

                ICollection <University> universities = new List <University>();
                var data = dataDtos.GroupBy(x => x.UniversityName, (u, us) => new
                {
                    UniversityName = u,
                    Divisions      = us.GroupBy(d => d.DivisionName, (d, ds) => new
                    {
                        DivisionName = d,
                        Directions   = ds.Select(dir => new
                        {
                            DirectionName = dir.DirectionName,
                            Budjet        = dir.BudgetPlacesCount,
                            Payment       = dir.PaidPlacesCount,
                            Price         = dir.Price,
                            Level         = dir.Level,
                            Form          = dir.Form,
                            Code          = dir.Code,
                            Period        = dir.PeriodOfStudy,
                            Subjects      = dir.Subjects
                        }).ToList()
                    }).ToList()
                }).ToList();
                var now = DateTime.Now;
                foreach (var item in data)
                {
                    University university = await _dbContext.Universities
                                            .Include(u => u.Divisions)
                                            .FirstOrDefaultAsync(u => u.Name == item.UniversityName);

                    if (university == null)
                    {
                        university                = new University();
                        university.Name           = item.UniversityName;
                        university.CreateDateTime = university.ModifiedDateTime = now;
                        university.Divisions      = new List <EducationalDivision>();
                        _dbContext.Universities.Add(university);
                        await _dbContext.SaveChangesAsync();
                    }

                    foreach (var division in item.Divisions)
                    {
                        EducationalDivision educationalDivision = await _dbContext.Divisions
                                                                  .Include(x => x.EducationalDirections)
                                                                  .FirstOrDefaultAsync(d => d.Name == division.DivisionName && d.UniversityId == university.Id);

                        if (educationalDivision == null)
                        {
                            educationalDivision                       = new EducationalDivision();
                            educationalDivision.Name                  = division.DivisionName;
                            educationalDivision.CreateDateTime        = educationalDivision.ModifiedDateTime = now;
                            educationalDivision.EducationalDirections = new List <EducationalDirection>();
                            university.Divisions.Add(educationalDivision);
                            await _dbContext.SaveChangesAsync();
                        }

                        foreach (var direction in division.Directions)
                        {
                            var form  = direction.Form.GetEnumFromString <EducationalFormEnum>();
                            var level = direction.Level.GetEnumFromString <EducationalLevelEnum>();
                            EducationalDirection educationalDirection = await _dbContext.Directions
                                                                        .Include(x => x.SubjectScores)
                                                                        .FirstOrDefaultAsync(x => x.Name == direction.DirectionName &&
                                                                                             x.EducationalDivisionId == educationalDivision.Id &&
                                                                                             x.EducationalForm == form &&
                                                                                             x.Level == level);

                            if (educationalDirection == null)
                            {
                                educationalDirection                = new EducationalDirection();
                                educationalDirection.Name           = direction.DirectionName;
                                educationalDirection.CreateDateTime = educationalDirection.ModifiedDateTime = now;

                                educationalDivision.EducationalDirections.Add(educationalDirection);
                            }
                            else
                            {
                                educationalDirection.ModifiedDateTime = now;
                            }

                            educationalDirection.Level             = level;
                            educationalDirection.EducationalForm   = form;
                            educationalDirection.BudgetPlacesCount = (int)direction.Budjet;
                            educationalDirection.PaidPlacesCount   = (int)direction.Payment;
                            educationalDirection.PeriodOfStudy     = direction.Period;
                            educationalDirection.Price             = (int)direction.Price;
                            educationalDirection.Code = direction.Code;

                            if (educationalDirection.SubjectScores?.Any() == true)
                            {
                                educationalDirection.SubjectScores.Clear();
                            }
                            else if (educationalDirection.SubjectScores == null)
                            {
                                educationalDirection.SubjectScores = new List <SubjectScore>();
                            }
                            await _dbContext.SaveChangesAsync();

                            foreach (var subjectDto in direction.Subjects)
                            {
                                var subject = await _dbContext.Subjects.FirstOrDefaultAsync(x => x.Name == subjectDto.Name);

                                if (subject != null)
                                {
                                    var subjectScore = new SubjectScore();
                                    subjectScore.MinimumScore   = (int)subjectDto.Score;
                                    subjectScore.CreateDateTime = subjectScore.ModifiedDateTime = now;
                                    subjectScore.Subject        = subject;
                                    educationalDirection.SubjectScores.Add(subjectScore);
                                }
                            }
                        }
                    }
                }
                await _dbContext.SaveChangesAsync();

                responce.IsOk = true;
                return(responce);
            }
            catch (Exception ex)
            {
                var errorMessage = $"SaveToDatabase.\n{ex}";
                _logger.LogWarning(errorMessage);
                responce.IsOk        = false;
                responce.ErrorMesage = ex.Message;
                return(responce);
            }
        }