Listados de presupuestos -> Arreglos estéticos

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@888 0c75b7a4-871f-7646-8a2f-f78d34cc349f
This commit is contained in:
David Arranz 2009-01-27 09:27:08 +00:00
parent ac6d6bfa85
commit 1dd65983d3
6 changed files with 192 additions and 56 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
object RptPresupuestosCliente: TRptPresupuestosCliente object RptPresupuestosCliente: TRptPresupuestosCliente
OldCreateOrder = True OldCreateOrder = True
OnCreate = DataModuleCreate OnCreate = DataModuleCreate
OnDestroy = DataModuleDestroy
Height = 556 Height = 556
Width = 858 Width = 858
object DADSCabecera: TDADataSource object DADSCabecera: TDADataSource

View File

@ -85,20 +85,25 @@ type
schReport: TDASchema; schReport: TDASchema;
DataDictionary: TDADataDictionary; DataDictionary: TDADataDictionary;
procedure DataModuleCreate(Sender: TObject); procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private private
FConnection: IDAConnection; FConnection: IDAConnection;
FIdEmpresa: Integer; FIdEmpresa: Integer;
FFechaInicio: Variant; FFechaInicio: Variant;
FFechaFin: Variant; FFechaFin: Variant;
FListaIDClientes: TIntegerArray; FListaIDClientes: TIntegerArray;
FListaNombresClientes: TStringList;
FImporteMinimo: Currency; FImporteMinimo: Currency;
FDesglosado : Boolean;
procedure _GenerarPresupuesto(const AID : Integer); procedure _GenerarPresupuesto(const AID : Integer);
procedure PrepararTablaInforme(ATabla: TDAMemDataTable); procedure PrepararTablaInforme(ATabla: TDAMemDataTable);
procedure PrepararTablaResumenInforme(ATabla: IDADataset); procedure PrepararTablaResumenInforme(ATabla: IDADataset);
function _GenerarInforme(const TipoInforme: String): Binary;
function _GenerarInforme(const TipoInforme: String): Binary;
procedure IniciarParametrosInforme;
procedure RecuperarNombresClientes;
public public
function GenerarPresupuesto(const ListaID : TIntegerArray): Binary; function GenerarPresupuesto(const ListaID : TIntegerArray): Binary;
function GenerarPresupuestoEnPDF(const ListaID : TIntegerArray): Binary; function GenerarPresupuestoEnPDF(const ListaID : TIntegerArray): Binary;
@ -110,7 +115,9 @@ implementation
{$R *.dfm} {$R *.dfm}
uses uses
uSistemaFunc, StrUtils, uDataModuleServer, schPresupuestosClienteClient_Intf; uSistemaFunc, StrUtils, uDataModuleServer, schPresupuestosClienteClient_Intf,
uROServer, DataAbstract4_Intf;
const const
rptInforme = 'InfPresupuestoCliente.fr3'; rptInforme = 'InfPresupuestoCliente.fr3';
@ -132,6 +139,8 @@ begin
frxDBDetalles.DataSource := DADSDetalles; frxDBDetalles.DataSource := DADSDetalles;
frxDBResumen.DataSource := DADSResumen; frxDBResumen.DataSource := DADSResumen;
FListaNombresClientes := TStringList.Create;
with tbl_Detalles do with tbl_Detalles do
begin begin
MasterSource := DADSCapitulos; MasterSource := DADSCapitulos;
@ -156,6 +165,48 @@ begin
end; end;
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); procedure TRptPresupuestosCliente.PrepararTablaInforme(ATabla: TDAMemDataTable);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;
@ -262,6 +313,101 @@ begin
ATabla.Where.AddText(AWhereStr); ATabla.Where.AddText(AWhereStr);
end; 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( function TRptPresupuestosCliente.GenerarInformeListadoPresupuestos(
const IdEmpresa: Integer; const FechaInicio, FechaFin: Variant; const IdEmpresa: Integer; const FechaInicio, FechaFin: Variant;
const ListaIDClientes: TIntegerArray; const Desglosado: Boolean; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean;
@ -295,6 +441,7 @@ begin
tbl_InformeListadoPresupuestosResumen.Active := False; tbl_InformeListadoPresupuestosResumen.Active := False;
dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoPresupuestosResumen, [], [], False); dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoPresupuestosResumen, [], [], False);
PrepararTablaResumenInforme(dsMaster); PrepararTablaResumenInforme(dsMaster);
//Esto se hace para rellenar la tabla del datamodule que usa el informe. //Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster.Open; dsMaster.Open;
AStream.Clear; AStream.Clear;
@ -302,7 +449,8 @@ begin
DABin2DataStreamer1.ReadDataset(AStream, tbl_InformeListadoPresupuestosResumen, TRUE, '', TRUE, TRUE); DABin2DataStreamer1.ReadDataset(AStream, tbl_InformeListadoPresupuestosResumen, TRUE, '', TRUE, TRUE);
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE //DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE
if Desglosado then FDesglosado := Desglosado;
if FDesglosado then
ATipoInforme := rptInformeListadoPresupuestosDesglosado ATipoInforme := rptInformeListadoPresupuestosDesglosado
else else
ATipoInforme := rptInformeListadoPresupuestos; ATipoInforme := rptInformeListadoPresupuestos;
@ -346,8 +494,7 @@ begin
raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme)); raise Exception.Create (('Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme));
frxReport.LoadFromFile(AInforme, True); frxReport.LoadFromFile(AInforme, True);
frxReport.Variables.Variables['FechaInicio'] := FFechaInicio; IniciarParametrosInforme;
frxReport.Variables.Variables['FechaFin'] := FFechaFin;
frxReport.PrepareReport(False); frxReport.PrepareReport(False);
frxReport.PreviewPages.SaveToStream(Result); frxReport.PreviewPages.SaveToStream(Result);