unit uDataModuleProveedores;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uDataModuleContactos, DB, uDADataTable, uDAScriptingProvider,
  uDACDSDataTable, uDABINAdapter, uRORemoteService,
  uROClient, uROBinMessage, uROWinInetHttpChannel, uBizGruposProveedor,

  uIDataModuleProveedores, uBizContactos, uDADesigntimeCall,
  uDARemoteDataAdapter, uDADataStreamer, uRODynamicRequest, uDAInterfaces,
  uDAMemDataTable, uDABin2DataStreamer, uBizSubCuentasContacto;

type
  TDataModuleProveedores = class(TDataModuleContactos, IDataModuleProveedores)
    tbl_GruposProveedor: TDAMemDataTable;
    ds_GruposProveedor: TDADataSource;
    tbl_Proveedores: TDAMemDataTable;
    ds_Proveedores: TDADataSource;
    tbl_SubCuentasContacto: TDAMemDataTable;
    ds_SubCuentasContacto: TDADataSource;
  protected
    function _GetSubCuentas: IBizSubCuentasContacto;
  public
    function GetItem(const ID : Integer) : IBizProveedor;
    function NewItem : IBizProveedor;
    function GetItems : IBizProveedor;
    function GetItemsTiendaWeb : IBizProveedor;
    function GetGruposProveedor : IBizGrupoProveedor;
  end;

implementation

{$R *.dfm}

uses
  cxControls, schContactosClient_Intf, uDataTableUtils;

{ TDataModuleProveedores }

function TDataModuleProveedores.GetGruposProveedor: IBizGrupoProveedor;
var
  AGrupoProveedor : TDAMemDataTable;
begin
  ShowHourglassCursor;
  try
    AGrupoProveedor := CloneDataTable(tbl_GruposProveedor);
    AGrupoProveedor.BusinessRulesID := BIZ_CLIENT_GRUPOSPROVEEDOR;
    Result := (AGrupoProveedor as IBizGrupoProveedor);
  finally
    HideHourglassCursor;
  end;
end;

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

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

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

  finally
    HideHourglassCursor;
  end;
end;

function TDataModuleProveedores.GetItems: IBizProveedor;
var
  AContacto : TDAMemDataTable;
begin
  ShowHourglassCursor;
  try
    AContacto := CloneDataTable(tbl_Proveedores);
    AContacto.BusinessRulesID := BIZ_CLIENT_PROVEEDOR;

    with TBizProveedor(AContacto.BusinessEventsObj) do
    begin
      DatosBancarios := _GetDatosBancarios;
      Direcciones := _GetDirecciones;
      Personal := _GetPersonal;
      SubCuentas := _GetSubCuentas;      
    end;

    Result := (AContacto as IBizProveedor);
  finally
    HideHourglassCursor;
  end;
end;

function TDataModuleProveedores.GetItemsTiendaWeb: IBizProveedor;
var
  Condicion: TDAWhereExpression;
begin
  ShowHourglassCursor;
  try
    Result := Self.GetItems;

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

      Clear;
      Expression := Condicion
    end;

  finally
    HideHourglassCursor;
  end;
end;

function TDataModuleProveedores.NewItem: IBizProveedor;
begin
  Result := GetItem(ID_NULO)
end;

function TDataModuleProveedores._GetSubCuentas: IBizSubCuentasContacto;
var
  ASubCuentas : TDAMemDataTable;
begin
  ShowHourglassCursor;
  try
    ASubCuentas := CloneDataTable(tbl_SubCuentasContacto);
    with ASubCuentas do
    begin
      BusinessRulesID := BIZ_CLIENT_SUBCUENTAS_CONTACTO;
      DetailOptions := DetailOptions -
        [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates];
    end;
    Result := (ASubCuentas as IBizSubCuentasContacto);
  finally
    HideHourglassCursor;
  end;
end;

end.
