private void Validate(ResourceViewModel resourceViewModel, ResourceActFilesModel files) { if (resourceViewModel.Resource.ResourceRights == null || resourceViewModel.Resource.ResourceRights.Count < 1) { ModelState.AddModelError(string.Empty, @"Необходимо задать по меньшей мере одно право для ресурса"); } ValidateFiles(files.ResourceAuthorityActs, "Files.ResourceAuthorityActs[{0}]"); ValidateFiles(files.ResourceUsingActs, "Files.ResourceUsingActs[{0}]"); ValidateFiles(files.ResourceOperatorActs, "Files.ResourceOperatorActs[{0}]"); if (files.ResourceOperatorPersons != null) { for (var i = 0; i < files.ResourceOperatorPersons.Count; i++) { ValidateFiles(files.ResourceOperatorPersons[i].Acts, "Files.ResourceOperatorPersons[" + i + "].Acts[{0}]"); } } if (files.ResourceOwnerPersons != null) { for (var i = 0; i < files.ResourceOwnerPersons.Count; i++) { ValidateFiles(files.ResourceOwnerPersons[i].Acts, "Files.ResourceOwnerPersons[" + i + "].Acts[{0}]"); } } }
public ActionResult Update(ResourceViewModel resourceViewModel, ResourceActFilesModel files, IList <RequestPermissionsDepartmentsModel> requestPermissionsDepartments) { if (resourceViewModel == null || resourceViewModel.Resource == null) { return(RedirectToAction("BadRequestError", "Home", new { message = "Не передана ссылка на ресурс" })); } if (!_securityService.CanUpdate(resourceViewModel.Resource)) { return(RedirectToAction("ForbiddenError", "Home")); } Validate(resourceViewModel, files); if (!ModelState.IsValid) { ViewData["SecurityService"] = _securityService; return(View(_resourceService.GetResourceViewModelBy(resourceViewModel.Resource, requestPermissionsDepartments))); } try { _resourceService.UpdateResource(resourceViewModel.Resource, files, requestPermissionsDepartments); _resourceService.SaveChanges(); } catch (DbUpdateException e) { return(RedirectToAction("ConflictError", "Home", new { message = ExceptionHelper.RollToInnerException(e).Message })); } catch (RetryLimitExceededException e) { return(RedirectToAction("ServerError", "Home", new { message = ExceptionHelper.RollToInnerException(e).Message })); } catch (IOException e) { return(RedirectToAction("ServerError", "Home", new { message = ExceptionHelper.RollToInnerException(e).Message })); } return(Request["returnUri"] != null ? (ActionResult)Redirect(Request["returnUri"]) : RedirectToAction("Index")); }
private static void PreInsertAndBindFiles(Resource resource, ResourceActFilesModel files) { if (resource.ResourceAuthorityActs != null) { for (var i = 0; i < resource.ResourceAuthorityActs.Count; i++) { var act = resource.ResourceAuthorityActs[i]; if (act.IdFile != null) { continue; } if (files.ResourceAuthorityActs.Count <= i) { break; } act.File = CreateActFile(files.ResourceAuthorityActs[i]); } } if (resource.ResourceOperatorActs != null) { for (var i = 0; i < resource.ResourceOperatorActs.Count; i++) { var act = resource.ResourceOperatorActs[i]; if (act.IdFile != null) { continue; } if (files.ResourceOperatorActs.Count <= i) { break; } act.File = CreateActFile(files.ResourceOperatorActs[i]); } } if (resource.ResourceUsingActs != null) { for (var i = 0; i < resource.ResourceUsingActs.Count; i++) { var act = resource.ResourceUsingActs[i]; if (act.IdFile != null) { continue; } if (files.ResourceUsingActs.Count <= i) { break; } act.File = CreateActFile(files.ResourceUsingActs[i]); } } if (resource.ResourceOwnerPersons != null) { for (var i = 0; i < resource.ResourceOwnerPersons.Count; i++) { var person = resource.ResourceOwnerPersons[i]; if (files.ResourceOwnerPersons[i] == null) { continue; } var filePerson = files.ResourceOwnerPersons[i]; if (person.Acts == null) { continue; } for (var j = 0; j < person.Acts.Count; j++) { var act = person.Acts[j]; if (act.IdFile != null) { continue; } if (filePerson.Acts.Count <= j) { break; } act.File = CreateActFile(filePerson.Acts[j]); } } } if (resource.ResourceOperatorPersons != null) { for (var i = 0; i < resource.ResourceOperatorPersons.Count; i++) { var person = resource.ResourceOperatorPersons[i]; if (files.ResourceOperatorPersons[i] == null) { continue; } var filePerson = files.ResourceOperatorPersons[i]; if (person.Acts == null) { continue; } for (var j = 0; j < person.Acts.Count; j++) { var act = person.Acts[j]; if (act.IdFile != null) { continue; } if (filePerson.Acts.Count <= j) { break; } act.File = CreateActFile(filePerson.Acts[j]); } } } }
public Resource InsertResource(Resource resource, ResourceActFilesModel files, IList <RequestPermissionsDepartmentsModel> requestPermissionsDepartments) { PreInsertAndBindFiles(resource, files); UpdateRequestPermissionsDepartments(resource, requestPermissionsDepartments); return(_resourceRepository.InsertResource(resource)); }