private ActionResult addColumn(AjaxPersonaAppRolesForTable model) { var context = COREobject.i.Context; #region ColHeader int priority; if (context.AppRoles.Count(r => r.ApplicationId == model.AppID) > 0) { priority = context.AppRoles.Where(r => r.ApplicationId == model.AppID).Max(r => r.Priority) + 1; } else { priority = 1; } ColumnHeaderAppRolesForTable newColHeader = new ColumnHeaderAppRolesForTable(-1, "New role", priority); if (model.ColHeaders == null) { model.ColHeaders = new List <ColumnHeaderAppRolesForTable>(); } model.ColHeaders.Add(newColHeader); context.AppRoles.Add(new PersonaAppRole { Name = "New role", Priority = priority, ApplicationId = model.AppID }); /*context.SaveChanges();*/ #endregion #region Data if (model.Data == null) { model.Data = new List <bool[]>(); } model.Data.Add(new bool[model.RowHeaders.Count]); #endregion return(View("App", model)); }
private ActionResult saveModel(AjaxPersonaAppRolesForTable model) { #region Column headers validation foreach (ColumnHeaderAppRolesForTable colHeader in model.ColHeaders) { colHeader.Name = colHeader.Name.Trim(); if (String.IsNullOrWhiteSpace(colHeader.Name)) { ViewBag.BadNameRole = true; ViewBag.Saved = false; return(View("App", model)); } } for (int i = 0; i < model.ColHeaders.Count; i++) { ColumnHeaderAppRolesForTable currHeader = model.ColHeaders[i]; for (int j = i + 1; j < model.ColHeaders.Count; j++) { if (model.DeletedCols == null || (!model.DeletedCols.Contains(i) && !model.DeletedCols.Contains(j))) { if (currHeader.Name == model.ColHeaders[j].Name) { ViewBag.RolesAreEqual = true; ViewBag.Saved = false; return(View("App", model)); } } } if (String.IsNullOrEmpty(currHeader.Priority.ToString()) || currHeader.Priority == 0) { ViewBag.BadPriorityRole = true; ViewBag.Saved = false; return(View("App", model)); } } #endregion #region Save model var context = COREobject.i.Context; Application app = context.Applications.Find(model.AppID); #region Column headers + data IQueryable <PersonaAppRole> roles = context.AppRoles.Where(c => c.ApplicationId == app.Id); #region Save columns int x = 0; foreach (ColumnHeaderAppRolesForTable colHeader in model.ColHeaders) { if (model.DeletedCols == null || !model.DeletedCols.Contains(x)) { #region Add or update column #region New users IDs - Data for this column List <int> NewUsersIDsList = new List <int>(); for (int y = 0; y < model.RowHeaders.Count; y++) { if (model.Data[x][y] == true) { NewUsersIDsList.Add(model.RowHeaders[y].Id); } } #endregion if (colHeader.Id != -1) { #region Update role PersonaAppRole realRole = roles.FirstOrDefault(a => a.Id == colHeader.Id); if (realRole != null) { #region Role name if (realRole.Name != colHeader.Name) { realRole.Name = colHeader.Name; } if (realRole.Priority != colHeader.Priority) { realRole.Priority = colHeader.Priority; } #endregion context.Users_Roles.RemoveRange(context.Users_Roles.Where(r => r.RoleName == realRole.Name && r.ApplicationId == realRole.ApplicationId)); foreach (int id in NewUsersIDsList) { context.Users_Roles.Add(new User_Role() { RoleName = realRole.Name, Application = realRole.Application, UserId = id }); } context.SaveChanges(); } #endregion } else { #region New role PersonaAppRole realRole = new PersonaAppRole(); realRole.Application = app; realRole.Name = colHeader.Name; realRole.Priority = colHeader.Priority; if (realRole.Name == "New role") { } #region Fill realRole with users foreach (int id in NewUsersIDsList) { context.Users_Roles.Add(new User_Role() { RoleName = realRole.Name, Application = realRole.Application, UserId = id }); } #endregion realRole = context.AppRoles.Add(realRole); try { context.SaveChanges(); } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { string text = "Entity of type \"" + eve.Entry.Entity.GetType().Name + "\" in state \"" + eve.Entry.State + "\" has the following validation errors:"; foreach (var ve in eve.ValidationErrors) { string message = "- Property: \"" + ve.PropertyName + "\", Error: \"" + ve.ErrorMessage + "\""; } } throw; } #endregion colHeader.Id = realRole.Id; #endregion } #endregion } else { #region Delete column (role) if (colHeader.Id != -1) { PersonaAppRole role = context.AppRoles.First(a => a.Id == colHeader.Id); context.AppRoles.Remove(role); context.SaveChanges(); } #endregion } x++; } #endregion try { context.SaveChanges(); } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { string text = "Entity of type \"" + eve.Entry.Entity.GetType().Name + "\" in state \"" + eve.Entry.State + "\" has the following validation errors:"; foreach (var ve in eve.ValidationErrors) { string message = "- Property: \"" + ve.PropertyName + "\", Error: \"" + ve.ErrorMessage + "\""; } } throw; } #endregion ViewBag.Saved = true; return(RedirectToAction("App", "Roles", new { @Id = model.AppID }));//App(model.AppID); }