unit uRptPresupuestosCliente_Server;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, frxClass, frxDBSet, uDAScriptingProvider,
  uDADataTable, uDACDSDataTable, DB, uDAClasses, uDABINAdapter, uROTypes,
  uDAInterfaces, uDAMemDataTable, uDABin2DataStreamer,
  frxGradient, frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDAEngine,
  IBSQL, IBDatabase, IBCustomDataSet, IBQuery, uDADataStreamer, FactuGES_Intf,
  frxExportPDF;

type
  TRptPresupuestosCliente = class(TDataModule)
    DADataCabecera: TDADataSource;
    DADataDetalles: TDADataSource;
    frxBarCodeObject1: TfrxBarCodeObject;
    frxOLEObject1: TfrxOLEObject;
    frxCrossObject1: TfrxCrossObject;
    frxCheckBoxObject1: TfrxCheckBoxObject;
    frxGradientObject1: TfrxGradientObject;
    frxDBCabecera: TfrxDBDataset;
    frxDBDetalles: TfrxDBDataset;
    Bin2DataStreamer: TDABin2DataStreamer;
    tbl_Cabecera: TDAMemDataTable;
    tbl_Detalles: TDAMemDataTable;
    frxReport: TfrxReport;
    schReport: TDASchema;
    DataDictionary: TDADataDictionary;
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    DataSource1: TDataSource;
    DataSource2: TDataSource;
    cabecera: TIBQuery;
    detalles: TIBQuery;
    frxPDFExport1: TfrxPDFExport;
    procedure DataModuleCreate(Sender: TObject);
  private
    FConnection: IDAConnection;
    procedure _GenerarPresupuesto(const AID : Integer); 
  public
    function GenerarPresupuesto(const ListaID : TIntegerArray): Binary;
    function GenerarPresupuestoEnPDF(const ListaID : TIntegerArray): Binary;
  end;

implementation

{$R *.dfm}

uses
  uDataModuleServer, schPresupuestosClienteClient_Intf;

const
  rptInforme = 'InfPresupuestoCliente.fr3';

  { Dataset names for schReport }
  ds_InformeCabecera = 'Informe_Cabecera';
  ds_InformeDetalles = 'Informe_Detalles';


{ TRptPresupuestosProveedor }


procedure TRptPresupuestosCliente.DataModuleCreate(Sender: TObject);
begin
  schReport.ConnectionManager := dmServer.ConnectionManager;
  FConnection := dmServer.DarNuevaConexion;
  frxReport.EngineOptions.NewSilentMode := simReThrow;
end;

function TRptPresupuestosCliente.GenerarPresupuesto(const ListaID : TIntegerArray): Binary;
var
  i: Integer;
begin
  Result := Binary.Create;

  //Vamos generando todos y cada uno de los presupuestos recibidos
  for i := 0 to ListaID.Count - 1 do
      _GenerarPresupuesto(ListaID.Items[i]);

  frxReport.PreviewPages.SaveToStream(Result);
end;

function TRptPresupuestosCliente.GenerarPresupuestoEnPDF(
  const ListaID: TIntegerArray): Binary;
var
  i: Integer;
begin
  Result := Binary.Create;

  //Vamos generando todos y cada uno de los presupuestos recibidos
  for i := 0 to ListaID.Count - 1 do
      _GenerarPresupuesto(ListaID.Items[i]);

  frxPDFExport1.Stream := Result;
  frxReport.Export(frxPDFExport1)
end;

procedure TRptPresupuestosCliente._GenerarPresupuesto(const AID: Integer);
begin
  FConnection.BeginTransaction;
  try
    tbl_Cabecera.ParamByName('ID').AsInteger := AID;
    tbl_Detalles.ParamByName('ID').AsInteger := AID;
    tbl_Cabecera.Active := True;
    tbl_Detalles.Active := True;

    frxReport.LoadFromFile(DarRutaInformes + rptInforme, True);
    frxReport.PrepareReport(False);
  finally
    FConnection.RollbackTransaction;
  end;
end;

end.
