using CuentasCobrar.CORE.Exceptions; using CuentasCobrar.UI.Helpers; using CuentasCobrar.UI.Models; using CuentasCobrar.UI.Models.Filters; using CuentasCobrar.UI.Services.Interfaces; using Microsoft.AspNetCore.Mvc; using static CuentasCobrar.UI.Helpers.Enum; namespace CuentasCobrar.UI.Controllers { public class PaisController : BaseController { private readonly IPaisAPI _paisAPI; private readonly IUsuarioAPI _usuarioAPI; public PaisController ( IUsuarioAPI usuarioAPI, IPaisAPI paisAPI ) { _paisAPI = paisAPI; _usuarioAPI = usuarioAPI; } public async Task Index ( PaginacionFilterModel filtros ) { List paises = new List (); try { var token = Request.Cookies["CookieToken"]; if (token == null) { string tokenUsuario = await CrearToken ( _usuarioAPI ); token = tokenUsuario; CrearCookies ( tokenUsuario ); } var rolesCookie = Request.Cookies["CookieRoles"]; var listaRoles = new List ( rolesCookie.Split ( "," ) ); if (!listaRoles.Exists ( r => r == "ADMINISTRADOR" || r == "OPERATIVO" )) { throw new AuthorizeException ( 403, "Usuario no autorizado" ); } paises = await _paisAPI.ObtenerPaisesPaginados ( token, filtros ); } 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", "Home" ); } else { CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "País" ); return RedirectToAction ( "Index", "Home" ); } } return View ( paises ); } public async Task ActualizarPais ( PaisViewModel pais, PaginacionFilterModel filtros ) { bool respuesta = false; try { var token = Request.Cookies["CookieToken"]; if (token == null) { string tokenUsuario = await CrearToken ( _usuarioAPI ); token = tokenUsuario; CrearCookies ( tokenUsuario ); } if (ModelState.IsValid) { respuesta = await _paisAPI.ActualizarPais ( token, pais ); if (respuesta) { CustomNotification ( "Se modificó el pais de manera exitosa", TipoNotificacion.success, NotificationPosition.Center, "País" ); return RedirectToAction ( "Index", new RouteValueDictionary ( filtros ) ); } else { CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "País" ); return RedirectToAction ( "Index", new RouteValueDictionary ( filtros ) ); } } else { ViewBag.Paises = await _paisAPI.ObtenerPaisesPaginados ( token, filtros ); ViewBag.Filtros = filtros; return View ( "Editar", pais ); } } 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 RouteValueDictionary ( filtros ) ); } else { CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "País" ); return RedirectToAction ( "Index", new RouteValueDictionary ( filtros ) ); } } } public async Task AgregarPais ( PaisViewModel pais, PaginacionFilterModel filtros ) { bool respuesta = false; try { var token = Request.Cookies["CookieToken"]; if (token == null) { string tokenUsuario = await CrearToken ( _usuarioAPI ); token = tokenUsuario; CrearCookies ( tokenUsuario ); } if (ModelState.IsValid) { respuesta = await _paisAPI.AgregarPais ( token, pais ); if (respuesta) { CustomNotification ( "Se agregó el pais de manera exitosa", TipoNotificacion.success, NotificationPosition.Center, "Pais" ); return RedirectToAction ( "Index", new RouteValueDictionary ( filtros ) ); } else { CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "Pais" ); return RedirectToAction ( "Index", new RouteValueDictionary ( filtros ) ); } } else { ViewBag.Paises = await _paisAPI.ObtenerPaisesPaginados ( token, filtros ); return View ( "Agregar", pais ); } } 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 RouteValueDictionary ( filtros ) ); } else { CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "País" ); return RedirectToAction ( "Index", new RouteValueDictionary ( filtros ) ); } } } public async Task EliminarPais ( int id ) { var token = Request.Cookies["CookieToken"]; if (token == null) { string tokenUsuario = await CrearToken ( _usuarioAPI ); token = tokenUsuario; CrearCookies ( tokenUsuario ); } await _paisAPI.EliminarPais ( token, id ); } public async Task Editar ( int id, PaginacionFilterModel filtros ) { PaisViewModel pais = new PaisViewModel (); try { var token = Request.Cookies["CookieToken"]; if (token == null) { string tokenUsuario = await CrearToken ( _usuarioAPI ); token = tokenUsuario; CrearCookies ( tokenUsuario ); } var rolesCookie = Request.Cookies["CookieRoles"]; var listaRoles = new List ( rolesCookie.Split ( "," ) ); if (!listaRoles.Exists ( r => r == "ADMINISTRADOR" || r == "OPERATIVO" )) { throw new AuthorizeException ( 403, "Usuario no autorizado" ); } pais = await _paisAPI.ObtenerPais ( token, id ); ViewBag.Paises = await _paisAPI.ObtenerPaisesPaginados ( token, filtros ); } 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 RouteValueDictionary ( filtros ) ); } else { CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "País" ); return RedirectToAction ( "Index", new RouteValueDictionary ( filtros ) ); } } return View ( pais ); } public async Task Agregar ( PaginacionFilterModel filtros ) { try { var token = Request.Cookies["CookieToken"]; if (token == null) { string tokenUsuario = await CrearToken ( _usuarioAPI ); token = tokenUsuario; CrearCookies ( tokenUsuario ); } var rolesCookie = Request.Cookies["CookieRoles"]; var listaRoles = new List ( rolesCookie.Split ( "," ) ); if (!listaRoles.Exists ( r => r == "ADMINISTRADOR" || r == "OPERATIVO" )) { throw new AuthorizeException ( 403, "Usuario no autorizado" ); } ViewBag.Paises = await _paisAPI.ObtenerPaisesPaginados ( token, filtros ); } 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 RouteValueDictionary ( filtros ) ); } else { CustomNotification ( "Se produjo un error!", TipoNotificacion.error, NotificationPosition.Center, "País" ); return RedirectToAction ( "Index", new RouteValueDictionary ( filtros ) ); } } return View (); } } }