unit uDataModuleClientes;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  DB, uDADataTable, uDAScriptingProvider,
  uDACDSDataTable, uDABINAdapter, uROServiceComponent, uRORemoteService,
  uROClient, uROBinMessage, uROWinInetHttpChannel, uBizClientesDescuentos,
  uBizGruposCliente, uBizContactos, uDataModuleContactos,
  uIDataModuleClientes, uDADesigntimeCall;

type
  TDataModuleClientes = class(TDataModuleContactos, IDataModuleClientes)
    tbl_Clientes: TDACDSDataTable;
    ds_Clientes: TDADataSource;
    tbl_ClientesDescuentos: TDACDSDataTable;
    ds_ClientesDescuentos: TDADataSource;
    tbl_GruposCliente: TDACDSDataTable;
    ds_GruposCliente: TDADataSource;
  protected
    function _GetDescuentos: IBizClienteDescuentos;  
  public
    function GetItem(const ID : Integer) : IBizCliente;
    function NewItem : IBizCliente;
    function GetItems : IBizCliente;
    function GetItemsTiendaWeb : IBizCliente;
    function GetNextID(const DataSetName : String) : Integer; override;
    function GetGruposCliente : IBizGrupoCliente;    
  end;

implementation

{$R *.dfm}

uses
  uBizContactosDatosBancarios, cxControls, uDAInterfaces, schContactosClient_Intf,
  uDataTableUtils, Dialogs;

{ TdmClientes }

function TDataModuleClientes.GetGruposCliente: IBizGrupoCliente;
var
  AGrupoCliente : TDACDSDataTable;
begin
  ShowHourglassCursor;
  try
    AGrupoCliente := _CloneDataTable(tbl_GruposCliente);
    AGrupoCliente.BusinessRulesID := BIZ_CLIENT_GRUPOSCLIENTE;
    Result := (AGrupoCliente as IBizGrupoCliente);
  finally
    HideHourglassCursor;
  end;
end;

function TDataModuleClientes.GetItem(const ID: Integer): IBizCliente;
begin
  ShowHourglassCursor;
  try
    Result := Self.GetItems;
    with Result.DataTable.Where do
    begin
      if NotEmpty then
        AddOperator(opAND);
      OpenBraket;
      AddText(fld_ContactosID + ' = ' + IntToStr(ID));
      CloseBraket;
    end;
  finally
    HideHourglassCursor;
  end;
end;

function TDataModuleClientes.GetItems: IBizCliente;
var
  AContacto : TDACDSDataTable;
begin
  ShowHourglassCursor;
  try
    AContacto := _CloneDataTable(tbl_Clientes);
    AContacto.BusinessRulesID := BIZ_CLIENT_CLIENTE;

    with TBizCliente(AContacto.BusinessEventsObj) do
    begin
      DatosBancarios := _GetDatosBancarios;
      Direcciones := _GetDirecciones;
      Descuentos := _GetDescuentos;
      _Categorias := _GetCategorias;
    end;

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

function TDataModuleClientes.GetItemsTiendaWeb: IBizCliente;
begin
  ShowHourglassCursor;
  try
    Result := Self.GetItems;
    with Result.DataTable.Where do
    begin
      if NotEmpty then
        AddOperator(opAND);
      OpenBraket;
      AddText(fld_ClientesTIENDA_WEB + ' = 1');
      CloseBraket;
    end;
  finally
    HideHourglassCursor;
  end;
end;

function TDataModuleClientes.GetNextID(const DataSetName: String): Integer;
var
  aDataSet : String;
  aGeneratorName : String;
begin
  aDataSet := DataSetName;

  if aDataSet = nme_ClientesDescuentos then
  begin
    aGeneratorName := 'GEN_CLIENTES_DTOS_PROV_ID';
    Result := _InternalGetNextID(aGeneratorName);
    Exit;
  end;

  if aDataSet = nme_Clientes then
    aDataSet := nme_Contactos;

  Result := inherited GetNextID(aDataSet);
end;

function TDataModuleClientes.NewItem: IBizCliente;
begin
  Result := GetItem(ID_NULO)
end;

function TDataModuleClientes._GetDescuentos: IBizClienteDescuentos;
var
  ADescuentos : TDACDSDataTable;
begin
  ShowHourglassCursor;
  try
    ADescuentos := _CloneDataTable(tbl_ClientesDescuentos);
    with ADescuentos do
    begin
      BusinessRulesID := BIZ_CLIENT_CLIENTE_DESCUENTOS;
      DetailOptions := DetailOptions -
        [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates];
    end;
    Result := (ADescuentos as IBizClienteDescuentos);
  finally
    HideHourglassCursor;
  end;
end;

end.
