feat(contables): cierre mensual de cuenta corriente de distribuidor

Permite congelar el saldo de un distribuidor por empresa a una fecha de
corte y bloquear modificaciones retroactivas sobre el período cerrado.
El saldo se calcula sumando movimientos en rango (sin tocar cue_Saldos).
Incluye reapertura controlada exclusivamente por SuperAdmin, reporte con
saldo inicial, atajo "Desde último cierre", y auditoría del ciclo de
vida _H. Permisos CC001/CC002/CC003. Middleware global mapea bloqueos
por período cerrado a HTTP 409.
This commit is contained in:
2026-05-07 12:03:26 -03:00
parent 7e274ef114
commit 24eaf18fd9
62 changed files with 2813 additions and 162 deletions

View File

@@ -22,7 +22,7 @@ import type { EmpresaDto } from '../../models/dtos/Distribucion/EmpresaDto';
import PagoDistribuidorFormModal from '../../components/Modals/Contables/PagoDistribuidorFormModal';
import { usePermissions } from '../../hooks/usePermissions';
import axios from 'axios';
import { parseApiError } from '../../utils/apiErrorParser';
const GestionarPagosDistribuidorPage: React.FC = () => {
const [pagos, setPagos] = useState<PagoDistribuidorDto[]>([]);
@@ -110,7 +110,7 @@ const GestionarPagosDistribuidorPage: React.FC = () => {
}
cargarPagos();
} catch (err: any) {
const message = axios.isAxiosError(err) && err.response?.data?.message ? err.response.data.message : 'Error al guardar el pago.';
const { message } = parseApiError(err, 'Error al guardar el pago.');
setModalApiErrorMessage(message);
throw err;
}
@@ -121,8 +121,8 @@ const GestionarPagosDistribuidorPage: React.FC = () => {
setPageApiErrorMessage(null);
try { await pagoDistribuidorService.deletePagoDistribuidor(idPago); cargarPagos(); }
catch (err: any) {
const msg = axios.isAxiosError(err) && err.response?.data?.message ? err.response.data.message : 'Error al eliminar.';
setPageApiErrorMessage(msg);
const { message } = parseApiError(err, 'Error al eliminar.');
setPageApiErrorMessage(message);
}
}
handleMenuClose();