Пример #1
0
        public async Task <IActionResult> Delete(Guid?id)
        {
            var validateToken = await ValidatedToken(_configuration, _getHelper, "contacto");

            if (validateToken != null)
            {
                return(validateToken);
            }

            if (!await ValidateModulePermissions(_getHelper, moduloId, eTipoPermiso.PermisoEscritura))
            {
                return(RedirectToAction(nameof(Index)));
            }

            if (id == null)
            {
                TempData["toast"] = "Identificador incorrecto.";
                return(RedirectToAction(nameof(Index)));
            }

            var usuario = await _getHelper.GetUsuarioByIdAsync((Guid)id);

            if (usuario == null)
            {
                TempData["toast"] = "Usuario inexistente (identificador incorrecto).";
                return(RedirectToAction(nameof(Index)));
            }

            var sesiones = await _context.Sesiones.Where(s => s.UsuarioID == (Guid)id).ToListAsync();

            if (sesiones != null)
            {
                string rutaSesion = "";
                string directorio = _configuration.GetValue <string>("DirectorioSesion");

                foreach (var sesion in sesiones)
                {
                    _context.Remove(sesion);
                    rutaSesion = $"{directorio}//{sesion.SessionID}.config";
                    if (System.IO.File.Exists(rutaSesion))
                    {
                        System.IO.File.Delete(rutaSesion);
                    }
                }
            }

            var usuariosModulos = await _context.UsuariosModulos.Where(u => u.UsuarioID == (Guid)id).ToListAsync();

            if (usuariosModulos != null)
            {
                foreach (var item in usuariosModulos)
                {
                    _context.Remove(item);
                }
            }

            try
            {
                _context.Usuarios.Remove(usuario);
                await _context.SaveChangesAsync();
                await BitacoraAsync("Baja", usuario);

                TempData["toast"] = "Los datos del usuario fueron eliminados correctamente.";
            }
            catch (Exception ex)
            {
                string excepcion = ex.InnerException != null?ex.InnerException.Message.ToString() : ex.ToString();

                TempData["toast"] = "Los datos del usuario no pueden ser eliminados por la integridad de la información.";
                await BitacoraAsync("Baja", usuario, excepcion);
            }

            return(RedirectToAction(nameof(Index)));
        }