From 1dd65983d3de3c347df63d9e1a86418e88171d13 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 27 Jan 2009 09:27:08 +0000 Subject: [PATCH] =?UTF-8?q?Listados=20de=20presupuestos=20->=20Arreglos=20?= =?UTF-8?q?est=C3=A9ticos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@888 0c75b7a4-871f-7646-8a2f-f78d34cc349f --- .../Informes/1/InformeListadoPresupuestos.fr3 | 29 ++-- .../InformeListadoPresupuestosDesglosado.fr3 | 19 +-- .../Informes/2/InformeListadoPresupuestos.fr3 | 19 +-- .../InformeListadoPresupuestosDesglosado.fr3 | 21 +-- .../uRptPresupuestosCliente_Server.dfm | 1 + .../uRptPresupuestosCliente_Server.pas | 159 +++++++++++++++++- 6 files changed, 192 insertions(+), 56 deletions(-) diff --git a/Source/Informes/1/InformeListadoPresupuestos.fr3 b/Source/Informes/1/InformeListadoPresupuestos.fr3 index ce1b9a34..7a6781b8 100644 --- a/Source/Informes/1/InformeListadoPresupuestos.fr3 +++ b/Source/Informes/1/InformeListadoPresupuestos.fr3 @@ -1,21 +1,19 @@ - + - + - - - + - + - + - + @@ -23,9 +21,9 @@ - + - + @@ -34,21 +32,20 @@ - + - - + - + - + - + diff --git a/Source/Informes/1/InformeListadoPresupuestosDesglosado.fr3 b/Source/Informes/1/InformeListadoPresupuestosDesglosado.fr3 index e2c11856..118f5ee1 100644 --- a/Source/Informes/1/InformeListadoPresupuestosDesglosado.fr3 +++ b/Source/Informes/1/InformeListadoPresupuestosDesglosado.fr3 @@ -1,20 +1,17 @@ - + - - - - - + + + - @@ -24,9 +21,9 @@ - + - + @@ -42,13 +39,13 @@ - + - + diff --git a/Source/Informes/2/InformeListadoPresupuestos.fr3 b/Source/Informes/2/InformeListadoPresupuestos.fr3 index 388e0cda..233c06d3 100644 --- a/Source/Informes/2/InformeListadoPresupuestos.fr3 +++ b/Source/Informes/2/InformeListadoPresupuestos.fr3 @@ -1,16 +1,14 @@ - + - - - - - + + + @@ -23,9 +21,9 @@ - + - + @@ -38,17 +36,16 @@ - - + - + diff --git a/Source/Informes/2/InformeListadoPresupuestosDesglosado.fr3 b/Source/Informes/2/InformeListadoPresupuestosDesglosado.fr3 index 1201a657..de866478 100644 --- a/Source/Informes/2/InformeListadoPresupuestosDesglosado.fr3 +++ b/Source/Informes/2/InformeListadoPresupuestosDesglosado.fr3 @@ -1,20 +1,17 @@ - + - - - - - + + + - @@ -24,9 +21,9 @@ - + - + @@ -42,18 +39,18 @@ - + - + - + diff --git a/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.dfm b/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.dfm index ad318476..891a949c 100644 --- a/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.dfm +++ b/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.dfm @@ -1,6 +1,7 @@ object RptPresupuestosCliente: TRptPresupuestosCliente OldCreateOrder = True OnCreate = DataModuleCreate + OnDestroy = DataModuleDestroy Height = 556 Width = 858 object DADSCabecera: TDADataSource diff --git a/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.pas b/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.pas index 86c64f7b..b93aacbf 100644 --- a/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.pas +++ b/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.pas @@ -85,20 +85,25 @@ type schReport: TDASchema; DataDictionary: TDADataDictionary; procedure DataModuleCreate(Sender: TObject); + procedure DataModuleDestroy(Sender: TObject); private FConnection: IDAConnection; FIdEmpresa: Integer; FFechaInicio: Variant; FFechaFin: Variant; FListaIDClientes: TIntegerArray; + FListaNombresClientes: TStringList; FImporteMinimo: Currency; - + FDesglosado : Boolean; + procedure _GenerarPresupuesto(const AID : Integer); procedure PrepararTablaInforme(ATabla: TDAMemDataTable); procedure PrepararTablaResumenInforme(ATabla: IDADataset); - function _GenerarInforme(const TipoInforme: String): Binary; + function _GenerarInforme(const TipoInforme: String): Binary; + procedure IniciarParametrosInforme; + procedure RecuperarNombresClientes; public function GenerarPresupuesto(const ListaID : TIntegerArray): Binary; function GenerarPresupuestoEnPDF(const ListaID : TIntegerArray): Binary; @@ -110,7 +115,9 @@ implementation {$R *.dfm} uses - uSistemaFunc, StrUtils, uDataModuleServer, schPresupuestosClienteClient_Intf; + uSistemaFunc, StrUtils, uDataModuleServer, schPresupuestosClienteClient_Intf, + uROServer, DataAbstract4_Intf; + const rptInforme = 'InfPresupuestoCliente.fr3'; @@ -132,6 +139,8 @@ begin frxDBDetalles.DataSource := DADSDetalles; frxDBResumen.DataSource := DADSResumen; + FListaNombresClientes := TStringList.Create; + with tbl_Detalles do begin MasterSource := DADSCapitulos; @@ -156,6 +165,48 @@ begin end; end; +procedure TRptPresupuestosCliente.IniciarParametrosInforme; +var + ATextos : TStringList; + ACadena : String; +begin + ATextos := TStringList.Create; + + try + if (not VarIsNull(FFechaInicio)) and (not VarIsNull(FFechaFin)) then + ACadena := Format('Fechas de presupuesto desde el %s hasta el %s', [VarToStr(FFechaInicio), VarToStr(FFechaFin)]) + else + ACadena := 'Sin rango de fechas'; + ATextos.Add(ACadena); + ACadena := ''; + + if (FImporteMinimo > 0) then + begin + ACadena := Format('Presupuestos con importe superior a %m', [FImporteMinimo]); + ATextos.Add(ACadena); + ACadena := ''; + end; + + if Assigned(FListaIDClientes) and (FListaIDClientes.Count > 0) then + begin + RecuperarNombresClientes; + ACadena := FListaNombresClientes.Text; + end + else begin + ACadena := 'Todos los clientes'; + if FDesglosado then + ACadena := ACadena + ' (desglosados)' + end; + + ATextos.Add(ACadena); + ACadena := ''; + + frxReport.Variables.Variables['TextoParametros'] := ATextos.Text; + finally + FreeAndNil(ATextos); + end; +end; + procedure TRptPresupuestosCliente.PrepararTablaInforme(ATabla: TDAMemDataTable); var Condicion: TDAWhereExpression; @@ -262,6 +313,101 @@ begin ATabla.Where.AddText(AWhereStr); end; +procedure TRptPresupuestosCliente.RecuperarNombresClientes; +var + AContactosService : IsrvContactos; + Intf : IInterface; + AClientID : TGUID; + + ATableNameArray: StringArray; + ATableRequestInfoArray: TableRequestInfoArray; + ATableRequestInfo: TableRequestInfoV5; + AStream: TMemoryStream; + ADataTable: TDAMemDataTable; + i: Integer; + AWhereBuilder : TDAWhereBuilder; + ACondicion : TDAWhereExpression; +begin + CreateGUID(AClientID); + + GetClassFactory('srvContactos').CreateInstance(AClientID, Intf); + + if Assigned(Intf) then + begin + AContactosService := Intf as IsrvContactos; + + ATableNameArray := StringArray.Create; + ATableRequestInfoArray := TableRequestInfoArray.Create; + AWhereBuilder := TDAWhereBuilder.Create; + try + ATableNameArray.Add('Clientes'); + ATableRequestInfo := TableRequestInfoV5.Create; + + with ATableRequestInfo do + begin + IncludeSchema := True; + MaxRecords := -1; + UserFilter := ''; + + AWhereBuilder.Clear; + with AWhereBuilder do + for i := 0 to FListaIDClientes.Count - 1 do + begin + ACondicion := NewBinaryExpression( + NewBinaryExpression(NewField('', 'ID'), NewConstant(FListaIDClientes[i], datInteger), dboEqual), + NewBinaryExpression(NewField('', 'ID_EMPRESA'), NewConstant(FIdEmpresa, datInteger), dboEqual), + dboAnd); + + if not AWhereBuilder.IsEmpty then + Expression := NewBinaryExpression(Expression, ACondicion, dboOr) + else + Expression := ACondicion; + end; + + WhereClause := AWhereBuilder.ExpressionToXmlNode(AWhereBuilder.Expression); + end; + + try + ATableRequestInfoArray.Add(ATableRequestInfo); + AStream := AContactosService.GetData(ATableNameArray, ATableRequestInfoArray); + if Assigned(AStream) then + begin + ADataTable := TDAMemDataTable.Create(nil); + try + ADataTable.Name := 'Clientes'; + ADataTable.LocalDataStreamer := DABin2DataStreamer1; + ADataTable.RemoteFetchEnabled := False; + DABin2DataStreamer1.ReadDataset(AStream, ADataTable, True); + + ADataTable.Open; + FListaNombresClientes.Clear; + for i := 0 to ADataTable.RecordCount - 1 do + begin + FListaNombresClientes.Add(ADataTable.FieldByName('NOMBRE').AsString); + ADataTable.Next; + end; + + finally + FreeANDNil(ADataTable); + end; + end; + except + on e: Exception do + dmServer.EscribirLog(e.Message); + end; + finally + FreeANDNIL(ATableRequestInfoArray); + FreeANDNIL(ATableNameArray); + FreeANDNIL(AWhereBuilder); + end; + end; +end; + +procedure TRptPresupuestosCliente.DataModuleDestroy(Sender: TObject); +begin + FreeANDNIL(FListaNombresClientes); +end; + function TRptPresupuestosCliente.GenerarInformeListadoPresupuestos( const IdEmpresa: Integer; const FechaInicio, FechaFin: Variant; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; @@ -295,6 +441,7 @@ begin tbl_InformeListadoPresupuestosResumen.Active := False; dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoPresupuestosResumen, [], [], False); PrepararTablaResumenInforme(dsMaster); + //Esto se hace para rellenar la tabla del datamodule que usa el informe. dsMaster.Open; AStream.Clear; @@ -302,7 +449,8 @@ begin DABin2DataStreamer1.ReadDataset(AStream, tbl_InformeListadoPresupuestosResumen, TRUE, '', TRUE, TRUE); //DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE - if Desglosado then + FDesglosado := Desglosado; + if FDesglosado then ATipoInforme := rptInformeListadoPresupuestosDesglosado else ATipoInforme := rptInformeListadoPresupuestos; @@ -346,8 +494,7 @@ begin raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme)); frxReport.LoadFromFile(AInforme, True); - frxReport.Variables.Variables['FechaInicio'] := FFechaInicio; - frxReport.Variables.Variables['FechaFin'] := FFechaFin; + IniciarParametrosInforme; frxReport.PrepareReport(False); frxReport.PreviewPages.SaveToStream(Result);