unit uDataModulePedidosProveedor; interface uses DB, Classes, SysUtils, uDADesigntimeCall, uRORemoteService, uROClient, uROBinMessage, uDAScriptingProvider, uDACDSDataTable, uROWinInetHttpChannel, uDADataTable, uDABINAdapter, uDAClientDataModule, uROTypes, uDataModuleBase, uIDataModulePedidosProveedor, uIDataModulePedidosProveedorReport, uBizPedidosProveedor, uBizDetallesPedidoProveedor, uDARemoteDataAdapter, uDADataStreamer, uDABin2DataStreamer, uDAInterfaces, uDAMemDataTable; type TDataModulePedidosProveedor = class(TDataModuleBase, IDataModulePedidosProveedor, IDataModulePedidosProveedorReport) RORemoteService: TRORemoteService; Bin2DataStreamer: TDABin2DataStreamer; rda_PedidosProveedor: TDARemoteDataAdapter; tbl_PedidosProveedor: TDAMemDataTable; ds_PedidosProveedor: TDADataSource; tbl_PedidosProveedor_Articulos_Pendientes: TDAMemDataTable; ds_PedidosProveedor_Articulos_Pendientes: TDADataSource; tbl_PedidosProveedor_Detalles: TDAMemDataTable; ds_PedidosProveedor_Detalles: TDADataSource; tbl_ListaAnosPedidos: TDAMemDataTable; ds_ListaAnosPedidos: TDADataSource; tbl_PedidosProveedorConArticuloBuscado: TDAMemDataTable; ds_PedidosProveedorConArticuloBuscado: TDADataSource; procedure DAClientDataModuleCreate(Sender: TObject); private function _GetDetalles : IBizDetallesPedidoProveedor; protected procedure AsignarClaseNegocio(var APedido: TDAMemDataTable); virtual; public function GetAnosItems : TStringList; function GetItems : IBizPedidoProveedor; virtual; function GetItem(const ID : Integer) : IBizPedidoProveedor; function NewItem : IBizPedidoProveedor; function GetArticulosPendientes(const IDPedido: Integer): IBizDetallesPedidoProveedorPend; function GetPedidosConArticulo(const Concepto: String; const isEqual: Boolean = false): IBizPedidoProveedor; // Report function GetReport(const AID: String; const VerPrecios: Boolean = false): Binary; function GetRptPDFPedido(const AID: Integer; const VerPrecios: Boolean = false): Binary; end; implementation {$R *.DFM} uses cxControls, FactuGES_Intf, uDataModuleConexion, uDialogUtils, uDataTableUtils, schPedidosProveedorClient_Intf, uBizContactos; { TdmPedidosProveedor } procedure TDataModulePedidosProveedor.AsignarClaseNegocio(var APedido: TDAMemDataTable); begin APedido.BusinessRulesID := BIZ_CLIENT_PEDIDO_PROVEEDOR; end; procedure TDataModulePedidosProveedor.DAClientDataModuleCreate(Sender: TObject); begin RORemoteService.Channel := dmConexion.Channel; RORemoteService.Message := dmConexion.Message; end; function TDataModulePedidosProveedor.GetReport(const AID: String; const VerPrecios: Boolean = false): Binary; begin Result := (RORemoteService as IsrvPedidosProveedor).GenerateReport(AID, VerPrecios) end; function TDataModulePedidosProveedor.GetRptPDFPedido(const AID: Integer; const VerPrecios: Boolean = false): Binary; var AParam : TIntegerArray; begin AParam := TIntegerArray.Create; try AParam.Add(AID); Result := (RORemoteService as IsrvPedidosProveedor).GenerarInformeEnPDF(AParam, VerPrecios) finally FreeANDNIL(AParam) end; end; function TDataModulePedidosProveedor.NewItem: IBizPedidoProveedor; begin Result := GetItem(ID_NULO) end; function TDataModulePedidosProveedor._GetDetalles: IBizDetallesPedidoProveedor; var ADetalles : TDAMemDataTable; begin ShowHourglassCursor; try ADetalles := CloneDataTable(tbl_PedidosProveedor_Detalles); with ADetalles do begin BusinessRulesID := BIZ_CLIENT_DETALLES_PEDIDO_PROVEEDOR; DetailOptions := DetailOptions - [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates]; end; Result := (ADetalles as IBizDetallesPedidoProveedor); finally HideHourglassCursor; end; end; function TDataModulePedidosProveedor.GetAnosItems: TStringList; var AListaAnos: TStringList; begin AListaAnos := TStringList.Create; ShowHourglassCursor; try with tbl_ListaAnosPedidos do begin Open; First; while not eof do begin AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString])); Next; end; Close; end; Result := AListaAnos; finally HideHourglassCursor; end; end; function TDataModulePedidosProveedor.GetArticulosPendientes(const IDPedido: Integer): IBizDetallesPedidoProveedorPend; var AArticulos : TDAMemDataTable; Condicion: TDAWhereExpression; begin ShowHourglassCursor; try AArticulos := CloneDataTable(tbl_PedidosProveedor_Articulos_Pendientes); AArticulos.BusinessRulesID := BIZ_CLIENT_DETALLES_PEDIDO_PROVEEDOR_PEND; with AArticulos.DynamicWhere do begin // (ID = :ID) Condicion := NewBinaryExpression(NewField('', fld_PedidosProveedor_DetallesID_PEDIDO), NewConstant(IDPedido, datInteger), dboEqual); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; // AArticulos.ParamByName(fld_PedidosProveedor_DetallesID_PEDIDO).AsInteger := IDPedido; Result := (AArticulos as IBizDetallesPedidoProveedorPend); finally HideHourglassCursor; end; end; function TDataModulePedidosProveedor.GetItem(const ID: Integer): IBizPedidoProveedor; var Condicion: TDAWhereExpression; begin ShowHourglassCursor; try Result := Self.GetItems; with Result.DataTable.DynamicWhere do begin // (ID = :ID) Condicion := NewBinaryExpression(NewField('', fld_PedidosProveedorID), NewConstant(ID, datInteger), dboEqual); if IsEmpty then Expression := Condicion else Expression := NewBinaryExpression(Expression, Condicion, dboAnd); end; finally HideHourglassCursor; end; end; function TDataModulePedidosProveedor.GetItems: IBizPedidoProveedor; var APedido : TDAMemDataTable; begin ShowHourglassCursor; try APedido := CloneDataTable(tbl_PedidosProveedor); AsignarClaseNegocio(APedido); // EL CAMPO REFERENCIA TIENE QUE SER AUTOREFRESH!!!!! APedido.FieldByName(fld_PedidosProveedorREFERENCIA).ServerAutoRefresh := TRUE; with TBizPedidoProveedor(APedido.BusinessEventsObj) do begin Detalles := _GetDetalles; end; Result := (APedido as IBizPedidoProveedor); finally HideHourglassCursor; end; end; function TDataModulePedidosProveedor.GetPedidosConArticulo(const Concepto: String; const isEqual: Boolean = false): IBizPedidoProveedor; var APedidos : TDAMemDataTable; Condicion, Filtro: TDAWhereExpression; ACadena: String; Campos : array[0..0] of string; I : Integer; begin ShowHourglassCursor; try // Convertimos el texto a MAYÚSCULAS para compararlo con campos también en MAYÚSCULAS ACadena := '%' + UpperCase(Concepto) + '%'; Campos[0] := fld_PedidosProveedorCONCEPTO_BUSQUEDA; APedidos := CloneDataTable(tbl_PedidosProveedorConArticuloBuscado); APedidos.BusinessRulesID := BIZ_CLIENT_PEDIDO_PROVEEDOR; with APedidos.DynamicWhere do begin Filtro := nil; for I := Low(Campos) to High(Campos) do begin Condicion := NewBinaryExpression( NewField('', Campos[I]), NewConstant(ACadena, datString), dboLike ); if Filtro = nil then Filtro := Condicion else Filtro := NewBinaryExpression(Filtro, Condicion, dboOr); end; // Aplicar filtro if IsEmpty then Expression := Filtro else Expression := NewBinaryExpression(Expression, Filtro, dboAnd); end; Result := (APedidos as IBizPedidoProveedor); finally HideHourglassCursor; end; end; end.