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:
2025-05-21 14:58:52 -03:00
parent b6ba52f074
commit e7e185a9cb
140 changed files with 10465 additions and 394 deletions

View File

@@ -0,0 +1,9 @@
export interface CreateEntradaSalidaDistDto {
idPublicacion: number;
idDistribuidor: number;
fecha: string; // "yyyy-MM-dd"
tipoMovimiento: 'Salida' | 'Entrada';
cantidad: number;
remito: number;
observacion?: string | null;
}

View File

@@ -0,0 +1,7 @@
export interface CreatePorcMonCanillaDto {
idPublicacion: number;
idCanilla: number;
vigenciaD: string; // "yyyy-MM-dd"
porcMon: number;
esPorcentaje: boolean;
}

View File

@@ -0,0 +1,6 @@
export interface CreatePorcPagoDto {
idPublicacion: number;
idDistribuidor: number;
vigenciaD: string; // "yyyy-MM-dd"
porcentaje: number;
}

View File

@@ -0,0 +1,5 @@
export interface CreatePubliSeccionDto {
idPublicacion: number;
nombre: string;
estado?: boolean; // Default true en backend
}

View File

@@ -0,0 +1,6 @@
export interface CreateRecargoZonaDto {
idPublicacion: number;
idZona: number;
vigenciaD: string; // "yyyy-MM-dd"
valor: number;
}

View File

@@ -0,0 +1,7 @@
export interface CreateSalidaOtroDestinoDto {
idPublicacion: number;
idDestino: number;
fecha: string; // "yyyy-MM-dd"
cantidad: number;
observacion?: string | null;
}

View File

@@ -0,0 +1,15 @@
export interface EntradaSalidaDistDto {
idParte: number;
idPublicacion: number;
nombrePublicacion: string;
nombreEmpresaPublicacion: string;
idEmpresaPublicacion: number;
idDistribuidor: number;
nombreDistribuidor: string;
fecha: string; // "yyyy-MM-dd"
tipoMovimiento: 'Salida' | 'Entrada';
cantidad: number;
remito: number;
observacion?: string | null;
montoCalculado: number;
}

View File

@@ -0,0 +1,10 @@
export interface PorcMonCanillaDto {
idPorcMon: number;
idPublicacion: number;
idCanilla: number;
nomApeCanilla: string;
vigenciaD: string; // "yyyy-MM-dd"
vigenciaH?: string | null; // "yyyy-MM-dd"
porcMon: number;
esPorcentaje: boolean;
}

View File

@@ -0,0 +1,9 @@
export interface PorcPagoDto {
idPorcentaje: number;
idPublicacion: number;
idDistribuidor: number;
nombreDistribuidor: string;
vigenciaD: string; // "yyyy-MM-dd"
vigenciaH?: string | null; // "yyyy-MM-dd"
porcentaje: number;
}

View File

@@ -0,0 +1,6 @@
export interface PubliSeccionDto {
idSeccion: number;
idPublicacion: number;
nombre: string;
estado: boolean; // true = activa, false = inactiva
}

View File

@@ -0,0 +1,9 @@
export interface RecargoZonaDto {
idRecargo: number;
idPublicacion: number;
idZona: number;
nombreZona: string;
vigenciaD: string; // "yyyy-MM-dd"
vigenciaH?: string | null; // "yyyy-MM-dd"
valor: number;
}

View File

@@ -0,0 +1,10 @@
export interface SalidaOtroDestinoDto {
idParte: number;
idPublicacion: number;
nombrePublicacion: string;
idDestino: number;
nombreDestino: string;
fecha: string; // "yyyy-MM-dd"
cantidad: number;
observacion?: string | null;
}

View File

@@ -0,0 +1,4 @@
export interface UpdateEntradaSalidaDistDto {
cantidad: number;
observacion?: string | null;
}

View File

@@ -0,0 +1,5 @@
export interface UpdatePorcMonCanillaDto {
porcMon: number;
esPorcentaje: boolean;
vigenciaH?: string | null; // "yyyy-MM-dd"
}

View File

@@ -0,0 +1,4 @@
export interface UpdatePorcPagoDto {
porcentaje: number;
vigenciaH?: string | null; // "yyyy-MM-dd"
}

View File

@@ -0,0 +1,4 @@
export interface UpdatePubliSeccionDto {
nombre: string;
estado: boolean;
}

View File

@@ -0,0 +1,4 @@
export interface UpdateRecargoZonaDto {
valor: number;
vigenciaH?: string | null; // "yyyy-MM-dd"
}

View File

@@ -0,0 +1,4 @@
export interface UpdateSalidaOtroDestinoDto {
cantidad: number;
observacion?: string | null;
}

View File

@@ -0,0 +1,7 @@
export interface CambiarEstadoBobinaDto {
nuevoEstadoId: number;
idPublicacion?: number | null;
idSeccion?: number | null;
obs?: string | null;
fechaCambioEstado: string; // "yyyy-MM-dd"
}

View File

@@ -0,0 +1,8 @@
export interface CreateStockBobinaDto {
idTipoBobina: number;
nroBobina: string;
peso: number;
idPlanta: number;
remito: string;
fechaRemito: string; // "yyyy-MM-dd"
}

View File

@@ -0,0 +1,9 @@
import type { DetalleSeccionTiradaDto } from "./DetalleSeccionTiradaDto";
export interface CreateTiradaRequestDto {
idPublicacion: number;
fecha: string; // "yyyy-MM-dd"
idPlanta: number;
ejemplares: number;
secciones: DetalleSeccionTiradaDto[];
}

View File

@@ -0,0 +1,4 @@
export interface DetalleSeccionTiradaDto {
idSeccion: number;
cantPag: number;
}

View File

@@ -0,0 +1,19 @@
export interface StockBobinaDto {
idBobina: number;
idTipoBobina: number;
nombreTipoBobina: string;
nroBobina: string;
peso: number;
idPlanta: number;
nombrePlanta: string;
idEstadoBobina: number;
nombreEstadoBobina: string;
remito: string;
fechaRemito: string; // "yyyy-MM-dd"
fechaEstado?: string | null; // "yyyy-MM-dd"
idPublicacion?: number | null;
nombrePublicacion?: string | null;
idSeccion?: number | null;
nombreSeccion?: string | null;
obs?: string | null;
}

View File

@@ -0,0 +1,17 @@
export interface DetalleSeccionEnListadoDto {
idSeccion: number;
nombreSeccion: string;
cantPag: number;
idRegPublicacionSeccion: number;
}
export interface TiradaDto {
idRegistroTirada: number;
idPublicacion: number;
nombrePublicacion: string;
fecha: string; // "yyyy-MM-dd"
idPlanta: number;
nombrePlanta: string;
ejemplares: number;
seccionesImpresas: DetalleSeccionEnListadoDto[];
totalPaginasSumadas: number;
}

View File

@@ -0,0 +1,8 @@
export interface UpdateStockBobinaDto {
idTipoBobina: number;
nroBobina: string;
peso: number;
idPlanta: number;
remito: string;
fechaRemito: string; // "yyyy-MM-dd"
}