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() })); } }