public async Task <IActionResult> GuardarCambios(string modulo, string subModulo, string rol, string descripcion, int idRol) { if (User.Identity.IsAuthenticated) { string permiso = Permisos("PermisoSubModulo").PSMAPB ? "PermisoSubModulo" : "PermisoModulo"; bool crear = Permisos(permiso).PMMAPL.Where(w => w.Value.Contains("Crear")).Any(); bool actualizar = Permisos(permiso).PMMAPL.Where(w => w.Value.Contains("Actualizar")).Any(); if ((crear && idRol == 0) || (actualizar && idRol != 0)) { dynamic moduloJson = JsonConvert.DeserializeObject(modulo); dynamic subModuloJson = JsonConvert.DeserializeObject(subModulo); List <Col_RolModulos> modulos = new List <Col_RolModulos>(); List <Col_SubModuloModulo> subModulos = new List <Col_SubModuloModulo>(); foreach (dynamic item in moduloJson) { Col_RolModulos _modulo = new Col_RolModulos(); _modulo.ModuloId = item.ModuloId; _modulo.PermisosCrud = item.PermisosCrud; modulos.Add(_modulo); } if (subModuloJson.Count > 0) { foreach (dynamic item in subModuloJson) { Col_SubModuloModulo _subModulos = new Col_SubModuloModulo(); _subModulos.SubModuloId = item.SubModuloId; _subModulos.ModuloId = item.ModuloId; _subModulos.PermisosCrud = item.PermisosCrud; subModulos.Add(_subModulos); } } ApiCallResult result = idRol == 0 ? await service.GuardarAutorizaciones(modulos, subModulos, rol, descripcion) : await service.ActualizarAutorizaciones(modulos, subModulos, rol, descripcion, idRol); return(Json(new { result })); } else { return(NotFound()); } } else { return(RedirectToAction("Index", "Login")); } }
public async Task <ApiCallResult> ActualizarAutorizaciones(List <Col_RolModulos> modulos, List <Col_SubModuloModulo> subModulos, string rolNombre, string descripcion, int idRol) { try { bool status = false; string title = "Error"; string message = "Ya existe un rol con este nombre"; bool existeNombre = await context.Col_Roles.Where(w => w.NombreRol.Equals(rolNombre.ToUpper()) && w.RolId != idRol).AnyAsync(); if (!existeNombre) { status = true; title = "Proceso exitoso"; message = "Los datos fueron actualizados correctamente en la plataforma"; #region Roles Col_Roles _rol = await context.Col_Roles.Where(w => w.RolId.Equals(idRol)).FirstOrDefaultAsync(); _rol.NombreRol = rolNombre.ToUpper(); _rol.Restringir = subModulos.Count() > 0 ? true : false; _rol.FechaActualizacion = DateTime.Now; _rol.Descripcion = descripcion; context.Col_Roles.Update(_rol); #endregion #region Modulos List <Col_RolModulos> _rolModulos = await context.Col_RolModulos.Where(w => w.RolId.Equals(idRol)).ToListAsync(); context.Col_RolModulos.RemoveRange(_rolModulos); int?maxId = await context.Col_RolModulos.MaxAsync(m => (int?)m.Id); int?id = maxId == null ? 1 : maxId + 1; List <Col_RolModulos> rolModulos = new List <Col_RolModulos>(); foreach (Col_RolModulos item in modulos) { Col_RolModulos _rolModulo = new Col_RolModulos(); _rolModulo.Id = Convert.ToInt32(id); _rolModulo.RolId = _rol.RolId; _rolModulo.ModuloId = item.ModuloId; _rolModulo.PermisosCrud = item.PermisosCrud?.Trim(); rolModulos.Add(_rolModulo); id++; } await context.AddRangeAsync(rolModulos); #endregion #region SubModulos List <Col_SubModuloModulo> _subModulos = await context.Col_SubModuloModulo.Where(w => w.RolId.Equals(idRol)).ToListAsync(); context.Col_SubModuloModulo.RemoveRange(_subModulos); if (subModulos.Count() > 0) { maxId = await context.Col_SubModuloModulo.MaxAsync(m => (int?)m.Id); id = maxId == null ? 1 : maxId + 1; List <Col_RolModulos> queryModulo = modulos.Where(w => !subModulos.Where(s => s.ModuloId == w.ModuloId).Any()).ToList(); List <Col_SubModuloModulo> subModuloModulos = new List <Col_SubModuloModulo>(); foreach (Col_RolModulos item in queryModulo) { Col_SubModuloModulo _subModulo = new Col_SubModuloModulo(); _subModulo.Id = Convert.ToInt32(id); _subModulo.ModuloId = item.ModuloId; _subModulo.SubModuloId = null; _subModulo.RolId = _rol.RolId; _subModulo.PermisosCrud = item.PermisosCrud.Trim(); subModuloModulos.Add(_subModulo); id++; } foreach (Col_SubModuloModulo item in subModulos) { Col_SubModuloModulo _subModulo = new Col_SubModuloModulo(); _subModulo.Id = Convert.ToInt32(id); _subModulo.ModuloId = item.ModuloId; _subModulo.SubModuloId = item.SubModuloId; _subModulo.RolId = _rol.RolId; _subModulo.PermisosCrud = item.PermisosCrud.Trim(); subModuloModulos.Add(_subModulo); id++; } await context.AddRangeAsync(subModuloModulos); } #endregion await context.SaveChangesAsync(); } return(new ApiCallResult { Status = status, Title = title, Message = message }); } #region catch catch (DbEntityValidationException e) { string err = ""; foreach (DbEntityValidationResult eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (DbValidationError ve in eve.ValidationErrors) { err += ve.ErrorMessage; Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } return(new ApiCallResult { Status = false, Title = "Error al guardar", Message = "Favor contacte éste con el administrador" }); } catch (Exception e) { string err = ""; if (e.InnerException != null) { if (e.InnerException.Message != null) { err = (e.InnerException.Message); if (e.InnerException.InnerException != null) { err += e.InnerException.InnerException.Message; } } } else { err = (e.Message); } return(new ApiCallResult { Status = false, Title = "Error al guardar", Message = "Favor contacte éste con el administrador" }); } #endregion }