public JsonResult SavePermission(ValueList details) { if (details.IsEmpty) { return(Json("ok")); } var model = Session.Get <PermissionModel>(Strings.CachedMODELPermissions); if (model == null) { return(Json("err")); } var ctx1 = PTFContext.Current; var ctx2 = PTFReportsContext.Current; var user = ctx2.UserDetails.First(ud => ud.Ud_id == model.UserID); //Add if (details.Value.Contains('A')) { foreach (string id in details.Split <string>('A')) { var ids = id.Split('_'); int isoId = ids[0].Cast2 <int>(); int compId = ids[1].Cast2 <int>(); if (ids[2] == "all") { ctx2.Permissions.RemoveAllWhere(p => p.UserID == model.UserID && p.IsoID == isoId && p.HoID == compId); foreach (var br in ctx1.Branches.Where(b => b.br_iso_id == model.ISOID && b.br_ho_id == compId)) { ctx2.AddToPermissions(new Permission() { UserID = model.UserID, IsoID = br.br_iso_id, HoID = br.br_ho_id, RetailerID = br.br_id, }); } } else { int branchId = ids[2].Cast2 <int>(); Permission.AddSafe(model.UserID, model.ISOID, compId, branchId); } } } //Remove else { foreach (string id in details.Split <string>('R')) { var ids = id.Split('_'); int isoId = ids[0].Cast2 <int>(); int compId = ids[1].Cast2 <int>(); if (ids[2] == "all") { ctx2.Permissions.RemoveAllWhere( p => p.UserID == model.UserID && p.IsoID == isoId && p.HoID == compId); } else { int branchId = ids[2].Cast2 <int>(); ctx2.Permissions.RemoveFirst( p => p.UserID == model.UserID && p.IsoID == isoId && p.HoID == compId && p.RetailerID == branchId); } } } ctx2.SaveChanges(); ViewData["SelectedBranches"] = Branch.FindForPermissions(user); var result = this.RenderPartialToString("SelectedBrachesPartial", model); return(Json(result, JsonRequestBehavior.AllowGet)); }