{
===============================================================================
  Copyright (©) 2003. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 26-02-2003
  Versión actual: 1.0.2
  Fecha versión actual: 04-02-2005
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    30-03-2004    Se ha eliminado el atributo SERIE (P8 MULTIEMPRESA)
    04-02-2005    Se elimnina la separación entre el informe resumen facturas e historial
                  facturas quedando un único informe desde el que acceder a ambos.
===============================================================================
}

unit InformeHistorialFacturacionProveedores;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, InformeBase, FR_IBXDB, FR_Shape, FR_Class, DB, IBCustomDataSet,
  IBQuery, FR_DSet, FR_DBSet, RdxEmpresaActiva;

type
  TdmInformeHistorialFacturacionProveedores = class(TdmInformeBase)
    TablaFacturas: TfrDBDataSet;
    TablaFacturasProveedores: TIBQuery;
  private
    FImporteMinimo: Variant;
    FNombreIni: String;
    FNombreFin: String;
    FFechaFacFin: TDateTime;
    FFechaFacIni: TDateTime;
  protected
    procedure RellenarCabecera(Band: TfrBand); override;
    procedure PrepararConsultas; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property NombreIni : String read FNombreIni write FNombreIni;
    property NombreFin : String read FNombreFin write FNombreFin;
    property ImporteMinimo : Variant read FImporteMinimo write FImporteMinimo;
    property FechaFacIni : TDateTime read FFechaFacIni write FFechaFacIni;
    property FechaFacFin : TDateTime read FFechaFacFin write FFechaFacFin;
  end;

var
  dmInformeHistorialFacturacionProveedores: TdmInformeHistorialFacturacionProveedores;

implementation

{$R *.dfm}

{ TdmInformeHistorialFacturacionProveedores }

uses
  BaseDatos, StrFunc, TablaEmpresas;

constructor TdmInformeHistorialFacturacionProveedores.Create(AOwner: TComponent);
begin
  inherited;
  FNombreInforme := 'HistorialFacturacionProveedores.frf';
end;

procedure TdmInformeHistorialFacturacionProveedores.PrepararConsultas;
begin
  inherited;
  with TablaFacturasProveedores do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Add('select FP.CODIGO, FP.FECHAFACTURA, FP.NOMBRE, FP.NIFCIF,');
    SQL.Add('COALESCE(P.CALLE, FP.CALLE) as CALLE, COALESCE(P.NUMERO, FP.NUMERO) as NUMERO,');
    SQL.Add('COALESCE(P.CODIGOPOSTAL, FP.CODIGOPOSTAL) as CODIGOPOSTAL, ');
    SQL.Add('COALESCE(P.POBLACION, FP.POBLACION) as POBLACION ,');
    SQL.Add('COALESCE(P.PROVINCIA, FP.PROVINCIA) as PROVINCIA ,');
    SQL.Add('FP.IVA, FP.BASEIMPONIBLE, FP.IMPORTEIVA, FP.IMPORTETOTAL');
    SQL.Add('from FACTURASPROVEEDOR FP left join PROVEEDORES P');
    SQL.Add('on FP.CODIGOPROVEEDOR = P.CODIGO');
    SQL.Add('where FP.CODIGOEMPRESA = :CODIGOEMPRESA');
    SQL.Add('and upper(FP.NOMBRE) between upper(:NOMBREINI) and upper(:NOMBREFIN) ');
    SQL.Add('and FP.FECHAFACTURA between :FECHAFACINI and :FECHAFACFIN ');
    if not VarIsNull(FImporteMinimo) then
       SQL.Add('and FP.BASEIMPONIBLE >= :BASEIMPONIBLE ');
    SQL.Add('order by FP.NOMBRE, FP.FECHAFACTURA');
    ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    ParamByName('NOMBREINI').AsString := FNombreIni;
    ParamByName('NOMBREFIN').AsString := FNombreFin;
    ParamByName('FECHAFACINI').AsDateTime := FFechaFacIni;
    ParamByName('FECHAFACFIN').AsDateTime := FFechaFacFin;
    if not VarIsNull(FImporteMinimo) then
       ParamByName('BASEIMPONIBLE').AsFloat := FImporteMinimo;
    Prepare;
  end;
end;

procedure TdmInformeHistorialFacturacionProveedores.RellenarCabecera(
  Band: TfrBand);
var
  iCont : Integer;
  Objeto : TfrView;
begin
  inherited;
  with Band do
  begin
     for iCont := 0 to Objects.Count - 1 do
      begin
        Objeto := Objects[iCont];
        if ((Objeto is TfrMemoView) and (Objeto.Name = 'CabParametros')) then
        begin
          with (Objeto as TfrMemoView) do
          begin
            Memo.Clear;
            Memo.Add('Empresa: ' + EmpresaActiva.NombreComercial);
            Memo.Add('Rango de fechas: ' + DateToStr(FFechaFacIni) + ' - ' + DateToStr(FFechaFacFin));
            Memo.Add('Rango de proveedores: ' + FNombreIni + ' - ' + FNombreFin);
            if not VarIsNull(FImporteMinimo) then
               Memo.Add('Importe de facturas mínimo: ' + FormatFloat('#,##0.00', FImporteMinimo) + ' €');
          end;
        end;
      end;
  end;
end;

end.

