{
===============================================================================
  Copyright (©) 2007. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 
  Versión actual: 1.0.0
  Fecha versión actual: 
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit uBizRecibosProveedor;

interface

uses
  uDAInterfaces, uDADataTable, uDBSelectionListUtils, schRecibosProveedorClient_Intf,
  uBizPagosProveedor, uBizRecibosProvCompensados, uBizContactos;

const
  BIZ_CLIENT_IBIZRECIBOSPROVEEDOR = 'Client.IBizRecibosProveedor';

  CTE_PENDIENTE = 'PENDIENTE';
  CTE_PAGADO = 'PAGADO';
  CTE_DEVUELTO = 'DEVUELTO';

type

  IBizRecibosProveedor = interface(IRecibosProveedor)
  ['{FEE753DF-0471-4754-A86C-58BF615929CF}']
    function EsNuevo : Boolean;

    // No se puede cambiar el Proveedor por que depende de la factura
    function GetProveedor : IBizProveedor;
    property Proveedor : IBizProveedor read GetProveedor;

    // 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;

    procedure SetPagos(AValue : IBizPagosProveedor);
    function GetPagos : IBizPagosProveedor;
    property Pagos : IBizPagosProveedor read GetPagos write SetPagos;

    function GetRecibosCompensados: IBizRecibosCompensadosProv;
    procedure SetRecibosCompensados(const Value: IBizRecibosCompensadosProv);
    property RecibosCompensados: IBizRecibosCompensadosProv read GetRecibosCompensados write SetRecibosCompensados;
  end;


  TBizRecibosProveedor = class(TRecibosProveedorDataTableRules, IBizRecibosProveedor, ISeleccionable)
  protected
    FPagos : IBizPagosProveedor;
    FPagosLink : TDADataSource;
    FRecibosCompensados: IBizRecibosCompensadosProv;
    FRecibosCompensadosLink : TDADataSource;
    FProveedor : IBizProveedor;
    FSeleccionableInterface : ISeleccionable;

    // No se puede cambiar el Proveedor por que depende de la factura
    function GetProveedor : IBizProveedor;
    property Proveedor : IBizProveedor read GetProveedor;

    // 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;

    procedure SetPagos(AValue : IBizPagosProveedor);
    function GetPagos : IBizPagosProveedor;
    procedure OnNewRecord(Sender: TDADataTable); override;

    function GetRecibosCompensados: IBizRecibosCompensadosProv;
    procedure SetRecibosCompensados(const Value: IBizRecibosCompensadosProv);

    procedure SetID_REMESAValue(const aValue: Integer); override;

  public
    property RecibosCompensados: IBizRecibosCompensadosProv read GetRecibosCompensados write SetRecibosCompensados;
    property Pagos : IBizPagosProveedor read GetPagos write SetPagos;
    property SeleccionableInterface : ISeleccionable	read FSeleccionableInterface
    					write FSeleccionableInterface
    					implements ISeleccionable;

    procedure IniciarValoresIBizRecibosProveedorNuevo;
    function EsNuevo : Boolean;
    constructor Create(aDataTable: TDADataTable); override;
    destructor Destroy; override;
  end;

implementation

{ TBizRecibosProveedor }

uses
  SysUtils, uDataTableUtils, schContactosClient_Intf;

 function TBizRecibosProveedor.GetProveedor: IBizProveedor;
begin
  Result := FProveedor;
end;

function TBizRecibosProveedor.GetRecibosCompensados: IBizRecibosCompensadosProv;
begin
  Result := FRecibosCompensados;
end;

function TBizRecibosProveedor.GetPagos: IBizPagosProveedor;
begin
   Result := FPagos;
end;

procedure TBizRecibosProveedor.SetID_REMESAValue(const aValue: Integer);
begin
  if (aValue = 0) then
    SetFieldNull(DataTable, fld_RecibosProveedorID_REMESA)
  else
    inherited;
end;

procedure TBizRecibosProveedor.SetPagos(AValue: IBizPagosProveedor);
 begin
   FPagos := AValue;
   EnlazarMaestroDetalle(FPagosLink, FPagos);
 end;

procedure TBizRecibosProveedor.SetRecibosCompensados(const Value: IBizRecibosCompensadosProv);
begin
  FRecibosCompensados := Value;
  EnlazarMaestroDetalle(FRecibosCompensadosLink, FRecibosCompensados);

  if Assigned(FRecibosCompensados) then
     if not FRecibosCompensados.DataTable.Active then
        FRecibosCompensados.DataTable.Active := True;
end;

function TBizRecibosProveedor._GetProveedor: IBizProveedor;
begin
  Result := FProveedor;
end;

procedure TBizRecibosProveedor._SetProveedor(AValue: IBizProveedor);
begin
  FProveedor := AValue;
end;

constructor TBizRecibosProveedor.Create(aDataTable: TDADataTable);
begin
  inherited;
  FProveedor := Nil;
  FPagos := Nil;
  FRecibosCompensados := Nil;

  FPagosLink := TDADataSource.Create(NIL);
  FPagosLink.DataTable := aDataTable;
  FRecibosCompensadosLink := TDADataSource.Create(NIL);
  FRecibosCompensadosLink.DataTable := aDataTable;

	FSeleccionableInterface := TSeleccionable.Create(aDataTable);
end;

destructor TBizRecibosProveedor.Destroy;
begin
  FPagos := NIL;
  FRecibosCompensados := Nil;
  FreeAndNIL(FPagosLink);
  FreeAndNIL(FRecibosCompensadosLink);
  FSeleccionableInterface := NIL;
  inherited;
end;

function TBizRecibosProveedor.EsNuevo: Boolean;
begin
  Result := (ID < 0);
end;

procedure TBizRecibosProveedor.IniciarValoresIBizRecibosProveedorNuevo;
begin
  FECHA_EMISION := Date;
  IMPORTE := 0;
  OTROS_GASTOS := 0;
end;

procedure TBizRecibosProveedor.OnNewRecord(Sender: TDADataTable);
begin
  inherited;
  IniciarValoresIBizRecibosProveedorNuevo;
end;

initialization
  RegisterDataTableRules(BIZ_CLIENT_IBIZRECIBOSPROVEEDOR, TBizRecibosProveedor);

finalization

end.

