unit uDataModuleContactos; interface uses SysUtils, Classes, DB, DBClient, uIntegerListUtils, uDADataTable, uDABINAdapter, uDAScriptingProvider, uDACDSDataTable, uROWinInetHttpChannel, uRORemoteService, uROClient, uROBinMessage, uBizContactos, uBizContactosDatosBancarios, uBizDireccionesContacto, uIDataModuleEtiquetasContactosReport, uIDataModuleContactos, uDADesigntimeCall, uROTypes, uRODynamicRequest, uDAInterfaces, uDADataStreamer, uDARemoteDataAdapter, uDABin2DataStreamer, uDAMemDataTable, uDataModuleBase, uBizContactosPersonal, uBizContactosDirecciones; type TDataModuleContactos = class(TDataModuleBase, IDataModuleContactos, IDataModuleEtiquetasContactosReport) RORemoteService: TRORemoteService; rda_Contactos: TDARemoteDataAdapter; Bin2DataStreamer: TDABin2DataStreamer; tbl_Contactos: TDAMemDataTable; ds_Contactos: TDADataSource; tbl_DireccionesContacto: TDAMemDataTable; ds_DireccionesContacto: TDADataSource; tbl_DatosBancarios: TDAMemDataTable; ds_DatosBancarios: TDADataSource; tbl_PersonalContacto: TDAMemDataTable; ds_PersonalContacto: TDADataSource; tbl_ContactosDirecciones: TDAMemDataTable; ds_ContactosDirecciones: TDADataSource; procedure DAClientDataModuleCreate(Sender: TObject); procedure DataModuleDestroy(Sender: TObject); public function _GetDatosBancarios : IBizContactosDatosBancarios; function _GetDirecciones: IBizDireccionesContacto; function _GetPersonal: IBizContactoPersonal; function _GetItems (IDCategoria : Integer): IBizContacto; virtual; function NewDireccion : IBizDireccionesContacto; function GetContactosDirecciones : IBizContactosDirecciones; function GetContactoDirecciones(const IDContacto: Integer) : IBizContactosDirecciones; // Report function GetReport(const ListaID: TIntegerList): Binary; end; implementation {$R *.DFM} uses uDataTableUtils, uDataModuleConexion, cxControls, FactuGES_Intf, schContactosClient_Intf, Dialogs; { TdmContactos } procedure TDataModuleContactos.DAClientDataModuleCreate(Sender: TObject); begin RORemoteService.Channel := dmConexion.Channel; RORemoteService.Message := dmConexion.Message; end; procedure TDataModuleContactos.DataModuleDestroy(Sender: TObject); begin // end; function TDataModuleContactos.GetContactoDirecciones(const IDContacto: Integer): IBizContactosDirecciones; begin ShowHourglassCursor; try Result := Self.GetContactosDirecciones; with Result.DataTable.DynamicWhere do begin Clear; // (ID = :ID) Expression := NewBinaryExpression(NewField('', fld_ContactosDireccionesID_CONTACTO), NewConstant(IDContacto, datInteger), dboEqual); end; finally HideHourglassCursor; end; end; function TDataModuleContactos.GetContactosDirecciones: IBizContactosDirecciones; var ADirecciones : TDAMemDataTable; begin ShowHourglassCursor; try ADirecciones := CloneDataTable(tbl_ContactosDirecciones); ADirecciones.BusinessRulesID := BIZ_CLIENT_CONTACTOS_DIRECCIONES; Result := (ADirecciones as IBizContactosDirecciones); finally HideHourglassCursor; end; end; function TDataModuleContactos.GetReport(const ListaID: TIntegerList): Binary; var AParam : TIntegerArray; begin AParam := ListaID.ToIntegerArray; try Result := (RORemoteService as IsrvContactos).GenerarInformeEtiquetas(AParam); finally FreeANDNIL(AParam); end; end; function TDataModuleContactos.NewDireccion: IBizDireccionesContacto; var Condicion: TDAWhereExpression; begin ShowHourglassCursor; try Result := Self._GetDirecciones; with Result.DataTable.DynamicWhere do begin // (ID = :ID) Condicion := NewBinaryExpression(NewField('', fld_DireccionesContactoID), NewConstant(ID_NULO, datInteger), dboEqual); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; finally HideHourglassCursor; end; end; function TDataModuleContactos._GetDatosBancarios: IBizContactosDatosBancarios; var ADatosBancarios : TDAMemDataTable; begin ShowHourglassCursor; try ADatosBancarios := CloneDataTable(tbl_DatosBancarios); with ADatosBancarios do begin BusinessRulesID := BIZ_CLIENT_CONTACTOS_DATOS_BANCARIOS; DetailOptions := DetailOptions - [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates]; end; Result := (ADatosBancarios as IBizContactosDatosBancarios); finally HideHourglassCursor; end; end; function TDataModuleContactos._GetDirecciones: IBizDireccionesContacto; var ADirecciones : TDAMemDataTable; begin ShowHourglassCursor; try ADirecciones := CloneDataTable(tbl_DireccionesContacto); with ADirecciones do begin BusinessRulesID := BIZ_CLIENT_DIRECCIONES_CONTACTO; DetailOptions := DetailOptions - [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates]; end; Result := (ADirecciones as IBizDireccionesContacto); finally HideHourglassCursor; end; end; function TDataModuleContactos._GetItems(IDCategoria: Integer): IBizContacto; var AContacto : TDAMemDataTable; begin ShowHourglassCursor; try AContacto := CloneDataTable(tbl_Contactos); with AContacto do case IDCategoria of CATEGORIA_CLIENTE : BusinessRulesID := BIZ_CLIENT_CLIENTE; CATEGORIA_PROVEEDOR : BusinessRulesID := BIZ_CLIENT_PROVEEDOR; CATEGORIA_VENDEDOR : BusinessRulesID := BIZ_CLIENT_VENDEDOR; end; with TBizContacto(AContacto.BusinessEventsObj) do begin DatosBancarios := _GetDatosBancarios; Direcciones := _GetDirecciones; Personal := _GetPersonal; end; Result := (AContacto as IBizContacto); finally HideHourglassCursor; end; end; function TDataModuleContactos._GetPersonal: IBizContactoPersonal; var APersonal : TDAMemDataTable; begin ShowHourglassCursor; try APersonal := CloneDataTable(tbl_PersonalContacto); with APersonal do begin BusinessRulesID := BIZ_CLIENT_CONTACTO_PERSONAL; DetailOptions := DetailOptions - [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates]; end; Result := (APersonal as IBizContactoPersonal); finally HideHourglassCursor; end; end; end.