2007-11-28 17:40:31 +00:00
unit uRptFacturasCliente_Server;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, frxClass, frxDBSet, uDAScriptingProvider,
uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient,
frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes,
2008-11-14 20:04:09 +00:00
uDAInterfaces, uDADataStreamer, uDABin2DataStreamer, uDAMemDataTable,
2015-09-10 14:47:04 +00:00
FactuGES_Intf, frxExportPDF;
2007-11-28 17:40:31 +00:00
type
TRptFacturasCliente = class( TDataModule)
DADataCabecera: TDADataSource;
DADataDetalles: TDADataSource;
2008-11-14 20:04:09 +00:00
tbl_Cabecera: TDAMemDataTable;
tbl_Detalles: TDAMemDataTable;
2007-11-28 17:40:31 +00:00
frxRichObject1: TfrxRichObject;
frxBarCodeObject1: TfrxBarCodeObject;
frxOLEObject1: TfrxOLEObject;
frxCrossObject1: TfrxCrossObject;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxGradientObject1: TfrxGradientObject;
frxDBCabecera: TfrxDBDataset;
frxDBDetalles: TfrxDBDataset;
DADataVencimientos: TDADataSource;
2008-01-08 12:46:26 +00:00
tbl_Vencimientos: TDAMemDataTable;
2007-11-28 17:40:31 +00:00
frxDBDataset1: TfrxDBDataset;
DataDictionary: TDADataDictionary;
frxReport: TfrxReport;
2008-01-08 12:46:26 +00:00
Bin2DataStreamer: TDABin2DataStreamer;
2008-11-14 20:04:09 +00:00
tbl_InformeListadoFacturas: TDAMemDataTable;
DADSInformeListadoFacturas: TDADataSource;
frxDBInformeListadoFacturas: TfrxDBDataset;
2009-03-10 18:20:34 +00:00
tbl_InformeListadoFacturasResumen: TDAMemDataTable;
DADSInformeListadoFacturasResumen: TDADataSource;
frxDBInformeListadoFacturasResumen: TfrxDBDataset;
2008-11-18 17:43:34 +00:00
schReport: TDASchema;
2015-09-10 14:47:04 +00:00
frxPDFExport1: TfrxPDFExport;
2007-11-28 17:40:31 +00:00
procedure DataModuleCreate( Sender: TObject) ;
2009-03-10 18:20:34 +00:00
procedure DataModuleDestroy( Sender: TObject) ;
2007-11-28 17:40:31 +00:00
private
FConnection: IDAConnection;
2009-03-10 18:20:34 +00:00
FIdEmpresa: Integer ;
FFechaInicio: Variant ;
FFechaFin: Variant ;
FFechaVenInicio: Variant ;
FFechaVenFin: Variant ;
FListaIDClientes: TIntegerArray;
FListaNombresClientes : TStringList;
FImporteMinimo: Currency ;
FDesglosado : Boolean ;
2007-11-28 17:40:31 +00:00
//Genera cada uno de los albaranes a imprimir
2008-11-14 20:04:09 +00:00
procedure _GenerarFactura( const ID: integer ) ; overload ;
2009-03-10 18:20:34 +00:00
procedure PrepararTablaInforme( ATabla: TDAMemDataTable) ;
procedure PrepararTablaResumenInforme( ATabla: IDADataset) ;
function _GenerarInforme( const TipoInforme: String ) : Binary;
procedure IniciarParametrosInforme;
procedure RecuperarNombresClientes;
2007-11-28 17:40:31 +00:00
public
2008-11-14 20:04:09 +00:00
function GenerarFactura( const ListaID : TIntegerArray) : Binary; overload ;
2015-09-10 14:47:04 +00:00
function GenerarFacturaEnPDF( const ListaID : TIntegerArray) : Binary;
2008-12-10 15:15:20 +00:00
function GenerarInformeIVA( const IdEmpresa: Integer ; const FechaInicio: Variant ; const FechaFin: Variant ; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
function GenerarInformeListadoFacturas( const IdEmpresa: Integer ; const FechaInicio: Variant ; const FechaFin: Variant ; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
function GenerarInformeListadoFacturasPendientes( const IdEmpresa: Integer ; const FechaInicio: Variant ; const FechaFin: Variant ; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
2007-11-28 17:40:31 +00:00
end ;
implementation
{$R *.dfm}
uses
2009-03-10 18:20:34 +00:00
uSistemaFunc, StrUtils, uROServer, DataAbstract4_Intf,
uDataModuleServer, schFacturasClienteClient_Intf;
2007-11-28 17:40:31 +00:00
const
rptFacturaCliente = 'InfFacturaCliente.fr3' ;
2008-11-14 20:04:09 +00:00
rptInformeIVA = 'InformeIVAClientes.fr3' ;
rptInformeIVADesglosado = 'InformeIVAClientesDesglosado.fr3' ;
rptInformeListadoFacturasCliente = 'InformeListadoFacturasCliente.fr3' ;
rptInformeListadoFacturasClienteDesglosado = 'InformeListadoFacturasClienteDesglosado.fr3' ;
rptInformeListadoFactuasClientePendiente = 'InformeListadoFacturasClientePendientes.fr3' ;
rptInformeListadoFactuasClientePendienteDesglosado = 'InformeListadoFacturasClientePendientesDesglosado.fr3' ;
2007-11-28 17:40:31 +00:00
2009-03-10 18:20:34 +00:00
ds_InformeListadoFacturasResumen = 'ListadoFacturasResumen' ;
2007-11-28 17:40:31 +00:00
2008-11-14 20:04:09 +00:00
{ TRptFacturasCliente }
2007-11-28 17:40:31 +00:00
procedure TRptFacturasCliente. DataModuleCreate( Sender: TObject) ;
begin
schReport. ConnectionManager : = dmServer. ConnectionManager;
FConnection : = dmServer. DarNuevaConexion;
2009-03-10 18:20:34 +00:00
frxReport. EngineOptions. NewSilentMode : = simReThrow;
FListaNombresClientes : = TStringList. Create;
end ;
procedure TRptFacturasCliente. DataModuleDestroy( Sender: TObject) ;
begin
FreeANDNIL( FListaNombresClientes) ;
2007-11-28 17:40:31 +00:00
end ;
2008-11-14 20:04:09 +00:00
function TRptFacturasCliente. GenerarFactura( const ListaID: TIntegerArray) : Binary;
2007-11-28 17:40:31 +00:00
var
i: Integer ;
begin
Result : = Binary. Create;
2008-11-14 20:04:09 +00:00
try
//Vamos generando todos y cada una de las facturas recibidas
for i : = 0 to ListaID. Count - 1 do
_GenerarFactura( ListaID. Items[ i] ) ;
frxReport. PreviewPages. SaveToStream( Result ) ;
finally
end ;
end ;
2015-09-10 14:47:04 +00:00
function TRptFacturasCliente. GenerarFacturaEnPDF(
const ListaID: TIntegerArray) : Binary;
var
i: Integer ;
begin
Result : = Binary. Create;
try
//Vamos generando todos y cada uno de los presupuestos recibidos
for i : = 0 to ListaID. Count - 1 do
_GenerarFactura( ListaID. Items[ i] ) ;
frxPDFExport1. Stream : = Result ;
frxReport. Export( frxPDFExport1)
finally
end ;
end ;
2008-11-14 20:04:09 +00:00
function TRptFacturasCliente. GenerarInformeIVA( const IdEmpresa: Integer ; const FechaInicio,
2008-12-10 15:15:20 +00:00
FechaFin: Variant ; const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ;
2008-11-14 20:04:09 +00:00
const ImporteMinimo: Currency ) : Binary;
var
ATipoInforme: String ;
2009-03-10 18:20:34 +00:00
AStream: TMemoryStream;
dsMaster: IDADataset;
2008-11-14 20:04:09 +00:00
begin
2009-03-10 18:20:34 +00:00
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream : = TMemoryStream. Create;
try
//Inicializamos parametros
FIdEmpresa : = IdEmpresa;
FFechaInicio : = FechaInicio;
FFechaFin : = FechaFin;
FFechaVenInicio : = Null;
FFechaVenFin : = Null;
FImporteMinimo : = ImporteMinimo;
if Assigned( FListaIDClientes) then
FListaIDClientes. Free;
FListaIDClientes : = ListaIDClientes;
//Se van a prepara las tablas del informe
if tbl_InformeListadoFacturas. Active then
tbl_InformeListadoFacturas. Active : = False ;
PrepararTablaInforme( tbl_InformeListadoFacturas) ;
//Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoFacturasResumen. Active then
tbl_InformeListadoFacturasResumen. Active : = False ;
dsMaster : = schReport. NewDataset( FConnection, ds_InformeListadoFacturasResumen, [ ] , [ ] , False ) ;
PrepararTablaResumenInforme( dsMaster) ;
//Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster. Open;
AStream. Clear;
Bin2DataStreamer. WriteDataset( AStream, dsMaster, [ woRows, woSchema] , - 1 ) ;
Bin2DataStreamer. ReadDataset( AStream, tbl_InformeListadoFacturasResumen, TRUE , '' , TRUE , TRUE ) ;
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSAR<41> POR CLIENTE
2008-11-14 20:04:09 +00:00
if Desglosado then
ATipoInforme : = rptInformeIVADesglosado
else
ATipoInforme : = rptInformeIVA;
2009-03-10 18:20:34 +00:00
//Finalmente se abren las tablas del informe
tbl_InformeListadoFacturas. Active : = True ;
tbl_InformeListadoFacturasResumen. Active : = True ;
Result : = _GenerarInforme( ATipoInforme) ;
finally
AStream. Free;
dsMaster : = Nil ;
FConnection. RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end ;
2008-11-14 20:04:09 +00:00
end ;
function TRptFacturasCliente. GenerarInformeListadoFacturas( const IdEmpresa: Integer ;
2008-12-10 15:15:20 +00:00
const FechaInicio, FechaFin: Variant ; const ListaIDClientes: TIntegerArray;
2008-11-14 20:04:09 +00:00
const Desglosado: Boolean ; const ImporteMinimo: Currency ) : Binary;
var
ATipoInforme: String ;
2009-03-10 18:20:34 +00:00
AStream: TMemoryStream;
dsMaster: IDADataset;
2007-11-28 17:40:31 +00:00
2008-11-14 20:04:09 +00:00
begin
2009-03-10 18:20:34 +00:00
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
2007-11-28 17:40:31 +00:00
2009-03-10 18:20:34 +00:00
AStream : = TMemoryStream. Create;
try
//Inicializamos parametros
FIdEmpresa : = IdEmpresa;
FFechaInicio : = FechaInicio;
FFechaFin : = FechaFin;
// FFechaVenInicio := FechaVenInicio;
// FFechaVenFin := FechaVenFin;
FImporteMinimo : = ImporteMinimo;
if Assigned( FListaIDClientes) then
FListaIDClientes. Free;
FListaIDClientes : = ListaIDClientes;
//Se prepara la tabla del listado general del informe
if tbl_InformeListadoFacturas. Active then
tbl_InformeListadoFacturas. Active : = False ;
PrepararTablaInforme( tbl_InformeListadoFacturas) ;
//Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoFacturasResumen. Active then
tbl_InformeListadoFacturasResumen. Active : = False ;
dsMaster : = schReport. NewDataset( FConnection, ds_InformeListadoFacturasResumen, [ ] , [ ] , False ) ;
PrepararTablaResumenInforme( dsMaster) ;
//Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster. Open;
AStream. Clear;
Bin2DataStreamer. WriteDataset( AStream, dsMaster, [ woRows, woSchema] , - 1 ) ;
Bin2DataStreamer. ReadDataset( AStream, tbl_InformeListadoFacturasResumen, TRUE , '' , TRUE , TRUE ) ;
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSAR<41> POR CLIENTE
FDesglosado : = Desglosado;
if FDesglosado then
2008-11-14 20:04:09 +00:00
ATipoInforme : = rptInformeListadoFacturasClienteDesglosado
else
ATipoInforme : = rptInformeListadoFacturasCliente;
2009-03-10 18:20:34 +00:00
//Finalmente se abren las tablas del informe
tbl_InformeListadoFacturas. Active : = True ;
tbl_InformeListadoFacturasResumen. Active : = True ;
Result : = _GenerarInforme( ATipoInforme) ;
finally
AStream. Free;
dsMaster : = Nil ;
FConnection. RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end ;
2008-11-12 16:06:28 +00:00
end ;
2007-11-28 17:40:31 +00:00
2008-11-14 20:04:09 +00:00
function TRptFacturasCliente. GenerarInformeListadoFacturasPendientes(
2008-12-10 15:15:20 +00:00
const IdEmpresa: Integer ; const FechaInicio, FechaFin: Variant ;
2008-11-14 20:04:09 +00:00
const ListaIDClientes: TIntegerArray; const Desglosado: Boolean ;
const ImporteMinimo: Currency ) : Binary;
var
Condicion: TDAWhereExpression;
ATipoInforme: String ;
2009-03-10 18:20:34 +00:00
AStream: TMemoryStream;
dsMaster: IDADataset;
2008-11-14 20:04:09 +00:00
2008-11-12 16:06:28 +00:00
begin
2009-03-10 18:20:34 +00:00
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
2009-03-11 12:44:15 +00:00
2009-03-10 18:20:34 +00:00
AStream : = TMemoryStream. Create;
try
//Inicializamos parametros
FIdEmpresa : = IdEmpresa;
FFechaInicio : = FechaInicio;
FFechaFin : = FechaFin;
// FFechaVenInicio := FechaVenInicio;
// FFechaVenFin := FechaVenFin;
FImporteMinimo : = ImporteMinimo;
2009-03-11 12:44:15 +00:00
FDesglosado : = Desglosado;
if Assigned( FListaIDClientes) then
FListaIDClientes. Free;
2009-03-10 18:20:34 +00:00
FListaIDClientes : = ListaIDClientes;
//Se prepara la tabla del listado general del informe
2009-03-11 12:44:15 +00:00
if tbl_InformeListadoFacturas. Active then
tbl_InformeListadoFacturas. Active : = False ;
PrepararTablaInforme( tbl_InformeListadoFacturas) ;
2008-11-14 20:04:09 +00:00
// Filtrar el informe por situacion
2009-03-11 12:44:15 +00:00
with tbl_InformeListadoFacturas. DynamicWhere do
2008-11-14 20:04:09 +00:00
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteSITUACION) , NewConstant( 'PAGADA' , datString) , dboNotEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
2009-03-11 12:44:15 +00:00
//Se prepara la tabla del listado resumen del informe
if tbl_InformeListadoFacturasResumen. Active then
tbl_InformeListadoFacturasResumen. Active : = False ;
dsMaster : = schReport. NewDataset( FConnection, ds_InformeListadoFacturasResumen, [ ] , [ ] , False ) ;
PrepararTablaResumenInforme( dsMaster) ;
// Filtrar el informe por situacion
dsMaster. Where. AddText( ' AND (SITUACION <> ' 'PAGADA' ')' ) ;
//Esto se hace para rellenar la tabla del datamodule que usa el informe.
dsMaster. Open;
AStream. Clear;
Bin2DataStreamer. WriteDataset( AStream, dsMaster, [ woRows, woSchema] , - 1 ) ;
Bin2DataStreamer. ReadDataset( AStream, tbl_InformeListadoFacturasResumen, TRUE , '' , TRUE , TRUE ) ;
2009-03-10 18:20:34 +00:00
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSAR<41> POR CLIENTE
if FDesglosado then
2008-11-14 20:04:09 +00:00
ATipoInforme : = rptInformeListadoFactuasClientePendienteDesglosado
else
ATipoInforme : = rptInformeListadoFactuasClientePendiente;
2009-03-10 18:20:34 +00:00
//Finalmente se abren las tablas del informe
2009-03-11 12:44:15 +00:00
tbl_InformeListadoFacturas. Active : = True ;
tbl_InformeListadoFacturasResumen. Active : = True ;
2009-03-10 18:20:34 +00:00
Result : = _GenerarInforme( ATipoInforme) ;
finally
AStream. Free;
dsMaster : = Nil ;
FConnection. RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end ;
2008-11-14 20:04:09 +00:00
end ;
2007-11-28 17:40:31 +00:00
2009-03-10 18:20:34 +00:00
procedure TRptFacturasCliente. IniciarParametrosInforme;
2008-11-26 19:12:42 +00:00
var
2009-03-10 18:20:34 +00:00
ATextos : TStringList;
ACadena : String ;
2008-11-14 20:04:09 +00:00
begin
2009-03-10 18:20:34 +00:00
ATextos : = TStringList. Create;
2008-11-12 16:06:28 +00:00
try
2009-03-10 18:20:34 +00:00
if ( not VarIsNull( FFechaInicio) ) and ( not VarIsNull( FFechaFin) ) then
ACadena : = Format( 'Fechas de factura desde el %s hasta el %s' , [ VarToStr( FFechaInicio) , VarToStr( FFechaFin) ] )
else
ACadena : = 'Sin rango de fechas' ;
ATextos. Add( ACadena) ;
ACadena : = '' ;
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
// Filtrar el informe por fechas de vencimiento
{ if ( not VarIsNull( FFechaVenInicio) ) and ( not VarIsNull( FFechaVenFin) ) then
begin
ACadena : = Format( 'Vencimientos desde el %s hasta el %s' , [ VarToStr( FFechaVenInicio) , VarToStr( FFechaVenFin) ] ) ;
ATextos. Add( ACadena) ;
ACadena : = '' ;
end ;
}
if ( FImporteMinimo > 0 ) then
begin
ACadena : = Format( 'Facturas con importe superior a %m' , [ FImporteMinimo] ) ;
ATextos. Add( ACadena) ;
ACadena : = '' ;
end ;
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
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 ;
2008-11-12 16:06:28 +00:00
2009-03-10 18:20:34 +00:00
ATextos. Add( ACadena) ;
ACadena : = '' ;
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
frxReport. Variables. Variables[ 'TextoParametros' ] : = ATextos. Text ;
2008-11-14 20:04:09 +00:00
finally
2009-03-10 18:20:34 +00:00
FreeAndNil( ATextos) ;
2008-11-14 20:04:09 +00:00
end ;
end ;
2009-03-10 18:20:34 +00:00
procedure TRptFacturasCliente. PrepararTablaInforme( ATabla: TDAMemDataTable) ;
2008-11-14 20:04:09 +00:00
var
Condicion: TDAWhereExpression;
i: Integer ;
begin
2009-03-10 18:20:34 +00:00
// Filtrar el informe por empresa
with ATabla. DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteID_EMPRESA) , NewConstant( FIdEmpresa, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
// Filtrar el informe por fechas
if not VarIsNull( FFechaInicio)
and not VarIsNull( FFechaFin) then
begin
with ATabla. DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteFECHA_FACTURA) , NewConstant( FFechaInicio, datDateTime) , dboGreaterOrEqual) ;
Condicion : = NewBinaryExpression( NewBinaryExpression( NewField( '' , fld_FacturasClienteFECHA_FACTURA) , NewConstant( FFechaFin, datDateTime) , dboLessOrEqual) , Condicion, dboAnd) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
// Filtrar el informe por fechas de vencimiento
{ if not VarIsNull( FFechaVenInicio)
and not VarIsNull( FFechaVenFin) then
begin
with ATabla. DynamicWhere do
2008-11-14 20:04:09 +00:00
begin
2009-03-10 18:20:34 +00:00
// (FECHA_VENCIMIENTO_INICIO between FECHA_VENCIMIENTO_FIN)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteFECHA_VENCIMIENTO) , NewConstant( FFechaVenInicio, datDateTime) , dboGreaterOrEqual) ;
Condicion : = NewBinaryExpression( NewBinaryExpression( NewField( '' , fld_FacturasClienteFECHA_VENCIMIENTO) , NewConstant( FFechaVenFin, datDateTime) , dboLessOrEqual) , Condicion, dboAnd) ;
2008-11-14 20:04:09 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
2009-03-10 18:20:34 +00:00
end ;
}
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
// Filtrar el informe por proveedor
if Assigned( FListaIDClientes) then
begin
with ATabla. DynamicWhere do
2008-11-14 20:04:09 +00:00
begin
2009-03-10 18:20:34 +00:00
for i : = 0 to FListaIDClientes. Count - 1 do
2008-11-14 20:04:09 +00:00
begin
2009-03-10 18:20:34 +00:00
// (ID_CLIENTE = ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasClienteID_CLIENTE) , NewConstant( FListaIDClientes. Items[ i] , datInteger) , dboEqual) ;
2008-11-14 20:04:09 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
2009-03-10 18:20:34 +00:00
end ;
2008-11-14 20:04:09 +00:00
end ;
2009-03-10 18:20:34 +00:00
end ;
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
// Filtrar el informe por importe minimo
if ( FImporteMinimo > 0 ) then
begin
with ATabla. DynamicWhere do
2008-11-14 20:04:09 +00:00
begin
2009-03-10 18:20:34 +00:00
// (IMPORTE_TOTAL > ImporteMinimo)
Condicion : = NewBinaryExpression( NewField( '' , fld_FacturasCLienteIMPORTE_TOTAL) , NewConstant( FImporteMinimo, datCurrency) , dboGreaterOrEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
2008-11-14 20:04:09 +00:00
end ;
2009-03-10 18:20:34 +00:00
end ;
end ;
procedure TRptFacturasCliente. PrepararTablaResumenInforme( ATabla: IDADataset) ;
var
i: Integer ;
AWhereStr : String ;
begin
// Filtrar el informe por empresa
AWhereStr : = ' (' + fld_FacturasCLienteID_EMPRESA + ' = ' + IntToStr( FIdEmpresa) + ') ' ;
// Filtrar el informe por fechas
if not VarIsNull( FFechaInicio)
and not VarIsNull( FFechaFin) then
begin
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_FacturasCLienteFECHA_FACTURA + ' between ' '' + ReplaceStr( VarToStr( FFechaInicio) , '/' , '.' ) + '' ' and ' '' + ReplaceStr( VarToStr( FFechaFin) , '/' , '.' ) + '' ') ' ;
end ;
// Filtrar el informe por fechas de vencimiento
{ if not VarIsNull( FFechaVenInicio)
and not VarIsNull( FFechaVenFin) then
begin
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_FacturasCLienteFECHA_VENCIMIENTO + ' between ' '' + ReplaceStr( VarToStr( FFechaVenInicio) , '/' , '.' ) + '' ' and ' '' + ReplaceStr( VarToStr( FFechaVenFin) , '/' , '.' ) + '' ') ' ;
end ;
}
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
// Filtrar el informe por cliente
if Assigned( FListaIDClientes) then
begin
for i : = 0 to FListaIDClientes. Count - 1 do
2008-11-14 20:04:09 +00:00
begin
2009-03-10 18:20:34 +00:00
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_FacturasCLienteID_CLIENTE + ' = ' + IntToStr( FListaIDClientes. Items[ i] ) + ') ' ;
end ;
end ;
// Filtrar el informe por importe minimo
if ( FImporteMinimo > 0 ) then
begin
if Length( AWhereStr) > 0 then
AWhereStr : = AWhereStr + 'AND' ;
AWhereStr : = AWhereStr + ' (' + fld_FacturasCLienteIMPORTE_TOTAL + ' >= ' + CurrToStr( FImporteMinimo) + ') ' ;
end ;
ATabla. Where. AddText( AWhereStr) ;
end ;
procedure TRptFacturasCliente. 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
2008-11-14 20:04:09 +00:00
begin
2009-03-10 18:20:34 +00:00
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 : = Bin2DataStreamer;
ADataTable. RemoteFetchEnabled : = False ;
Bin2DataStreamer. 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 ) ;
2008-11-14 20:04:09 +00:00
end ;
2009-03-10 18:20:34 +00:00
finally
FreeANDNIL( ATableRequestInfoArray) ;
FreeANDNIL( ATableNameArray) ;
FreeANDNIL( AWhereBuilder) ;
2008-11-14 20:04:09 +00:00
end ;
2009-03-10 18:20:34 +00:00
end ;
end ;
procedure TRptFacturasCliente. _GenerarFactura( const ID: integer ) ;
var
AInforme: Variant ;
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
begin
FConnection. BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
tbl_Cabecera. Active : = False ;
tbl_Detalles. Active : = False ;
tbl_Vencimientos. Active : = False ;
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
tbl_Cabecera. ParamByName( 'ID' ) . AsInteger : = ID;
tbl_Detalles. ParamByName( 'ID_FACTURA' ) . AsInteger : = ID;
tbl_Vencimientos. ParamByName( 'ID_FACTURA' ) . AsInteger : = ID;
tbl_Cabecera. Active : = True ;
tbl_Detalles. Active : = True ;
tbl_Vencimientos. Active : = True ;
2008-11-14 20:04:09 +00:00
2009-03-10 18:20:34 +00:00
AInforme : = DarRutaFichero( DarRutaInformes, rptFacturaCliente, tbl_Cabecera. FieldByName( 'ID_EMPRESA' ) . AsString, tbl_Cabecera. FieldByName( 'ID_TIENDA' ) . AsString) ;
2008-11-26 19:12:42 +00:00
if VarIsNull( AInforme) then
2009-11-05 18:47:48 +00:00
raise Exception. Create ( ( 'Error Servidor: _GenerarFactura, no encuentra informe ' + rptFacturaCliente) ) ;
2008-11-26 19:12:42 +00:00
frxReport. LoadFromFile( AInforme, True ) ;
2009-12-17 15:04:52 +00:00
frxReport. ReportOptions. Name : = 'Factura ' + tbl_Cabecera. FieldByName( 'REFERENCIA' ) . AsString;
2008-11-12 16:06:28 +00:00
frxReport. PrepareReport( False ) ;
2007-11-28 17:40:31 +00:00
finally
2008-11-14 20:04:09 +00:00
FConnection. RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
2007-11-28 17:40:31 +00:00
end ;
end ;
2009-03-10 18:20:34 +00:00
function TRptFacturasCliente. _GenerarInforme( const TipoInforme: String ) : Binary;
var
AInforme: Variant ;
begin
Result : = Binary. Create;
AInforme : = DarRutaFichero( DarRutaInformes, TipoInforme, IntToStr( FIdEmpresa) ) ;
if VarIsNull( AInforme) then
raise Exception. Create ( ( 'Error Servidor: _GenerarInforme, no encuentra informe ' + TipoInforme) ) ;
frxReport. LoadFromFile( AInforme, True ) ;
IniciarParametrosInforme;
frxReport. PrepareReport( False ) ;
frxReport. PreviewPages. SaveToStream( Result ) ;
end ;
2007-11-28 17:40:31 +00:00
end .