unit uEditorInformePresupuestosReport;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorPreview, frxExportText, frxExportRTF, frxExportMail,
  frxExportXLS, frxExportImage, frxExportPDF, frxClass, frxDCtrl, frxGradient,
  frxChBox, frxCross, frxRich, frxOLE, frxBarcode, JvAppStorage,
  JvAppRegistryStorage, JvComponentBase, JvFormPlacement, ImgList, PngImageList,
  StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TB2ExtItems,
   SpTBXItem, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls,
  JvExControls, JvNavigationPane, uCustomView,
  uViewBase, uViewPeriodoFechas, 
  uViewFiltroClientes, dxLayoutControl, cxControls, uViewFiltroImportes,
  FactuGES_Intf, SpTBXDkPanels, uEditorInformeBase,
  uIEditorInformeBase, uViewParametrosInforme, uIEditorInformePresupuestosReport;

type
  TfEditorInformePresupuestosReport = class(TfEditorInformeBase, IEditorInformePresupuestosReport)
    TBXItem58: TSpTBXItem;
    frViewPeriodoFechas1: TfrViewPeriodoFechas;
    frViewFiltroImportes1: TfrViewFiltroImportes;
    frViewFiltroClientes1: TfrViewFiltroClientes;
    procedure actRefrescarExecute(Sender: TObject);
  private
    FListaIDClientes: TIntegerArray;
    function GetFechaFin: Variant;
    function GetFechaInicio: Variant;
    function GetListaIDClientes: TIntegerArray;
    function GetImporteMinimo: Currency;
    function GetDesglosadoCliente: Boolean;

    procedure RefrescarInforme;

  public
    property FechaInicio: Variant read GetFechaInicio;
    property FechaFin: Variant read GetFechaFin;
    property ListaIDClientes: TIntegerArray read GetListaIDClientes;
    property DesglosadoCliente: Boolean read GetDesglosadoCliente;
    property ImporteMinimo: Currency read GetImporteMinimo;

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;


implementation

{$R *.dfm}

uses uROTypes, DateUtils, uGestorInformesController, uFactuGES_App;

{ TfEditorGestorInformesReport }

procedure TfEditorInformePresupuestosReport.actRefrescarExecute(Sender: TObject);
begin
  inherited;
  RefrescarInforme;
end;

constructor TfEditorInformePresupuestosReport.Create(AOwner: TComponent);
begin
  inherited;
  FListaIDClientes := TIntegerArray.Create;
end;

destructor TfEditorInformePresupuestosReport.Destroy;
begin
  FListaIDClientes.Free;
  inherited;
end;

function TfEditorInformePresupuestosReport.GetDesglosadoCliente: Boolean;
begin
  if frViewFiltroImportes1.cbxDesglosado.Enabled then
    Result := frViewFiltroClientes1.cbxDesglosado.Checked
  else
     Result := False;
end;

function TfEditorInformePresupuestosReport.GetFechaFin: Variant;
begin
  Result := frViewPeriodoFechas1.edtFechaFin.EditValue;

  //Esto es para quitar la hora del timestamp para que luego no me redondee al dia siguiente
  if not VarIsNull(Result) then
     Result := DateOf(frViewPeriodoFechas1.edtFechaFin.Date);
end;

function TfEditorInformePresupuestosReport.GetFechaInicio: Variant;
begin
  Result := frViewPeriodoFechas1.edtFechaIni.EditValue;
end;

function TfEditorInformePresupuestosReport.GetImporteMinimo: Currency;
begin
  if frViewFiltroImportes1.eImporte.Enabled then
     Result := frViewFiltroImportes1.eImporte.Value
  else
     Result := 0;
end;

function TfEditorInformePresupuestosReport.GetListaIDClientes: TIntegerArray;
begin
  FListaIDClientes.Clear;
  if Assigned(frViewFiltroClientes1.Cliente) then
     FListaIDClientes.Add(frViewFiltroClientes1.Cliente.ID);

  Result := FListaIDClientes;
end;

procedure TfEditorInformePresupuestosReport.RefrescarInforme;
var
  AStream: Binary;
begin
  ShowHourglassCursor;
  try
    AStream := (Controller as IGestorInformesController).DataModule.GenerarInformeListadoPresupuestos(
      AppFactuGES.EmpresaActiva.ID,
      FechaInicio,
      FechaFin,
      ListaIDClientes,
      DesglosadoCliente,
      ImporteMinimo);

    LoadFromStream(AStream);
    Report.ShowPreparedReport;
  finally
    FreeAndNil(AStream);
    HideHourglassCursor;
  end;
end;

end.
