Tecsitel_FactuGES2/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas
david e7e45f1323 - #12 -> Enviar documentos por correo electrónico. Adaptación de los módulos (sin terminar)
- En los controladores, cambiar TObservador por TControllerBase
- Limpieza de código y warnings.


git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@528 0c75b7a4-871f-7646-8a2f-f78d34cc349f
2008-08-22 14:52:35 +00:00

191 lines
6.0 KiB
ObjectPascal

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,
uDAInterfaces, uDADataStreamer, IBCustomDataSet, IBQuery, IBDatabase,
uDAMemDataTable, FactuGES_Intf, frxExportPDF;
type
TRptFacturasCliente = class(TDataModule)
frxDBCabecera: TfrxDBDataset;
frxDBDetalles: TfrxDBDataset;
DataDictionary: TDADataDictionary;
IBDatabase1: TIBDatabase;
IBTransaction1: TIBTransaction;
DataSource1: TDataSource;
DataSource2: TDataSource;
cabecera: TIBQuery;
detalles: TIBQuery;
DABINAdapter: TDABINAdapter;
DADSCabecera: TDADataSource;
DADSDetalles: TDADataSource;
tbl_Detalles: TDAMemDataTable;
tbl_Cabecera: TDAMemDataTable;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxChartObject1: TfrxChartObject;
frxGradientObject1: TfrxGradientObject;
frxCrossObject1: TfrxCrossObject;
frxOLEObject1: TfrxOLEObject;
frxBarCodeObject1: TfrxBarCodeObject;
frxRichObject1: TfrxRichObject;
frxReport: TfrxReport;
cabeceraID: TIntegerField;
cabeceraID_EMPRESA: TIntegerField;
cabeceraREFERENCIA: TIBStringField;
cabeceraTIPO: TIBStringField;
cabeceraFECHA_FACTURA: TDateField;
cabeceraBASE_IMPONIBLE: TIBBCDField;
cabeceraSITUACION: TIBStringField;
cabeceraDESCUENTO: TFloatField;
cabeceraIMPORTE_DESCUENTO: TIBBCDField;
cabeceraIVA: TFloatField;
cabeceraIMPORTE_IVA: TIBBCDField;
cabeceraRE: TFloatField;
cabeceraIMPORTE_RE: TIBBCDField;
cabeceraIMPORTE_TOTAL: TIBBCDField;
cabeceraOBSERVACIONES: TMemoField;
cabeceraNIF_CIF: TIBStringField;
cabeceraID_CLIENTE: TIntegerField;
cabeceraNOMBRE: TIBStringField;
cabeceraCALLE: TIBStringField;
cabeceraPROVINCIA: TIBStringField;
cabeceraPOBLACION: TIBStringField;
cabeceraCODIGO_POSTAL: TIBStringField;
cabeceraRECARGO_EQUIVALENCIA: TSmallintField;
cabeceraIMPORTE_NETO: TIBBCDField;
cabeceraIMPORTE_PORTE: TIBBCDField;
cabeceraFORMA_PAGO: TIBStringField;
detallesID: TIntegerField;
detallesID_FACTURA: TIntegerField;
detallesPOSICION: TIntegerField;
detallesTIPO_DETALLE: TIBStringField;
detallesCONCEPTO: TIBStringField;
detallesCANTIDAD: TIntegerField;
detallesIMPORTE_UNIDAD: TIBBCDField;
detallesDESCUENTO: TFloatField;
detallesIMPORTE_TOTAL: TIBBCDField;
detallesVISIBLE: TSmallintField;
detallesREFERENCIA: TIBStringField;
frxDBVencimientos: TfrxDBDataset;
DADSVencimientos: TDADataSource;
tbl_Vencimientos: TDAMemDataTable;
vencimientos: TIBQuery;
DataSource3: TDataSource;
cabeceraDATOS_BANCARIOS: TIBStringField;
vencimientosFECHA_VENCIMIENTO: TDateField;
vencimientosIMPORTE_TOTAL: TIBBCDField;
schReport: TDASchema;
frxPDFExport1: TfrxPDFExport;
procedure DataModuleCreate(Sender: TObject);
private
FConnection: IDAConnection;
//Genera cada una de las facturas a imprimir
procedure _GenerarFactura(const ID: Integer);
public
function GenerarFactura(const ListaID : TIntegerArray): Binary;
function GenerarFacturaEnPDF(const ListaID : TIntegerArray): Binary;
end;
implementation
{$R *.dfm}
uses
uDataModuleServer, schFacturasClienteClient_Intf;
const
rptFacturaCliente = 'InfFacturaCliente.fr3';
{ Dataset names for schReport }
ds_InformeFacturasCliente = 'InformeFacturasCliente';
ds_InformeFacturasCliente_Detalles = 'InformeFacturasCliente_Detalles';
ds_InformeFacturasCliente_Vencimientos = 'InformeFacturasCliente_Vencimientos';
{ TRptFacturasCliente }
procedure TRptFacturasCliente.DataModuleCreate(Sender: TObject);
begin
schReport.ConnectionManager := dmServer.ConnectionManager;
FConnection := dmServer.DarNuevaConexion;
frxReport.EngineOptions.NewSilentMode := simReThrow;
end;
function TRptFacturasCliente.GenerarFactura(const ListaID: TIntegerArray): Binary;
var
i: Integer;
begin
Result := Binary.Create;
//FConnection.BeginTransaction; <--- Creo que no va a hacer falta.
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
//FConnection.RollbackTransaction; <--- Creo que no va a hacer falta.
end;
end;
function TRptFacturasCliente.GenerarFacturaEnPDF(
const ListaID: TIntegerArray): Binary;
var
i: Integer;
begin
Result := Binary.Create;
//FConnection.BeginTransaction; <--- Creo que no va a hacer falta.
try
//Vamos generando todos y cada una de las facturas recibidas
for i := 0 to ListaID.Count - 1 do
_GenerarFactura(ListaID.Items[i]);
frxPDFExport1.Stream := Result;
frxReport.Export(frxPDFExport1)
finally
//FConnection.RollbackTransaction; <--- Creo que no va a hacer falta.
end;
end;
procedure TRptFacturasCliente._GenerarFactura(const ID: Integer);
//var
// AStream: TMemoryStream;
// dsMaster: IDADataset;
// dsDetail: IDADataset;
// dsVencimientos : IDADataset;
begin
// AStream := TMemoryStream.Create;
try
frxDBCabecera.DataSource := DADSCabecera;
frxDBDetalles.DataSource := DADSDetalles;
frxDBVencimientos.DataSource := DADSVencimientos;
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;
frxReport.LoadFromFile(DarRutaInformes + rptFacturaCliente, True);
frxReport.PrepareReport(False);
finally
// AStream.Free;
// dsMaster := Nil;
// dsDetail := Nil;
end;
end;
end.