public DtoActionResult InsertOrUpdate(EntityActiveGroupPolicy activeGroupPolicy) { var actionResult = new DtoActionResult(); var p = new ServiceGroup().GetActiveGroupPolicy(activeGroupPolicy.GroupId); if (p == null) { //insert _uow.ActiveGroupPoliciesRepository.Insert(activeGroupPolicy); _uow.Save(); actionResult.Success = true; actionResult.Id = activeGroupPolicy.Id; } else { //update activeGroupPolicy.Id = p.Id; _uow.ActiveGroupPoliciesRepository.Update(activeGroupPolicy, activeGroupPolicy.Id); _uow.Save(); actionResult.Success = true; actionResult.Id = activeGroupPolicy.Id; } return(actionResult); }
public DtoActionResult Execute(int groupId) { var list = new List <DtoClientPolicy>(); var inactivePolicyIds = new List <int>(); var groupPolicies = new ServiceGroup().GetAssignedPolicies(groupId, new DtoSearchFilter()); string warningMessage = null; if (groupPolicies.Count == 0) { //All Policies have been removed from the group. Remove the active entry if it exists. var currentActiveGroupPolicy = new ServiceGroup().GetActiveGroupPolicy(groupId); if (currentActiveGroupPolicy != null) { new ServiceActiveGroupPolicy().Delete(currentActiveGroupPolicy.Id); } return(new DtoActionResult() { Success = true }); } foreach (var groupPolicy in groupPolicies) { var policyJson = new ServicePolicy().GetActivePolicy(groupPolicy.PolicyId); if (policyJson == null) //Policy hasn't been activated yet { inactivePolicyIds.Add(groupPolicy.PolicyId); continue; } var deserializedPolicy = JsonConvert.DeserializeObject <DtoClientPolicy>(policyJson.PolicyJson); deserializedPolicy.Order = groupPolicy.PolicyOrder; list.Add(deserializedPolicy); } if (inactivePolicyIds.Count > 0) //some of the polices are inactive { var listInactivePolicies = inactivePolicyIds.Select(policyId => new ServicePolicy().GetPolicy(policyId)).ToList(); warningMessage = "Warning: Inactive Policies Are Applied. The Following Assigned Policies Will Not Function Until They Are Activated: " + String.Join(", ", listInactivePolicies.Select(x => x.Name)); if (list.Count == 0) //All Of this groups policies are inactive. Remove the active group entry and stop processing { var currentActiveGroupPolicy = new ServiceGroup().GetActiveGroupPolicy(groupId); if (currentActiveGroupPolicy != null) { new ServiceActiveGroupPolicy().Delete(currentActiveGroupPolicy.Id); } return(new DtoActionResult() { ErrorMessage = warningMessage }); } } var json = JsonConvert.SerializeObject(list); var clientGroupPolicy = new EntityActiveGroupPolicy(); clientGroupPolicy.GroupId = groupId; clientGroupPolicy.PolicyJson = json; new ServiceActiveGroupPolicy().InsertOrUpdate(clientGroupPolicy); //verify info was saved correctly and can be deserialized back to each invdividual policy var activeGroupPolicies = new ServiceActiveGroupPolicy().Get(clientGroupPolicy.Id); try { JsonConvert.DeserializeObject <List <DtoClientPolicy> >(activeGroupPolicies.PolicyJson); if (string.IsNullOrEmpty(warningMessage)) { return new DtoActionResult() { Success = true, Id = clientGroupPolicy.Id } } ; else { return new DtoActionResult() { ErrorMessage = warningMessage } }; } catch (Exception ex) { //back out any changes new ServiceActiveGroupPolicy().Delete(clientGroupPolicy.Id); return(new DtoActionResult { ErrorMessage = "Could Not Verify Group Policy Deserialization", Id = 0 }); //todo: add logging } }