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:
parent
ac6d6bfa85
commit
1dd65983d3
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
@ -1,6 +1,7 @@
|
||||
object RptPresupuestosCliente: TRptPresupuestosCliente
|
||||
OldCreateOrder = True
|
||||
OnCreate = DataModuleCreate
|
||||
OnDestroy = DataModuleDestroy
|
||||
Height = 556
|
||||
Width = 858
|
||||
object DADSCabecera: TDADataSource
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user