Tecsitel_FactuGES2/Source/Modulos/Albaranes de proveedor/Model/uBizAlbaranesProveedor.pas

299 lines
8.4 KiB
ObjectPascal
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit uBizAlbaranesProveedor;
interface
uses
Classes, uDADataTable, uDAInterfaces,
schAlbaranesProveedorClient_Intf, uDBSelectionListUtils,
uBizContactos, uBizDetallesAlbaranProveedor;
const
BIZ_CLIENT_ALBARAN_PROVEEDOR = 'Client.AlbaranProveedor';
CTE_TIPO_ALBARAN = 'A';
CTE_TIPO_ALBARAN_DEV = 'D';
type
IBizAlbaranProveedor = interface(IAlbaranesProveedor)
['{8042AD9C-08B1-4236-B0EA-F11C4942DFE4}']
procedure SetProveedor(AValue : IBizProveedor);
function GetProveedor : IBizProveedor;
property Proveedor : IBizProveedor read GetProveedor write SetProveedor;
// Esta propidad es para que el controlador pueda acceder directamente
// a la propiedad Proveedor
procedure _SetProveedor(AValue : IBizProveedor);
function _GetProveedor : IBizProveedor;
property _Proveedor : IBizProveedor read _GetProveedor write _SetProveedor;
function GetDetalles: IBizDetallesAlbaranProveedor;
procedure SetDetalles(Value: IBizDetallesAlbaranProveedor);
property Detalles: IBizDetallesAlbaranProveedor read GetDetalles write SetDetalles;
function EsNuevo : Boolean;
end;
TBizAlbaranProveedor = class(TAlbaranesProveedorDataTableRules, IBizAlbaranProveedor, ISeleccionable)
private
procedure CalcularBaseImponible;
procedure CalcularIVA;
protected
FSeleccionableInterface : ISeleccionable;
FProveedor : IBizProveedor;
FDetalles : IBizDetallesAlbaranProveedor;
FDetallesLink : TDADataSource;
procedure SetProveedor(AValue : IBizProveedor);
function GetProveedor : IBizProveedor;
procedure _SetProveedor(AValue : IBizProveedor);
function _GetProveedor : IBizProveedor;
function GetDetalles: IBizDetallesAlbaranProveedor;
procedure SetDetalles(Value: IBizDetallesAlbaranProveedor);
procedure SetFECHA_ALBARANValue(const aValue: TDateTime); override;
procedure SetID_PEDIDOValue(const aValue: Integer); override;
procedure SetID_ALMACENValue(const aValue: Integer); override;
procedure SetID_FACTURAValue(const aValue: Integer); override;
procedure SetID_FORMA_PAGOValue(const aValue: Integer); override;
procedure IMPORTE_NETOOnChange(Sender: TDACustomField);
procedure IMPORTE_PORTEOnChange(Sender: TDACustomField);
procedure DESCUENTOOnChange(Sender: TDACustomField);
procedure IVAOnChange(Sender: TDACustomField);
procedure OnNewRecord(Sender: TDADataTable); override;
procedure IniciarValoresAlbaranNuevo;
public
procedure CalcularImporteTotal;
function EsNuevo : Boolean;
property Proveedor : IBizProveedor read GetProveedor write SetProveedor;
property _Proveedor : IBizProveedor read _GetProveedor write _SetProveedor;
property Detalles: IBizDetallesAlbaranProveedor read GetDetalles write SetDetalles;
property SeleccionableInterface : ISeleccionable read FSeleccionableInterface
write FSeleccionableInterface implements ISeleccionable;
constructor Create(aDataTable: TDADataTable); override;
destructor Destroy; override;
end;
implementation
uses
SysUtils, Variants, uDataModuleConfiguracion, uDataModuleUsuarios,
uDataTableUtils, DateUtils, uDateUtils, DB, uFactuGES_App;
{ TBizAlbaranProveedor }
procedure TBizAlbaranProveedor.CalcularBaseImponible;
begin
if not Self.DataTable.Editing then
Edit;
IMPORTE_DESCUENTO := IMPORTE_NETO * (DESCUENTO/100);
BASE_IMPONIBLE := IMPORTE_NETO - IMPORTE_DESCUENTO; //+ IMPORTE_PORTE; ya no se tiene en cuenta porque se desglosa por art<72>culo
end;
procedure TBizAlbaranProveedor.CalcularImporteTotal;
begin
DataTable.DisableControls;
DataTable.Fields.FieldEventsDisabled := True;
try
CalcularBaseImponible;
CalcularIVA;
if not Self.DataTable.Editing then
Edit;
IMPORTE_TOTAL := BASE_IMPONIBLE + IMPORTE_IVA;
finally
DataTable.Fields.FieldEventsDisabled := False;
DataTable.EnableControls;
end;
end;
procedure TBizAlbaranProveedor.CalcularIVA;
begin
if not Self.DataTable.Editing then
Edit;
IMPORTE_IVA := (IVA / 100) * (BASE_IMPONIBLE);
end;
constructor TBizAlbaranProveedor.Create(aDataTable: TDADataTable);
begin
inherited;
FProveedor := Nil;
with DataTable do
begin
FieldByName(fld_AlbaranesProveedorIMPORTE_NETO).OnChange := IMPORTE_NETOOnChange;
FieldByName(fld_AlbaranesProveedorIMPORTE_PORTE).OnChange := IMPORTE_PORTEOnChange;
FieldByName(fld_AlbaranesProveedorDESCUENTO).OnChange := DESCUENTOOnChange;
FieldByName(fld_AlbaranesProveedorIVA).OnChange := IVAOnChange;
end;
FDetallesLink := TDADataSource.Create(NIL);
FDetallesLink.DataTable := aDataTable;
FSeleccionableInterface := TSeleccionable.Create(aDataTable);
end;
procedure TBizAlbaranProveedor.DESCUENTOOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
destructor TBizAlbaranProveedor.Destroy;
begin
FProveedor := NIL;
FDetalles := NIL;
FDetallesLink.Free;
FSeleccionableInterface := NIL;
inherited;
end;
function TBizAlbaranProveedor.EsNuevo: Boolean;
begin
Result := (ID < 0);
end;
function TBizAlbaranProveedor.GetProveedor: IBizProveedor;
begin
Result := FProveedor;
end;
procedure TBizAlbaranProveedor.IMPORTE_NETOOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
procedure TBizAlbaranProveedor.IMPORTE_PORTEOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
procedure TBizAlbaranProveedor.IniciarValoresAlbaranNuevo;
begin
ID_EMPRESA := AppFactuGES.EmpresaActiva.ID;
USUARIO := AppFactuGES.UsuarioActivo.UserName;
FECHA_ALBARAN := DateOf(Date);
INCIDENCIAS_ACTIVAS := 0;
TIPO := CTE_TIPO_ALBARAN;
// OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
// ALMAC<41>N PUESTO A CAP<41>N Y PROVISIONAL
ID_ALMACEN := 2;
end;
procedure TBizAlbaranProveedor.IVAOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
function TBizAlbaranProveedor.GetDetalles: IBizDetallesAlbaranProveedor;
begin
Result := FDetalles;
end;
procedure TBizAlbaranProveedor.OnNewRecord(Sender: TDADataTable);
begin
inherited;
ID := GetRecNo; // -1, -2, -3...
IniciarValoresAlbaranNuevo;
end;
procedure TBizAlbaranProveedor.SetProveedor(AValue: IBizProveedor);
var
bEnEdicion : Boolean;
begin
FProveedor := AValue;
if Assigned(FProveedor) then
begin
if not FProveedor.DataTable.Active then
FProveedor.DataTable.Active := True;
if ID_PROVEEDOR <> FProveedor.ID then
begin
bEnEdicion := (DataTable.State in dsEditModes);
if not bEnEdicion then
DataTable.Edit;
ID_PROVEEDOR := FProveedor.ID;
DataTable.Post; //Muy importante ya que es necesario hacer un post de la cabecera antes de a<>adir detalles
//si se quita el id de la cabecera y los detalles se desincroniza
if bEnEdicion then
DataTable.Edit;
end;
end;
end;
function TBizAlbaranProveedor._GetProveedor: IBizProveedor;
begin
Result := FProveedor;
end;
procedure TBizAlbaranProveedor._SetProveedor(AValue: IBizProveedor);
begin
FProveedor := AValue;
end;
procedure TBizAlbaranProveedor.SetDetalles(Value: IBizDetallesAlbaranProveedor);
begin
FDetalles := Value;
EnlazarMaestroDetalle(FDetallesLink, FDetalles);
end;
procedure TBizAlbaranProveedor.SetFECHA_ALBARANValue(const aValue: TDateTime);
begin
if EsFechaVacia(aValue) then
SetFieldNull(DataTable, fld_AlbaranesProveedorFECHA_ALBARAN)
else
inherited;
end;
procedure TBizAlbaranProveedor.SetID_ALMACENValue(const aValue: Integer);
begin
if (aValue = 0) then
SetFieldNull(DataTable, fld_AlbaranesProveedorID_ALMACEN)
else
inherited;
end;
procedure TBizAlbaranProveedor.SetID_FACTURAValue(const aValue: Integer);
begin
if (aValue = 0) then
SetFieldNull(DataTable, fld_AlbaranesProveedorID_FACTURA)
else
inherited;
end;
procedure TBizAlbaranProveedor.SetID_FORMA_PAGOValue(const aValue: Integer);
begin
if (aValue = 0) then
SetFieldNull(DataTable, fld_AlbaranesProveedorID_FORMA_PAGO)
else
inherited;
end;
procedure TBizAlbaranProveedor.SetID_PEDIDOValue(const aValue: Integer);
begin
if (aValue = 0) then
SetFieldNull(DataTable, fld_AlbaranesProveedorID_PEDIDO)
else
inherited;
end;
initialization
RegisterDataTableRules(BIZ_CLIENT_ALBARAN_PROVEEDOR, TBizAlbaranProveedor);
finalization
end.