TFS_ANTIGUO/TPAtesa_CuentasCobrar/CuentasCobrar.UI/Controllers/RolDeUsuarioController.cs

190 lines
8.7 KiB
C#

using CuentasCobrar.CORE.Exceptions;
using CuentasCobrar.UI.Helpers;
using CuentasCobrar.UI.Models;
using CuentasCobrar.UI.Services.Interfaces;
using Microsoft.AspNetCore.Mvc;
using static CuentasCobrar.UI.Helpers.Enum;
namespace CuentasCobrar.UI.Controllers
{
public class RolDeUsuarioController : BaseController
{
private readonly IRolDeUsuarioAPI _rolDeUsuarioAPI;
private readonly IRolAPI _rolAPI;
private readonly IUsuarioAPI _usuarioAPI;
public RolDeUsuarioController ( IUsuarioAPI usuarioAPI, IRolDeUsuarioAPI rolDeUsuarioAPI, IRolAPI rolAPI )
{
_rolDeUsuarioAPI = rolDeUsuarioAPI;
_rolAPI = rolAPI;
_usuarioAPI = usuarioAPI;
}
public async Task<ActionResult> Index ( string idUsuario, int numeroDePagina, int registrosPorPagina )
{
List<RolDeUsuarioViewModel>? rolesDeUsuario = new List<RolDeUsuarioViewModel> ();
try
{
var token = Request.Cookies["CookieToken"];
if (token == null)
{
string tokenUsuario = await CrearToken ( _usuarioAPI );
token = tokenUsuario;
CrearCookies ( tokenUsuario );
}
rolesDeUsuario = await _rolDeUsuarioAPI.ObtenerRolesDeUsuario ( token, idUsuario );
var roles = await _rolAPI.ObtenerRoles ( token );
foreach (var rolDeUsuario in rolesDeUsuario)
{
rolDeUsuario.DescripcionDeRol = roles.FirstOrDefault ( x => x.IdRol == rolDeUsuario.IdRol ).Descripcion;
}
ViewBag.NumeroDePagina = numeroDePagina;
ViewBag.RegistrosPorPagina = registrosPorPagina;
ViewBag.IdUsuario = idUsuario;
}
catch (Exception ex)
{
if (ex.GetType () == typeof ( AuthorizeException ))
{
AuthorizeException excepcion = ex as AuthorizeException;
CustomNotification ( $"Error {excepcion.number}: {excepcion.Message}", TipoNotificacion.error, NotificationPosition.Center, "Usuario" );
return RedirectToAction ( "Index", "Usuario", new { numeroDePagina = numeroDePagina, registrosPorPagina = registrosPorPagina } );
}
else
{
CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "Rol de Usuario" );
return RedirectToAction ( "Index", "Usuario", new { numeroDePagina = numeroDePagina, registrosPorPagina = registrosPorPagina } );
}
}
return View ( rolesDeUsuario );
}
public async Task<ActionResult> AgregarRolDeUsuario ( RolDeUsuarioViewModel rolDeUsuario, int numeroDePagina, int registrosPorPagina )
{
try
{
var token = Request.Cookies["CookieToken"];
if (token == null)
{
string tokenUsuario = await CrearToken ( _usuarioAPI );
token = tokenUsuario;
CrearCookies ( tokenUsuario );
}
bool respuesta = false;
if (ModelState.IsValid)
{
respuesta = await _rolDeUsuarioAPI.AgregarRolDeUsuario ( token, rolDeUsuario );
if (respuesta)
{
CustomNotification ( "Se agregó el rol de manera exitosa", TipoNotificacion.success, NotificationPosition.Center, "Rol de Usuario" );
return RedirectToAction ( "Index", new { IdUsuario = rolDeUsuario.IdUsuario, numeroDePagina = numeroDePagina, registrosPorPagina = registrosPorPagina } );
}
else
{
CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "Rol de Usuario" );
return RedirectToAction ( "Index", new { IdUsuario = rolDeUsuario.IdUsuario, numeroDePagina = numeroDePagina, registrosPorPagina = registrosPorPagina } );
}
}
else
{
ViewBag.Roles = await _rolAPI.ObtenerRoles ( token );
ViewBag.NumeroDePagina = numeroDePagina;
ViewBag.RegistrosPorPagina = registrosPorPagina;
ViewBag.IdUsuario = rolDeUsuario.IdUsuario;
ViewBag.RolesDeUsuario = await _rolDeUsuarioAPI.ObtenerRolesDeUsuario ( token, rolDeUsuario.IdUsuario );
return View ( "Agregar", rolDeUsuario );
}
}
catch (Exception ex)
{
if (ex.GetType () == typeof ( AuthorizeException ))
{
AuthorizeException excepcion = ex as AuthorizeException;
CustomNotification ( $"Error {excepcion.number}: {excepcion.Message}", TipoNotificacion.error, NotificationPosition.Center, "Usuario" );
return RedirectToAction ( "Index", new { IdUsuario = rolDeUsuario.IdUsuario, numeroDePagina = numeroDePagina, registrosPorPagina = registrosPorPagina } );
}
else
{
CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "Rol de Usuario" );
return RedirectToAction ( "Index", new { IdUsuario = rolDeUsuario.IdUsuario, numeroDePagina = numeroDePagina, registrosPorPagina = registrosPorPagina } );
}
}
}
public async Task EliminarRolDeUsuario ( string idUsuario, int idRol )
{
var token = Request.Cookies["CookieToken"];
if (token == null)
{
string tokenUsuario = await CrearToken ( _usuarioAPI );
token = tokenUsuario;
CrearCookies ( tokenUsuario );
}
await _rolDeUsuarioAPI.EliminarRolDeUsuario ( token, idUsuario, idRol );
}
public async Task<ActionResult> Agregar ( string idUsuario, int numeroDePagina, int registrosPorPagina )
{
try
{
var token = Request.Cookies["CookieToken"];
if (token == null)
{
string tokenUsuario = await CrearToken ( _usuarioAPI );
token = tokenUsuario;
CrearCookies ( tokenUsuario );
}
List<RolDeUsuarioViewModel>? rolesDeUsuario = await _rolDeUsuarioAPI.ObtenerRolesDeUsuario ( token, idUsuario );
List<RolViewModel>? roles = await _rolAPI.ObtenerRoles ( token );
List<RolViewModel>? rolesPosibles = new List<RolViewModel> ();
foreach (var rol in roles)
{
var rolYaAsignado = rolesDeUsuario.FirstOrDefault ( t => t.IdRol == rol.IdRol );
if (rolYaAsignado == null)
{
rolesPosibles.Add ( rol );
}
}
if (rolesPosibles.Count == 0)
{
CustomNotification ( "No existen más roles que agregar!", TipoNotificacion.error, NotificationPosition.Center, "Rol de Usuario" );
return RedirectToAction ( "Index", new { IdUsuario = idUsuario, numeroDePagina = numeroDePagina, registrosPorPagina = registrosPorPagina } );
}
ViewBag.Roles = roles;
ViewBag.RolesPosibles = rolesPosibles;
ViewBag.RolesDeUsuario = rolesDeUsuario;
ViewBag.NumeroDePagina = numeroDePagina;
ViewBag.RegistrosPorPagina = registrosPorPagina;
ViewBag.IdUsuario = idUsuario;
}
catch (Exception ex)
{
if (ex.GetType () == typeof ( AuthorizeException ))
{
AuthorizeException excepcion = ex as AuthorizeException;
CustomNotification ( $"Error {excepcion.number}: {excepcion.Message}", TipoNotificacion.error, NotificationPosition.Center, "Usuario" );
return RedirectToAction ( "Index" );
}
else
{
CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "Rol de Usuario" );
return RedirectToAction ( "Index", new { IdUsuario = idUsuario, numeroDePagina = numeroDePagina, registrosPorPagina = registrosPorPagina } );
}
}
return View ();
}
}
}