unit uDataModulePresupuestosCliente; interface uses DB, Classes, SysUtils, uDADesigntimeCall, uROServiceComponent, uRORemoteService, uROClient, uROBinMessage, uDAScriptingProvider, uDACDSDataTable, uROWinInetHttpChannel, uDADataTable, uDABINAdapter, uDAClientDataModule, uROTypes, uIDataModulePresupuestosCliente, uBizPresupuestosCliente, uBizDetallesPresupuestoCliente, uIDataModulePresupuestosClienteReport, uDataModuleBase, uDAInterfaces, uRODynamicRequest, uDADataStreamer, uDARemoteDataAdapter, uDABin2DataStreamer; type TDataModulePresupuestosCliente = class(TDataModuleBase, IDataModulePresupuestosCliente, IDataModulePresupuestosClienteReport) RORemoteService: TRORemoteService; tbl_PresupuestosCliente: TDACDSDataTable; ds_PedidosCliente: TDADataSource; tbl_PresupuestosCliente_Detalles: TDACDSDataTable; ds_PedidosCliente_Detalles: TDADataSource; tbl_PresupuestoCliente_Articulos_Pendientes: TDACDSDataTable; ds_PresupuestoCliente_Articulos_Pendientes: TDADataSource; tbl_PresupuestoCliente_ArticulosPendientesPedirAProv: TDACDSDataTable; ds_PresupuestoCliente_ArticulosPendientesPedirAProv: TDADataSource; Bin2DataStreamer: TDABin2DataStreamer; rda_PresupuestosCliente: TDARemoteDataAdapter; procedure DAClientDataModuleCreate(Sender: TObject); private function _CloneDataTable (const ADataTable : TDACDSDataTable): TDACDSDataTable; overload; function _GetDetalles : IBizDetallesPresupuestoCliente; protected procedure AsignarClaseNegocio(var APedido: TDACDSDataTable); virtual; public function GetArticulosPendientesPedirAProv(const IDPedido: Integer): IBizPresupuestoClienteArticulosPendientesPedirAProv; function GetArticulosPendientes(const IDPedido: Integer): IBizPresupuestoClienteArticulosPend; function GetItems : IBizPresupuestoCliente; virtual; function GetItem(const ID : Integer) : IBizPresupuestoCliente; function GetNextID(const DataSetName : String) : Integer; function NewItem : IBizPresupuestoCliente; // Report function GetReport(const AID: String): Binary; end; implementation {$R *.DFM} uses cxControls, FactuGES_Intf, uDataModuleConexion, uDataTableUtils, schPedidosClienteClient_Intf, uBizContactos; { TdmPedidosCliente } procedure TDataModulePresupuestosCliente.AsignarClaseNegocio(var APedido: TDACDSDataTable); begin APedido.BusinessRulesID := BIZ_CLIENT_PEDIDO_CLIENTE; end; procedure TDataModulePresupuestosCliente.DAClientDataModuleCreate(Sender: TObject); begin RORemoteService.Channel := dmConexion.Channel; RORemoteService.Message := dmConexion.Message; end; function TDataModulePresupuestosCliente.GetNextID(const DataSetName: String): Integer; var aGeneratorName : String; begin { if DataSetName = nme_PedidosCliente then aGeneratorName := 'GEN_PEDIDOS_CLI_ID'; if DataSetName = nme_PedidosCliente_Detalles then aGeneratorName := 'GEN_PEDIDOS_CLI_DETALLES_ID'; } // Result := (RORemoteService as IsrvPresupuestosCliente).GetNextAutoInc(aGeneratorName) end; function TDataModulePresupuestosCliente.GetReport(const AID: String): Binary; begin Result := (RORemoteService as IsrvPresupuestosCliente).GenerateReport(AID) end; function TDataModulePresupuestosCliente.NewItem: IBizPresupuestoCliente; begin Result := GetItem(ID_NULO) end; function TDataModulePresupuestosCliente._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 TDataModulePresupuestosCliente._GetDetalles: IBizDetallesPresupuestoCliente; var ADetalles : TDACDSDataTable; begin ShowHourglassCursor; try ADetalles := _CloneDataTable(tbl_PresupuestosCliente_Detalles); with ADetalles do begin BusinessRulesID := BIZ_CLIENT_DETALLES_PEDIDO_CLIENTE; DetailOptions := DetailOptions - [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates]; end; Result := (ADetalles as IBizDetallesPresupuestoCliente); finally HideHourglassCursor; end; end; function TDataModulePresupuestosCliente.GetArticulosPendientes( const IDPedido: Integer): IBizPresupuestoClienteArticulosPend; var AArticulos : TDACDSDataTable; begin ShowHourglassCursor; try AArticulos := _CloneDataTable(tbl_PresupuestoCliente_Articulos_Pendientes); AArticulos.BusinessRulesID := BIZ_CLIENT_ARTICULOS_PEND_PEDIDO_CLIENTE; AArticulos.ParamByName('ID_PEDIDO').AsInteger := IDPedido; Result := (AArticulos as IBizPresupuestoClienteArticulosPend); finally HideHourglassCursor; end; end; function TDataModulePresupuestosCliente.GetArticulosPendientesPedirAProv( const IDPedido: Integer): IBizPresupuestoClienteArticulosPendientesPedirAProv; var AArticulos : TDACDSDataTable; begin ShowHourglassCursor; try AArticulos := _CloneDataTable(tbl_PresupuestoCliente_ArticulosPendientesPedirAProv); AArticulos.BusinessRulesID := BIZ_CLIENT_PEDIDO_CLIENTE_ARTICULOS_PENDIENTES_PEDIR_A_PROV; AArticulos.ParamByName('ID_PEDIDO').AsInteger := IDPedido; Result := (AArticulos as IBizPresupuestoClienteArticulosPendientesPedirAProv); finally HideHourglassCursor; end; end; function TDataModulePresupuestosCliente.GetItem(const ID: Integer): IBizPresupuestoCliente; begin ShowHourglassCursor; try Result := Self.GetItems; with Result.DataTable.Where do begin if NotEmpty then AddOperator(opAND); OpenBraket; AddText(fld_PedidosClienteID + ' = ' + IntToStr(ID)); CloseBraket; end; finally HideHourglassCursor; end; end; function TDataModulePresupuestosCliente.GetItems: IBizPresupuestoCliente; var APedido : TDACDSDataTable; begin ShowHourglassCursor; try APedido := _CloneDataTable(tbl_PresupuestosCliente); // EL CAMPO REFERENCIA Y SITUACIÓN TIENEN QUE SER AUTOREFRESH!!!!! APedido.FieldByName(fld_PedidosClienteREFERENCIA).ServerAutoRefresh := TRUE; APedido.FieldByName(fld_PedidosClienteSITUACION).ServerAutoRefresh := TRUE; AsignarClaseNegocio(APedido); with TBizPresupuestoCliente(APedido.BusinessEventsObj) do begin Detalles := _GetDetalles; end; Result := (APedido as IBizPresupuestoCliente); finally HideHourglassCursor; end; end; end.