unit uDataModulePresupuestos; interface uses SysUtils, Classes, DB, uDAClientDataModule, uDADataTable, uDABINAdapter, uDAScriptingProvider, uDACDSDataTable, uROWinInetHttpChannel, uROServiceComponent, uRORemoteService, uROClient, uROBinMessage, uROTypes, uIDataModulePresupuestos, uIDataModulePresupuestosReport, uBizPresupuestos, uBizDetallesPresupuesto, uDADesigntimeCall, uBizContactos; type TDataModulePresupuestos = class(TDAClientDataModule, IDataModulePresupuestos, IDataModulePresupuestosReport) RORemoteService: TRORemoteService; DABinAdapter: TDABINAdapter; tbl_Presupuestos: TDACDSDataTable; ds_Presupuestos: TDADataSource; tbl_Presupuestos_Detalles: TDACDSDataTable; ds_Presupuestos_Detalles: TDADataSource; DADesigntimeCall1: TDADesigntimeCall; LoginRemoteService: TRORemoteService; ROWinInetHTTPChannel1: TROWinInetHTTPChannel; ROBinMessage1: TROBinMessage; procedure DAClientDataModuleCreate(Sender: TObject); protected function _CloneDataTable (const ADataTable : TDACDSDataTable): TDACDSDataTable; overload; function _GetDetalles : IBizDetallesPresupuesto; public function GetItems : IBizPresupuesto; function GetItem(const ID : Integer) : IBizPresupuesto; function GetNextID(const DataSetName : String) : Integer; function NewItem : IBizPresupuesto; // Report function GetReport(const AID: Integer): Binary; end; implementation {$R *.DFM} uses FactuGES_Intf, uDataTableUtils, uDataModuleConexion, uDAInterfaces, schPresupuestosClient_Intf, uClientesController, cxControls; { TdmPresupuestos } procedure TDataModulePresupuestos.DAClientDataModuleCreate(Sender: TObject); begin RORemoteService.Channel := dmConexion.Channel; RORemoteService.Message := dmConexion.Message; end; function TDataModulePresupuestos.GetNextID(const DataSetName: String): Integer; var aGeneratorName : String; begin if DataSetName = nme_Presupuestos then aGeneratorName := 'GEN_PRESUPUESTOS_ID'; if DataSetName = nme_Presupuestos_Detalles then aGeneratorName := 'GEN_PRESUPUESTOS_DETALLES_ID'; Result := (RORemoteService as IsrvPresupuestos).GetNextAutoInc(aGeneratorName) end; function TDataModulePresupuestos.GetReport(const AID: Integer): Binary; begin Result := (RORemoteService as IsrvPresupuestos).GenerateReport(AID) end; function TDataModulePresupuestos.NewItem: IBizPresupuesto; begin Result := GetItem(ID_NULO) end; function TDataModulePresupuestos._CloneDataTable(const ADataTable : TDACDSDataTable): TDACDSDataTable; begin Result := NIL; if not Assigned(ADataTable) then raise Exception.Create ('No se ha asignado la tabla de origen (CloneDataTable)'); Result := TDACDSDataTable.Create(NIL); CloneDataTable(ADataTable, Result); end; function TDataModulePresupuestos._GetDetalles: IBizDetallesPresupuesto; var ADetalles : TDACDSDataTable; begin ShowHourglassCursor; try ADetalles := _CloneDataTable(tbl_Presupuestos_Detalles); with ADetalles do begin BusinessRulesID := BIZ_CLIENT_DETALLES_PRESUPUESTO; DetailOptions := DetailOptions - [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates]; end; Result := (ADetalles as IBizDetallesPresupuesto); finally HideHourglassCursor; end; end; function TDataModulePresupuestos.GetItem(const ID: Integer): IBizPresupuesto; begin ShowHourglassCursor; try Result := Self.GetItems; with Result.DataTable.Where do begin if NotEmpty then AddOperator(opAND); OpenBraket; AddText('PRESUPUESTOS.' + fld_PresupuestosID + ' = ' + IntToStr(ID)); CloseBraket; end; finally HideHourglassCursor; end; end; function TDataModulePresupuestos.GetItems: IBizPresupuesto; var APresupuesto : TDACDSDataTable; begin ShowHourglassCursor; try APresupuesto := _CloneDataTable(tbl_Presupuestos); APresupuesto.BusinessRulesID := BIZ_CLIENT_PRESUPUESTO; with TBizPresupuesto(APresupuesto.BusinessEventsObj) do begin Detalles := _GetDetalles; end; Result := (APresupuesto as IBizPresupuesto); finally HideHourglassCursor; end; end; end.