This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
LuisLeon_FactuGES/Source/Base/Utiles/uCalculosUtils.pas

65 lines
1.8 KiB
ObjectPascal

unit uCalculosUtils;
interface
uses
uDADataTable, uDAInterfaces;
const
CAMPO_CANTIDAD = 'CANTIDAD';
CAMPO_IMPORTE_UNIDAD = 'IMPORTE_UNIDAD';
CAMPO_IMPORTE_TOTAL = 'IMPORTE_TOTAL';
CAMPO_DESCUENTO = 'DESCUENTO';
CAMPO_IMPORTE_PORTE = 'IMPORTE_PORTE';
function CalcularLineaConcepto (const ADataTable : TDADataTable): Double;
procedure ValidarCamposLineaConcepto(DataTable: TDADataTable);
implementation
uses
SysUtils, Variants;
function CalcularLineaConcepto (const ADataTable : TDADataTable): Double;
var
ImporteTotal : Double;
begin
ImporteTotal := 0;
with ADataTable do
begin
if (VarIsNull(FieldByName(CAMPO_DESCUENTO).AsVariant)) then
ImporteTotal := FieldByName(CAMPO_CANTIDAD).asInteger * FieldByName(CAMPO_IMPORTE_UNIDAD).AsFloat
else
ImporteTotal := FieldByName(CAMPO_CANTIDAD).asInteger * (FieldByName(CAMPO_IMPORTE_UNIDAD).AsFloat - (FieldByName(CAMPO_IMPORTE_UNIDAD).AsFloat * (FieldByName(CAMPO_DESCUENTO).AsFloat/100)));
if (VarIsNull(FieldByName(CAMPO_IMPORTE_PORTE).AsVariant)) then
ImporteTotal := ImporteTotal
else
ImporteTotal := ImporteTotal + (FieldByName(CAMPO_CANTIDAD).asInteger * FieldByName(CAMPO_IMPORTE_PORTE).AsFloat);
end;
Result := ImporteTotal;
end;
procedure ValidarCamposLineaConcepto(DataTable: TDADataTable);
var
AField: TDAField;
begin
//Validamos la existencia de todos los campos necesarios
AField := DataTable.FindField(CAMPO_DESCUENTO);
if not Assigned(AField) then
raise Exception.Create('Campo ' + CAMPO_DESCUENTO + ' no encontrado (validarCampos)');
AField := DataTable.FindField(CAMPO_IMPORTE_PORTE);
if not Assigned(AField) then
raise Exception.Create('Campo ' + CAMPO_IMPORTE_PORTE + ' no encontrado (validarCampos)');
end;
end.