public ActionResult AddOrEditGroup(int id = 0, Group group = null) { var allParameters = DbHelper.GetAllParameters(0); if (group == null) { return(View(new Group { AllParameters = allParameters ?? new List <Parameter>() })); } if (!DbHelper.UserIsAdmin(User?.Identity?.Name)) { return(View("Unauthorize")); } _repository.UserName = User?.Identity?.Name; group.AllParameters = allParameters ?? new List <Parameter>(); if (!ModelState.IsValid) { return(View(group)); } var res = group.Id != 0 ? DbHelper.EditGroup(group.Id, group.Name, _repository.UserName) : DbHelper.AddGroup(group.Name, _repository.UserName); if (!res) { ModelState.AddModelError("Db", "Группа не была добавлена! Повторите попытку или свяжитесь с администратором."); return(View(group)); } var groups = DbHelper.GetAllGroups(_repository.UserName); @group = id == 0 ? groups.Values.Single(g => g.Id == groups.Values.Max(gid => gid.Id)) : groups.Values.Single(g => g.Id == id); group.AllParameters = allParameters ?? new List <Parameter>(); var result = false; if (allParameters != null && allParameters.Any()) { var newChecked = Request.Form.AllKeys; var toDelete = new List <ParameterGroup>(); var toAdd = new List <ParameterGroup>(); foreach (var parameter in allParameters) { var inNewChecked = newChecked.Any(k => k == $"chk_{parameter.Id}_{group.Id}" || k == $"chk_{parameter.Id}_0"); var inOldChecked = group.Parameters.Any(p => p.Id == parameter.Id); if (inNewChecked && inOldChecked) { continue; } if (inNewChecked) { toAdd.Add(new ParameterGroup { IdParameter = parameter.Id, IdGroup = group.Id }); } else if (inOldChecked) { toDelete.Add(new ParameterGroup { IdParameter = parameter.Id, IdGroup = group.Id }); } } if (toAdd.Any() || toDelete.Any()) { result = DbHelper.UpdateParameterGroups(toAdd, toDelete, _repository.UserName); } else { result = true; } } else { return(View("Saved")); } if (result) { //user = DbHelper.GetUser(_repository.UserName); //roles = DbHelper.GetAllRoles(_repository.UserName); //if (users == null || roles == null) // return View(new UserRolesViewModel()); //var modelNew = new UserViewModel //{ // User = users.Values, // Roles = roles.Values //}; return(View("Saved")); } ModelState.AddModelError("Db", "Параметры группы не были изменены! Повторите попытку или свяжитесь с администратором."); return(View(group)); }