git-svn-id: https://192.168.0.254/svn/Proyectos.AlonsoYSal_FactuGES2/trunk@6 40301925-124e-1c4e-b97d-170ad7a8785b
157 lines
4.1 KiB
ObjectPascal
157 lines
4.1 KiB
ObjectPascal
unit uBizDiario;
|
|
|
|
interface
|
|
|
|
uses
|
|
uDAInterfaces, uDADataTable, schContabilidadClient_Intf, uBizApuntes;
|
|
|
|
const
|
|
BIZ_CLIENT_Diario = 'Client.Diario';
|
|
BIZ_CLIENT_EXTRACTOMOVIMIENTO = 'Client.ExtractoMovimiento';
|
|
|
|
type
|
|
IBizDiario = interface(IDiario)
|
|
['{E2924908-0B5A-43DD-B03E-672F592FA19B}']
|
|
end;
|
|
|
|
IBizExtractoMovimiento = interface(IBizDiario)
|
|
['{3875CC17-B845-430F-B537-4733C26956D0}']
|
|
end;
|
|
|
|
TBizDiario = class(TDiarioDataTableRules, IBizDiario)
|
|
end;
|
|
|
|
TBizExtractoMovimiento = class(TBizDiario, IBizExtractoMovimiento)
|
|
private
|
|
FSumaAcumulada: Currency;
|
|
procedure recalcular(const DesdeFinal: Boolean);
|
|
procedure CalcularSaldo;
|
|
|
|
protected
|
|
procedure AfterDelete(Sender: TDADataTable); override;
|
|
procedure AfterPost(Sender: TDADataTable); override;
|
|
procedure AfterOpen(Sender: TDADataTable); override;
|
|
|
|
public
|
|
constructor Create(aDataTable: TDADataTable); override;
|
|
|
|
end;
|
|
|
|
implementation
|
|
{ TBizDiario }
|
|
|
|
|
|
{ TBizExtractoMovimiento }
|
|
|
|
procedure TBizExtractoMovimiento.AfterDelete(Sender: TDADataTable);
|
|
begin
|
|
recalcular(False);
|
|
end;
|
|
|
|
procedure TBizExtractoMovimiento.AfterOpen(Sender: TDADataTable);
|
|
begin
|
|
recalcular(True);
|
|
end;
|
|
|
|
procedure TBizExtractoMovimiento.AfterPost(Sender: TDADataTable);
|
|
{var
|
|
i, x: Integer;
|
|
}
|
|
begin
|
|
//Comprobamos los cambios para solo recalcular en el caso de modificar el importe
|
|
//y añadir un asiento nuevo
|
|
{ for i:=0 to DataTable.Delta.count-1 do
|
|
if (DataTable.Delta.Changes[i].ChangeType = ctInsert) then
|
|
begin
|
|
//Este evento salta dos veces, cuando se hace el post en el cliente
|
|
//y cuando se hace el applyupdates. En el primer caso todavía no se
|
|
//ha asignado el codigo, de esta forma omitiremos el recalculo y
|
|
//optimizamos el número de llamadas al mismo
|
|
if CODIGO > 0 then recalcular(False);
|
|
end
|
|
else if (DataTable.Delta.Changes[i].ChangeType = ctUpdate) then
|
|
if (DataTable.Delta.Changes[i].OldValueByName[fld_AsientosIMPORTE] <> DataTable.Delta.Changes[i].NewValueByName[fld_AsientosIMPORTE]) then
|
|
recalcular(False);
|
|
}
|
|
end;
|
|
|
|
procedure TBizExtractoMovimiento.CalcularSaldo;
|
|
var
|
|
varImportePos: double;
|
|
ABookmark: Pointer;
|
|
|
|
begin
|
|
ABookmark := NIL;
|
|
DataTable.DisableControls;
|
|
DataTable.DisableEventHandlers;
|
|
|
|
try
|
|
ABookmark := DataTable.GetBookMark;
|
|
DataTable.Next;
|
|
//Comprobamos si calculamos desde el principio o desde un asiento intermedio
|
|
if DataTable.EOF
|
|
then
|
|
varImportePos:= FSumaAcumulada
|
|
else
|
|
begin
|
|
varImportePos:= SALDO;
|
|
DataTable.Prior;
|
|
end;
|
|
|
|
while not Self.DataTable.BOF do
|
|
begin
|
|
DataTable.edit;
|
|
SALDO := varImportePos + DEBE - HABER;
|
|
varImportePos := SALDO;
|
|
DataTable.Post;
|
|
DataTable.Prior;
|
|
end;
|
|
finally
|
|
DataTable.GotoBookmark(Abookmark);
|
|
DataTable.FreeBookmark(ABookmark);
|
|
DataTable.EnableControls;
|
|
DataTable.EnableEventHandlers;
|
|
end;
|
|
end;
|
|
|
|
constructor TBizExtractoMovimiento.Create(aDataTable: TDADataTable);
|
|
begin
|
|
inherited;
|
|
FSumaAcumulada := 0;
|
|
end;
|
|
|
|
procedure TBizExtractoMovimiento.recalcular(const DesdeFinal: Boolean);
|
|
begin
|
|
if DesdeFinal then
|
|
begin
|
|
FSumaAcumulada := 0; //Inicializamos la suma acumulada
|
|
DataTable.Last;
|
|
end
|
|
else
|
|
begin
|
|
{
|
|
DataTable.Sort([fld_DiarioFECHA_ASIENTO, fld_DiarioORDEN_ASIENTO],[sdDescending, sdDescending]);
|
|
|
|
//En el caso de ser un CIERRE NUEVO el asiento introducido punteamos "localmente"
|
|
//todos los asientos anteriores al cierre y luego mandamos al servidor puntear en BD
|
|
if TIPOASIENTO = CTE_CIERRE then
|
|
begin
|
|
puntearAsientos(CTE_PUNTEADO);
|
|
dmAsientos.AsignarPunteado(Cuenta.CODIGO, FECHAASIENTO, Cuenta.PENULTIMOCIERRE, CTE_PUNTEADO);
|
|
end;
|
|
}
|
|
end;
|
|
|
|
CalcularSaldo;
|
|
end;
|
|
|
|
initialization
|
|
RegisterDataTableRules(BIZ_CLIENT_Diario, TBizDiario);
|
|
RegisterDataTableRules(BIZ_CLIENT_EXTRACTOMOVIMIENTO, TBizExtractoMovimiento);
|
|
|
|
finalization
|
|
|
|
end.
|
|
|
|
|