Fase 3:
- Backend API: Autenticación y autorización básicas con JWT implementadas. Cambio de contraseña funcional. Módulo "Tipos de Pago" (CRUD completo) implementado en el backend (Controlador, Servicio, Repositorio) usando Dapper, transacciones y con lógica de historial. Se incluyen permisos en el token JWT. - Frontend React: Estructura base con Vite, TypeScript, MUI. Contexto de autenticación (AuthContext) que maneja el estado del usuario y el token. Página de Login. Modal de Cambio de Contraseña (forzado y opcional). Hook usePermissions para verificar permisos. Página GestionarTiposPagoPage con tabla, paginación, filtro, modal para crear/editar, y menú de acciones, respetando permisos. Layout principal (MainLayout) con navegación por Tabs (funcionalidad básica de navegación). Estructura de enrutamiento (AppRoutes) que maneja rutas públicas, protegidas y anidadas para módulos.
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Contables
|
||||
{
|
||||
public class CreateTipoPagoDto
|
||||
{
|
||||
[Required(ErrorMessage = "El nombre del tipo de pago es obligatorio.")]
|
||||
[StringLength(50, ErrorMessage = "El nombre no puede exceder los 50 caracteres.")]
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
|
||||
[StringLength(150, ErrorMessage = "El detalle no puede exceder los 150 caracteres.")]
|
||||
public string? Detalle { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace GestionIntegral.Api.Dtos.Contables
|
||||
{
|
||||
public class TipoPagoDto
|
||||
{
|
||||
public int IdTipoPago { get; set; }
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
public string? Detalle { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace GestionIntegral.Api.Dtos.Contables
|
||||
{
|
||||
public class UpdateTipoPagoDto
|
||||
{
|
||||
[Required(ErrorMessage = "El nombre del tipo de pago es obligatorio.")]
|
||||
[StringLength(50, ErrorMessage = "El nombre no puede exceder los 50 caracteres.")]
|
||||
public string Nombre { get; set; } = string.Empty;
|
||||
|
||||
[StringLength(150, ErrorMessage = "El detalle no puede exceder los 150 caracteres.")]
|
||||
public string? Detalle { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user