ProGestion/Base/uBizImportesCabeceraBase.pas
2007-06-21 16:12:43 +00:00

167 lines
4.8 KiB
ObjectPascal
Raw Permalink Blame History

unit uBizImportesCabeceraBase;
interface
uses
uDAInterfaces, uDADataTable;
type
IBizImportesCabecera = interface(IDAStronglyTypedDataTable)
['{566EE7D3-EE6D-4B01-B327-92E288A0C5A0}']
procedure RecalcularImporte;
end;
TBizIVAFieldRules = class(TDAFieldRules)
protected
procedure OnChange(Sender: TDACustomField); override;
end;
TBizDescuentoFieldRules = class(TDAFieldRules)
protected
procedure OnChange(Sender: TDACustomField); override;
end;
TBizBaseImponibleFieldRules = class(TDAFieldRules)
protected
procedure OnChange(Sender: TDACustomField); override;
end;
procedure RecalcularImportesCabecera(aDataTable : TDADataTable); overload;
procedure RecalcularImportesCabecera(aMasterTable, aDetailTable : TDADataTable); overload;
implementation
uses
SysUtils, DB, uBizImportesDetalleBase;
const
fld_BASEIMPONIBLE = 'BASEIMPONIBLE';
fld_IVA = 'IVA';
fld_IMPORTEIVA = 'IMPORTEIVA';
fld_DESCUENTO = 'DESCUENTO';
fld_IMPORTEDESCUENTO = 'IMPORTEDESCUENTO';
fld_IMPORTETOTAL = 'IMPORTETOTAL';
procedure RecalcularImportesCabecera(aDataTable : TDADataTable);
{ Recalcula todos los importes de la cabecera a partir de la base imponible }
var
BIField : TDAField;
IDField : TDAField;
DTOField : TDAField;
IVAField : TDAField;
IIField : TDAField;
ITField : TDAField;
EnEdicion : Boolean;
begin
BIField := aDataTable.FindField(fld_BASEIMPONIBLE);
if not Assigned(BIField) then
raise Exception.Create('Campo BASEIMPONIBLE no encontrado (CalcularImportes)');
IDField := aDataTable.FindField(fld_IMPORTEDESCUENTO);
if not Assigned(IDField) then
raise Exception.Create('Campo IMPORTEDESCUENTO no encontrado (CalcularImportes)');
DTOField := aDataTable.FindField(fld_DESCUENTO);
if not Assigned(DTOField) then
raise Exception.Create('Campo DESCUENTO no encontrado (CalcularImportes)');
IVAField := aDataTable.FindField(fld_IVA);
if not Assigned(IVAField) then
raise Exception.Create('Campo IVA no encontrado (CalcularImportes)');
IIField := aDataTable.FindField(fld_IMPORTEIVA);
if not Assigned(IIField) then
raise Exception.Create('Campo IMPORTEIVA no encontrado (CalcularImportes)');
ITField := aDataTable.FindField(fld_IMPORTETOTAL);
if not Assigned(ITField) then
raise Exception.Create('Campo IMPORTETOTAL no encontrado (CalcularImportes)');
// <20>Viene en modo edici<63>n?
EnEdicion := (aDataTable.State in dsEditModes);
if not EnEdicion then
aDataTable.Edit;
IDField.Value := BIField.AsCurrency * (DTOField.AsInteger/100);
ITField.Value := BIField.AsCurrency - IDField.AsCurrency;
IIField.Value := ITField.AsCurrency * (IVAField.AsInteger/100);
ITField.Value := ITField.AsCurrency + IIField.AsCurrency;
if EnEdicion then
aDataTable.Edit; // Para dejar la tabla como estaba otra vez
end;
procedure RecalcularImportesCabecera(aMasterTable, aDetailTable : TDADataTable);
{ Recalcula todos los importes de la cabecera a partir de los detalles }
var
aDetalle : IBizImportesDetalle;
BIField : TDAField;
EnEdicion : Boolean;
begin
BIField := aMasterTable.FindField(fld_BASEIMPONIBLE);
if not Assigned(BIField) then
raise Exception.Create('Campo BASEIMPONIBLE no encontrado (CalcularImportes)');
// <20>Viene en modo edici<63>n?
EnEdicion := (aMasterTable.State in dsEditModes);
if not EnEdicion then
aMasterTable.Edit;
BIField.Value := 0;
if aDetailTable.RecordCount > 0 then
if Supports(aDetailTable, IBizImportesDetalle, aDetalle) then
BIField.Value := aDetalle.DarSumaTotalImportes;
RecalcularImportesCabecera(aMasterTable);
if EnEdicion then
aMasterTable.Edit; // Para dejar la tabla como estaba otra vez
end;
{ TBizIVAFieldRules }
procedure TBizIVAFieldRules.OnChange(Sender: TDACustomField);
var
aCabecera : IBizImportesCabecera;
begin
inherited;
if Supports(DataTable, IBizImportesCabecera, aCabecera) then
aCabecera.RecalcularImporte;
end;
{ TBizDescuentoFieldRules }
procedure TBizDescuentoFieldRules.OnChange(Sender: TDACustomField);
var
aCabecera : IBizImportesCabecera;
begin
inherited;
if Supports(DataTable, IBizImportesCabecera, aCabecera) then
aCabecera.RecalcularImporte;
end;
{ TBizBaseImponibleFieldRules }
procedure TBizBaseImponibleFieldRules.OnChange(Sender: TDACustomField);
var
aCabecera : IBizImportesCabecera;
begin
inherited;
if Supports(DataTable, IBizImportesCabecera, aCabecera) then
aCabecera.RecalcularImporte;
end;
initialization
RegisterFieldRules('Client.Field.Descuento', TBizDescuentoFieldRules);
RegisterFieldRules('Client.Field.IVA', TBizIVAFieldRules);
RegisterFieldRules('Client.Field.BaseImponible', TBizBaseImponibleFieldRules);
finalization
end.