feat: Implementación de Secciones, Recargos, Porc. Pago Dist. y backend E/S Dist.
Backend API:
- Recargos por Zona (`dist_RecargoZona`):
- CRUD completo (Modelos, DTOs, Repositorio, Servicio, Controlador).
- Endpoints anidados bajo `/publicaciones/{idPublicacion}/recargos`.
- Lógica de negocio para vigencias (cierre/reapertura de períodos).
- Auditoría en `dist_RecargoZona_H`.
- Porcentajes de Pago Distribuidores (`dist_PorcPago`):
- CRUD completo (Modelos, DTOs, Repositorio, Servicio, Controlador).
- Endpoints anidados bajo `/publicaciones/{idPublicacion}/porcentajespago`.
- Lógica de negocio para vigencias.
- Auditoría en `dist_PorcPago_H`.
- Porcentajes/Montos Pago Canillitas (`dist_PorcMonPagoCanilla`):
- CRUD completo (Modelos, DTOs, Repositorio, Servicio, Controlador).
- Endpoints anidados bajo `/publicaciones/{idPublicacion}/porcentajesmoncanilla`.
- Lógica de negocio para vigencias.
- Auditoría en `dist_PorcMonPagoCanilla_H`.
- Secciones de Publicación (`dist_dtPubliSecciones`):
- CRUD completo (Modelos, DTOs, Repositorio, Servicio, Controlador).
- Endpoints anidados bajo `/publicaciones/{idPublicacion}/secciones`.
- Auditoría en `dist_dtPubliSecciones_H`.
- Entradas/Salidas Distribuidores (`dist_EntradasSalidas`):
- Implementado backend (Modelos, DTOs, Repositorio, Servicio, Controlador).
- Lógica para determinar precios/recargos/porcentajes aplicables.
- Cálculo de monto y afectación de saldos de distribuidores en `cue_Saldos`.
- Auditoría en `dist_EntradasSalidas_H`.
- Correcciones de Mapeo Dapper:
- Aplicados alias explícitos en repositorios de RecargoZona, PorcPago, PorcMonCanilla, PubliSeccion,
Canilla, Distribuidor y Precio para asegurar mapeo correcto de IDs y columnas.
Frontend React:
- Recargos por Zona:
- `recargoZonaService.ts`.
- `RecargoZonaFormModal.tsx` para crear/editar períodos de recargos.
- `GestionarRecargosPublicacionPage.tsx` para listar y gestionar recargos por publicación.
- Porcentajes de Pago Distribuidores:
- `porcPagoService.ts`.
- `PorcPagoFormModal.tsx`.
- `GestionarPorcentajesPagoPage.tsx`.
- Porcentajes/Montos Pago Canillitas:
- `porcMonCanillaService.ts`.
- `PorcMonCanillaFormModal.tsx`.
- `GestionarPorcMonCanillaPage.tsx`.
- Secciones de Publicación:
- `publiSeccionService.ts`.
- `PubliSeccionFormModal.tsx`.
- `GestionarSeccionesPublicacionPage.tsx`.
- Navegación:
- Actualizadas rutas y menús para acceder a la gestión de recargos, porcentajes (dist. y canillita) y secciones desde la vista de una publicación.
- Layout:
- Uso consistente de `Box` con Flexbox en lugar de `Grid` en nuevos modales y páginas para evitar errores de tipo.
This commit is contained in:
@@ -10,6 +10,7 @@ using GestionIntegral.Api.Data.Repositories.Impresion;
|
||||
using GestionIntegral.Api.Services.Impresion;
|
||||
using GestionIntegral.Api.Services.Usuarios;
|
||||
using GestionIntegral.Api.Data.Repositories.Usuarios;
|
||||
using Microsoft.OpenApi.Models;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
@@ -46,11 +47,24 @@ builder.Services.AddScoped<IDistribuidorService, DistribuidorService>();
|
||||
builder.Services.AddScoped<IPublicacionRepository, PublicacionRepository>();
|
||||
builder.Services.AddScoped<IPublicacionService, PublicacionService>();
|
||||
builder.Services.AddScoped<IRecargoZonaRepository, RecargoZonaRepository>();
|
||||
builder.Services.AddScoped<IRecargoZonaService, RecargoZonaService>();
|
||||
builder.Services.AddScoped<IPorcPagoRepository, PorcPagoRepository>();
|
||||
builder.Services.AddScoped<IPorcPagoService, PorcPagoService>();
|
||||
builder.Services.AddScoped<IPorcMonCanillaRepository, PorcMonCanillaRepository>();
|
||||
builder.Services.AddScoped<IPorcMonCanillaService, PorcMonCanillaService>();
|
||||
builder.Services.AddScoped<IPubliSeccionRepository, PubliSeccionRepository>();
|
||||
builder.Services.AddScoped<IPubliSeccionService, PubliSeccionService>();
|
||||
builder.Services.AddScoped<IPrecioRepository, PrecioRepository>();
|
||||
builder.Services.AddScoped<IPrecioService, PrecioService>();
|
||||
builder.Services.AddScoped<IStockBobinaRepository, StockBobinaRepository>();
|
||||
builder.Services.AddScoped<IStockBobinaService, StockBobinaService>();
|
||||
builder.Services.AddScoped<IRegTiradaRepository, RegTiradaRepository>();
|
||||
builder.Services.AddScoped<IRegPublicacionSeccionRepository, RegPublicacionSeccionRepository>();
|
||||
builder.Services.AddScoped<ITiradaService, TiradaService>();
|
||||
builder.Services.AddScoped<ISalidaOtroDestinoRepository, SalidaOtroDestinoRepository>();
|
||||
builder.Services.AddScoped<ISalidaOtroDestinoService, SalidaOtroDestinoService>();
|
||||
builder.Services.AddScoped<IEntradaSalidaDistRepository, EntradaSalidaDistRepository>();
|
||||
builder.Services.AddScoped<IEntradaSalidaDistService, EntradaSalidaDistService>();
|
||||
|
||||
// --- Configuración de Autenticación JWT ---
|
||||
var jwtSettings = builder.Configuration.GetSection("Jwt");
|
||||
@@ -61,6 +75,7 @@ builder.Services.AddAuthentication(options =>
|
||||
{
|
||||
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||
})
|
||||
.AddJwtBearer(options =>
|
||||
{
|
||||
@@ -82,7 +97,7 @@ builder.Services.AddAuthentication(options =>
|
||||
// --- Configuración de Autorización ---
|
||||
builder.Services.AddAuthorization();
|
||||
|
||||
// --- Configuración de CORS --- // <--- MOVER AQUÍ LA CONFIGURACIÓN DE SERVICIOS CORS
|
||||
// --- Configuración de CORS --- //
|
||||
var MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
|
||||
builder.Services.AddCors(options =>
|
||||
{
|
||||
@@ -101,26 +116,75 @@ builder.Services.AddCors(options =>
|
||||
// --- Servicios del Contenedor ---
|
||||
builder.Services.AddControllers();
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
||||
// --- Configuración Avanzada de Swagger/OpenAPI ---
|
||||
builder.Services.AddSwaggerGen(options =>
|
||||
{
|
||||
// Definición general del documento Swagger
|
||||
options.SwaggerDoc("v1", new OpenApiInfo
|
||||
{
|
||||
Version = "v1",
|
||||
Title = "GestionIntegral API",
|
||||
Description = "API para el sistema de Gestión Integral (Migración VB.NET)",
|
||||
// Puedes añadir TermsOfService, Contact, License si lo deseas
|
||||
});
|
||||
|
||||
// (Opcional) Incluir comentarios XML si los usas en tus controladores/DTOs
|
||||
// var xmlFilename = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||
// options.IncludeXmlComments(System.IO.Path.Combine(AppContext.BaseDirectory, xmlFilename));
|
||||
|
||||
// Definición de Seguridad para JWT en Swagger UI
|
||||
// Esto añade el botón "Authorize" en la UI de Swagger para poder pegar el token Bearer
|
||||
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
|
||||
{
|
||||
In = ParameterLocation.Header,
|
||||
Description = "Por favor, introduce 'Bearer' seguido de un espacio y luego tu token JWT.",
|
||||
Name = "Authorization",
|
||||
Type = SecuritySchemeType.ApiKey, // Usar ApiKey para el formato Bearer simple
|
||||
Scheme = "Bearer" // Esquema a usar
|
||||
});
|
||||
|
||||
options.AddSecurityRequirement(new OpenApiSecurityRequirement
|
||||
{
|
||||
{
|
||||
new OpenApiSecurityScheme
|
||||
{
|
||||
Reference = new OpenApiReference
|
||||
{
|
||||
Type = ReferenceType.SecurityScheme,
|
||||
Id = "Bearer" // Debe coincidir con el Id definido en AddSecurityDefinition
|
||||
},
|
||||
Scheme = "oauth2", // Aunque el scheme sea ApiKey, a veces se usa oauth2 aquí para la UI
|
||||
Name = "Bearer",
|
||||
In = ParameterLocation.Header,
|
||||
},
|
||||
new List<string>() // Lista de scopes (vacía si no usas scopes OAuth2 complejos)
|
||||
}
|
||||
});
|
||||
});
|
||||
// --- Fin Configuración Swagger ---
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// --- Configuración del Pipeline HTTP ---
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI();
|
||||
app.UseSwagger(); // Habilita el middleware para servir el JSON de Swagger
|
||||
app.UseSwaggerUI(options => // Habilita el middleware para servir la UI de Swagger
|
||||
{
|
||||
options.SwaggerEndpoint("/swagger/v1/swagger.json", "GestionIntegral API v1");
|
||||
// options.RoutePrefix = string.Empty; // Para servir la UI de Swagger en la raíz (ej: http://localhost:5183/)
|
||||
// Comenta esto si prefieres /swagger (ej: http://localhost:5183/swagger/)
|
||||
});
|
||||
}
|
||||
|
||||
// ¡¡¡NO USAR UseHttpsRedirection si tu API corre en HTTP!!!
|
||||
// Comenta o elimina la siguiente línea si SÓLO usas http://localhost:5183
|
||||
// app.UseHttpsRedirection(); // <--- COMENTAR/ELIMINAR SI NO USAS HTTPS EN API
|
||||
// app.UseHttpsRedirection();
|
||||
|
||||
// --- Aplicar CORS ANTES de Autenticación/Autorización ---
|
||||
app.UseCors(MyAllowSpecificOrigins);
|
||||
// --- Fin aplicar CORS ---
|
||||
|
||||
app.UseAuthentication();
|
||||
app.UseAuthentication(); // Debe ir ANTES de UseAuthorization
|
||||
app.UseAuthorization();
|
||||
|
||||
app.MapControllers();
|
||||
|
||||
Reference in New Issue
Block a user