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

interface

uses
  SysUtils, Classes, DB, uDADataTable, uDABINAdapter,
  uDAScriptingProvider,  uROWinInetHttpChannel, uROTypes,
  uRORemoteService, uROClient, uROBinMessage,
  uDADesigntimeCall, uDataModuleBase,

  uIDataModuleRecibosProveedor, uIDataModuleRecibosProveedorReport,
  uBizRecibosProveedor, uBizPagosProveedor, uBizRecibosProvCompensados,
  uDARemoteDataAdapter, uDADataStreamer, uDABin2DataStreamer, uDAInterfaces, uDAMemDataTable;

type
  TDataModuleRecibosProveedor = class(TDataModuleBase, IDataModuleRecibosProveedor, IDataModuleRecibosProveedorReport)
    RORemoteService: TRORemoteService;
    Bin2DataStreamer: TDABin2DataStreamer;
    rda_RecibosProveedor: TDARemoteDataAdapter;
    tbl_PagosProveedor: TDAMemDataTable;
    ds_PagosProveedor: TDADataSource;
    tbl_RecibosCompensadosProv: TDAMemDataTable;
    ds_RecibosCompensadosProv: TDADataSource;
    tbl_RecibosProveedor: TDAMemDataTable;
    ds_RecibosProveedor: TDADataSource;
    tbl_ListaAnosRecibos: TDAMemDataTable;
    ds_ListaAnosRecibos: TDADataSource;
    procedure DAClientDataModuleCreate(Sender: TObject);
  protected
    function _GetPagos: IBizPagosProveedor;
    function _GetRecibosCompensados : IBizRecibosCompensadosProv;
  public
    function GetItems: IBizRecibosProveedor;
    function GetItem(const ID : Integer) : IBizRecibosProveedor;
    function NewItem : IBizRecibosProveedor;
    function GetReport(const ID: Integer): Binary;

    function GetAnosItems : TStringList;    
  end;

implementation

{$R *.DFM}

uses
  FactuGES_Intf, uDataModuleConexion, uDataTableUtils, cxControls, 
  schRecibosProveedorClient_Intf;

{ TDataModuleRecibosProveedor }


function TDataModuleRecibosProveedor.GetReport(const ID: Integer): Binary;
begin
//  Result := (RORemoteService as IsrvRecibosProveedor).GenerateReport(ID);
end;

procedure TDataModuleRecibosProveedor.DAClientDataModuleCreate(Sender: TObject);
begin
  RORemoteService.Channel := dmConexion.Channel;
  RORemoteService.Message := dmConexion.Message;
end;

function TDataModuleRecibosProveedor._GetPagos: IBizPagosProveedor;
var
   APagos : TDAMemDataTable;
begin
   ShowHourglassCursor;
   try
     APagos := CloneDataTable(tbl_PagosProveedor);
     with APagos do
     begin
       BusinessRulesID := BIZ_CLIENT_IBIZPAGOSPROVEEDOR;
       DetailOptions := DetailOptions - [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates];
     end;
     Result := (APagos as IBizPagosProveedor);
   finally
     HideHourglassCursor;
   end;
end;

function TDataModuleRecibosProveedor._GetRecibosCompensados: IBizRecibosCompensadosProv;
var
  ARecibosCompensados : TDAMemDataTable;
begin
  ShowHourglassCursor;
  try
    ARecibosCompensados := CloneDataTable(tbl_RecibosCompensadosProv);
    with ARecibosCompensados do
    begin
      BusinessRulesID := BIZ_CLIENT_RECIBOS_COMPENSADOSPROV;
      DetailOptions := DetailOptions - [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates];
    end;
    Result := (ARecibosCompensados as IBizRecibosCompensadosProv);
  finally
    HideHourglassCursor;
  end;
end;

function TDataModuleRecibosProveedor.GetItems: IBizRecibosProveedor;
var
  AIBizRecibosProveedor : TDAMemDataTable;
begin
  ShowHourglassCursor;
  try
    AIBizRecibosProveedor := CloneDataTable(tbl_RecibosProveedor);
    AIBizRecibosProveedor.BusinessRulesID := BIZ_CLIENT_IBizRecibosProveedor;

    with TBizRecibosProveedor(AIBizRecibosProveedor.BusinessEventsObj) do
         Pagos := _GetPagos;

    with TBizRecibosProveedor(AIBizRecibosProveedor.BusinessEventsObj) do
         RecibosCompensados := _GetRecibosCompensados;

    Result := (AIBizRecibosProveedor as IBizRecibosProveedor);
  finally
    HideHourglassCursor;
  end;
end;

function TDataModuleRecibosProveedor.NewItem: IBizRecibosProveedor;
begin
  Result := GetItem(ID_NULO)
end;

function TDataModuleRecibosProveedor.GetAnosItems: TStringList;
var
  AListaAnos: TStringList;
begin
  AListaAnos := TStringList.Create;
  ShowHourglassCursor;
  try
    with tbl_ListaAnosRecibos do
    begin
      Open;
      First;
      while not eof do
      begin
        AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
        Next;
      end;
      Close;
    end;
    Result := AListaAnos;
  finally
    HideHourglassCursor;
  end;
end;

function TDataModuleRecibosProveedor.GetItem(const ID: Integer): IBizRecibosProveedor;
var
  Condicion: TDAWhereExpression;
begin
  ShowHourglassCursor;
  try
    Result := Self.GetItems;

    with Result.DataTable.DynamicWhere do
    begin
      // (ID = :ID)
      Condicion := NewBinaryExpression(NewField('', fld_RecibosProveedorID), NewConstant(ID, datInteger), dboEqual);

      if IsEmpty then
         Expression := Condicion
      else
         Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
    end;

  finally
    HideHourglassCursor;
  end;
end;

end.
