git-svn-id: https://192.168.0.254/svn/Proyectos.EstudioCarnicero_ProGestion/trunk@4 1b8572a8-2d6b-b84e-8c90-20ed86fa4eca
167 lines
4.8 KiB
ObjectPascal
167 lines
4.8 KiB
ObjectPascal
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.
|