public async Task <IActionResult> Edit(ConscriptionPeriodViewModel model)
        {
            var conscriptionPeriod = await _appDb.ConscriptionPeriods.FirstOrDefaultAsync(m => m.Id == model.Id);

            if (conscriptionPeriod == null)
            {
                ModelState.AddModelError("Id", "Период призыва не найден. Обновите страницу!");
            }
            if (conscriptionPeriod != null && await _appDb.ConscriptionPeriods.AnyAsync(m =>
                                                                                        m.Id != model.Id && m.Name == model.Name))
            {
                ModelState.AddModelError("Name", "Период призыва с данным наименованием уже существует!");
            }

            if (!ModelState.IsValid)
            {
                return(new JsonResult(new { isSucceeded = false, errors = ModelState.Errors() }));
            }

            var transaction = await _appDb.Database.BeginTransactionAsync(IsolationLevel.ReadCommitted);

            try
            {
                if (conscriptionPeriod == null)
                {
                    throw new NullReferenceException();
                }
                conscriptionPeriod.Name      = model.Name;
                conscriptionPeriod.IsArchive = model.IsArchive;
                if (!model.IsArchive)
                {
                    var allConscriptionPeriods = await _appDb.ConscriptionPeriods.ToListAsync();

                    foreach (var cPeriod in allConscriptionPeriods)
                    {
                        cPeriod.IsArchive = true;
                    }
                    _appDb.ConscriptionPeriods.UpdateRange(allConscriptionPeriods);
                }
                _appDb.ConscriptionPeriods.Update(conscriptionPeriod);
                await _appDb.SaveChangesAsync();

                transaction.Commit();
                return(new JsonResult(new { isSucceeded = true }));
            }
            catch
            {
                transaction.Rollback();
                ModelState.AddModelError("Id",
                                         "Критическая ошибка при добавлении периода призыва. Обратитесь в ВЦшнику");
                return(new JsonResult(new { isSucceeded = false, errors = ModelState.Errors() }));
            }
        }
        public async Task <IActionResult> Create(ConscriptionPeriodViewModel model)
        {
            if (await _appDb.Departments.AnyAsync(m => m.Name == model.Name))
            {
                ModelState.AddModelError("Name", "Период призыва с данным наименованием уже существует!");
            }

            if (!ModelState.IsValid)
            {
                return(new JsonResult(new { isSucceeded = false, errors = ModelState.Errors() }));
            }

            var transaction = await _appDb.Database.BeginTransactionAsync(IsolationLevel.ReadCommitted);

            try
            {
                var conscriptionPeriod = new ConscriptionPeriod
                {
                    Name      = model.Name,
                    IsArchive = model.IsArchive
                };
                if (!model.IsArchive)
                {
                    var allConscriptionPeriods = await _appDb.ConscriptionPeriods.ToListAsync();

                    foreach (var cPeriod in allConscriptionPeriods)
                    {
                        cPeriod.IsArchive = true;
                    }
                    _appDb.ConscriptionPeriods.UpdateRange(allConscriptionPeriods);
                }
                await _appDb.ConscriptionPeriods.AddAsync(conscriptionPeriod);

                await _appDb.SaveChangesAsync();

                transaction.Commit();
                return(new JsonResult(new { isSucceeded = true }));
            }
            catch
            {
                transaction.Rollback();
                ModelState.AddModelError("Id",
                                         "Критическая ошибка при добавлении периода призыва. Обратитесь в ВЦшнику");
                return(new JsonResult(new { isSucceeded = false, errors = ModelState.Errors() }));
            }
        }