{
===============================================================================
  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 uBizRecibosCliente;

interface

uses
  uDAInterfaces, uDADataTable, uDBSelectionListUtils, schRecibosClienteClient_Intf,
  uBizPagosCliente, uBizRecibosCliCompensados, uBizContactos;

const
  BIZ_CLIENT_IBIZRECIBOSCLIENTE = 'Client.IBizRecibosCliente';

  CTE_PENDIENTE = 'PENDIENTE';
  CTE_COBRADO = 'COBRADO';
  CTE_DEVUELTO = 'DEVUELTO';

type

  IBizRecibosCliente = interface(IRecibosCliente)
  ['{93758493-260C-450D-9018-E5339C2E09B2}']
    function EsNuevo : Boolean;

    // No se puede cambiar el cliente por que depende de la factura
    function GetCliente : IBizCliente;
    property Cliente : IBizCliente read GetCliente;

    // Esta propidad es para que el controlador pueda acceder directamente
    // a la propiedad Cliente
    procedure _SetCliente(AValue : IBizCliente);
    function _GetCliente : IBizCliente;
    property _Cliente : IBizCliente read _GetCliente write _SetCliente;

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

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

  TBizRecibosCliente = class(TRecibosClienteDataTableRules, IBizRecibosCliente, ISeleccionable)
  protected
    FPagos : IBizPagosCliente;
    FPagosLink : TDADataSource;
    FRecibosCompensados: IBizRecibosCompensadosCli;
    FRecibosCompensadosLink : TDADataSource;
    FCliente : IBizCliente;
    FSeleccionableInterface : ISeleccionable;

    // No se puede cambiar el cliente por que depende de la factura
    function GetCliente : IBizCliente;
    property Cliente : IBizCliente read GetCliente;

    // Esta propidad es para que el controlador pueda acceder directamente
    // a la propiedad Cliente
    procedure _SetCliente(AValue : IBizCliente);
    function _GetCliente : IBizCliente;
    property _Cliente : IBizCliente read _GetCliente write _SetCliente;

    procedure SetPagos(AValue : IBizPagosCliente);
    function GetPagos : IBizPagosCliente;

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

    procedure OnNewRecord(Sender: TDADataTable); override;
    function GetSITUACIONValue: String; override;
    procedure SetID_REMESAValue(const aValue: Integer); override;

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

    procedure IniciarValoresIBizRecibosClienteNuevo;
    function EsNuevo : Boolean;

    constructor Create(aDataTable: TDADataTable); override;
    destructor Destroy; override;
  end;

implementation

{ TBizRecibosCliente }

uses
  SysUtils, uDataTableUtils, schContactosClient_Intf;

 function TBizRecibosCliente.GetCliente: IBizCliente;
begin
  Result := FCliente;
end;

function TBizRecibosCliente.GetPagos: IBizPagosCliente;
begin
   Result := FPagos;
end;

function TBizRecibosCliente.GetRecibosCompensados: IBizRecibosCompensadosCli;
begin
  Result := FRecibosCompensados;
end;

function TBizRecibosCliente.GetSITUACIONValue: String;
begin
  result := Trim(DataTable.Fields[idx_RecibosClienteSITUACION].AsString);
end;

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

procedure TBizRecibosCliente.SetPagos(AValue: IBizPagosCliente);
 begin
   FPagos := AValue;
   EnlazarMaestroDetalle(FPagosLink, FPagos);
 end;

procedure TBizRecibosCliente.SetRecibosCompensados(const Value: IBizRecibosCompensadosCli);
begin
  FRecibosCompensados := Value;
  EnlazarMaestroDetalle(FRecibosCompensadosLink, FRecibosCompensados);
end;

function TBizRecibosCliente._GetCliente: IBizCliente;
begin
  Result := FCliente;
end;

procedure TBizRecibosCliente._SetCliente(AValue: IBizCliente);
begin
  FCliente := AValue;
end;

constructor TBizRecibosCliente.Create(aDataTable: TDADataTable);
begin
  inherited;
  FCliente := 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 TBizRecibosCliente.Destroy;
begin
  FPagos := NIL;
  FRecibosCompensados := Nil;
  FreeAndNIL(FPagosLink);
  FreeAndNIL(FRecibosCompensadosLink);  
  FSeleccionableInterface := NIL;
  inherited;
end;

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

procedure TBizRecibosCliente.IniciarValoresIBizRecibosClienteNuevo;
begin
  FECHA_EMISION := Date;
  IMPORTE := 0;
  OTROS_GASTOS := 0;
end;

procedure TBizRecibosCliente.OnNewRecord(Sender: TDADataTable);
begin
  inherited;
  IniciarValoresIBizRecibosClienteNuevo;
end;

initialization
  RegisterDataTableRules(BIZ_CLIENT_IBIZRECIBOSCLIENTE, TBizRecibosCliente);

finalization

end.

