From 9fcd4dba9163ca2b890e882353f147cf1e74e135 Mon Sep 17 00:00:00 2001 From: roberto Date: Mon, 12 Jan 2009 18:55:41 +0000 Subject: [PATCH] Se arregla la logica al establecer la fecha de vencimiento de los recibos segun los dias de pago del cliente para que si se asigna el dia de pago 31 no falle en el caso de meses que tengan solo 30 dias git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES2/trunk@387 f4e31baf-9722-1c47-927c-6f952f962d4b --- .../Controller/uFacturasClienteController.pas | 18 +++++++++++++++++- .../uFacturasProveedorController.pas | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas index f001cd4d..d65e53f1 100644 --- a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas +++ b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas @@ -1140,6 +1140,7 @@ var i: Integer; ADiaVencimiento: Integer; ADiasMas: Integer; + BSemaforo: Boolean; begin if not Assigned(AFactura) then @@ -1195,6 +1196,7 @@ begin begin AFechaVencimiento := AFactura.FECHA_FACTURA + AFormaPago.Plazos.NUM_DIAS; ADiasMas := 0; + BSemaforo := False; if (AFactura.Cliente.VENCIMIENTO_FACTURAS_1 <> 0) or (AFactura.Cliente.VENCIMIENTO_FACTURAS_2 <> 0) or (AFactura.Cliente.VENCIMIENTO_FACTURAS_3 <> 0) then @@ -1205,7 +1207,21 @@ begin and (ADiaVencimiento <> AFactura.Cliente.VENCIMIENTO_FACTURAS_3) do begin if ADiaVencimiento = DaysInMonth(AFechaVencimiento) then - ADiaVencimiento := 1 + begin + ADiaVencimiento := 1; + + //Controlamos con una variable semaforo que no nos quedemos en un bucle infinito + //intentando encontrar el dia de pago establecido para el cliente (es el caso de tener + //asignado el dia de pago 30 y llegar febrero en el que no se encuentra dicho dia, o + //tener como dia de pago los días 31 y en el caso de meses de 30 dias no encontrarlo. + if BSemaforo then + begin + ADiasMas := 0; + Break + end + else + BSemaforo := True; + end else Inc(ADiaVencimiento); Inc(ADiasMas); diff --git a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas index 222605a8..ff29cb8c 100644 --- a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas +++ b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas @@ -1124,6 +1124,7 @@ var i: Integer; ADiaVencimiento: Integer; ADiasMas: Integer; + BSemaforo: Boolean; begin if not Assigned(AFactura) then @@ -1172,6 +1173,7 @@ begin begin AFechaVencimiento := AFactura.FECHA_FACTURA + AFormaPago.Plazos.NUM_DIAS; ADiasMas := 0; + BSemaforo := False; if (AFactura.Proveedor.VENCIMIENTO_FACTURAS_1 <> 0) or (AFactura.Proveedor.VENCIMIENTO_FACTURAS_2 <> 0) or (AFactura.Proveedor.VENCIMIENTO_FACTURAS_3 <> 0) then @@ -1182,7 +1184,21 @@ begin and (ADiaVencimiento <> AFactura.Proveedor.VENCIMIENTO_FACTURAS_3) do begin if ADiaVencimiento = DaysInMonth(AFechaVencimiento) then - ADiaVencimiento := 1 + begin + ADiaVencimiento := 1; + + //Controlamos con una variable semaforo que no nos quedemos en un bucle infinito + //intentando encontrar el dia de pago establecido para el cliente (es el caso de tener + //asignado el dia de pago 30 y llegar febrero en el que no se encuentra dicho dia, o + //tener como dia de pago los días 31 y en el caso de meses de 30 dias no encontrarlo. + if BSemaforo then + begin + ADiasMas := 0; + Break + end + else + BSemaforo := True; + end else Inc(ADiaVencimiento); Inc(ADiasMas);