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, uDABin2DataStreamer, uDAMemDataTable;

type
  TRptFacturasCliente = class(TDataModule)
    DADataCabecera: TDADataSource;
    DADataDetalles: TDADataSource;
    tbl_FacturaCliente: TDAMemDataTable;
    tbl_DetallesFacturaCliente: TDAMemDataTable;
    frxRichObject1: TfrxRichObject;
    frxBarCodeObject1: TfrxBarCodeObject;
    frxOLEObject1: TfrxOLEObject;
    frxCrossObject1: TfrxCrossObject;
    frxCheckBoxObject1: TfrxCheckBoxObject;
    frxGradientObject1: TfrxGradientObject;
    frxDBCabecera: TfrxDBDataset;
    frxDBDetalles: TfrxDBDataset;
    DADataVencimientos: TDADataSource;
    tbl_Vencimientos: TDAMemDataTable;
    frxDBDataset1: TfrxDBDataset;
    DataDictionary: TDADataDictionary;
    frxReport: TfrxReport;
    Bin2DataStreamer: TDABin2DataStreamer;
    schReport: TDASchema;
    procedure DataModuleCreate(Sender: TObject);
  private
    FConnection: IDAConnection;
    //Genera cada uno de los albaranes a imprimir
    procedure GenerarFactura(const ID: integer); overload;
  public
    function GenerarFactura(const AFacturaID : String): Binary; overload;
  end;

implementation

{$R *.dfm}

uses
  uDataModuleServer, schFacturasClienteClient_Intf;

const
  rptFacturaCliente = 'InfFacturaCliente.fr3';
  rptFacturaClienteAbeto = 'InfFacturaClienteAbeto.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 AFacturaID: String): Binary;
var
  ID_Facturas: TStringList;
  i: Integer;

begin
  Result := Binary.Create;
  FConnection.BeginTransaction;

  try
    ID_Facturas := TStringList.Create;
    ID_Facturas.CommaText := AFacturaID;

    //Vamos generando todos y cada uno de los albaranes recibidos
    for i := 0 to ID_Facturas.Count - 1 do
        GenerarFactura(StrToInt(ID_Facturas.Strings[i]));

    frxReport.PreviewPages.SaveToStream(Result);

  finally
    FConnection.RollbackTransaction;
  end;
end;

procedure TRptFacturasCliente.GenerarFactura(const ID: integer);
begin
  tbl_FacturaCliente.ParamByName('ID').AsInteger := ID;
  tbl_DetallesFacturaCliente.ParamByName('ID_FACTURA').AsInteger := ID;
  tbl_Vencimientos.ParamByName('ID_FACTURA').AsInteger := ID;
  tbl_FacturaCliente.Active := True;
  tbl_DetallesFacturaCliente.Active := True;
  tbl_Vencimientos.Active := True;

  if (tbl_FacturaCliente.FieldByName('ID_TIENDA').AsInteger <> 3) then
     frxReport.LoadFromFile(DarRutaInformes + rptFacturaCliente, True)
  else
     frxReport.LoadFromFile(DarRutaInformes + rptFacturaClienteAbeto, True);
  frxReport.PrepareReport(False);
end;

end.
