{
===============================================================================
  Copyright (©) 2001. 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: 01-10-2001
  Versión actual: 1.0.6
  Fecha versión actual: 29-06-2004
==============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    20-01-2002    Se ha rediseñado el informe para usar Word directamente en
                  vez de exportación a RTF. Ahora el informe se agrupa por
                  meses.

    05-03-2002    El informe ahora saca el listado por intervalo de fechas
                  de facturas.

    07-04-2002    Se ha adaptado para la transacción única.

    05-08-2002    p235. En el informe de facturas pendientes de proveedor no
                  deben aparecer las que estén pagadas.

    08-03-2003    p252. En el listado de facturas pendientes de proveedor
                  poder realizar el informe eligiendo un proveedor concreto.

    29-06-2004    p272. Adaptación a multiempresa.

    29-06-2004    p274. Migración a FastReport.

    28-07-2004    p281. Informe de listados de facturas de proveedor pendientes
                  el resumen por bancos no lo hacia bien

    29-07-2004    p282. En el listados de facturas de proveedor pendientes,
                  las sumas en el resumen están mal.
===============================================================================
}

unit InformeListadoFacturasProvPendientes;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  InformeBase, IBDatabase, Db, FR_IBXDB, FR_Shape, FR_Class, FR_DSet,
  FR_DBSet, IBCustomDataSet, IBQuery, Tipos;

type
  TdmInformeListadoFacturasProvPendientes = class(TdmInformeBase)
    TablaFacturas: TIBQuery;
    frdsTablaFacturas: TfrDBDataSet;
    TablaFacturasBanco: TIBQuery;
    frdsTablaFacturasBanco: TfrDBDataSet;
  private
    FFechaIni: Variant;
    FFechaFin: Variant;
    FTipo: TTipoInforme;
    FCodigoProveedor: Variant;
    FNombreProveedor: Variant;
    procedure InformeGetParametersText(Memo : TStringList);
  protected
    procedure PrepararConsultas; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property FechaIni : Variant read FFechaIni write FFechaIni;
    property FechaFin : Variant read FFechaFin write FFechaFin;
    property CodigoProveedor : Variant read FCodigoProveedor write FCodigoProveedor;
    property NombreProveedor : Variant read FNombreProveedor write FNombreProveedor;
    property Tipo : TTipoInforme read FTipo write FTipo;
  end;

var
  dmInformeListadoFacturasProvPendientes: TdmInformeListadoFacturasProvPendientes;

implementation

{$R *.DFM}

{ TdmInformeListadoFacturasProvPendientes }

uses
  RdxEmpresaActiva, Literales;

constructor TdmInformeListadoFacturasProvPendientes.Create(
  AOwner: TComponent);
begin
  inherited;
  FFechaIni := NULL;
  FFechaFin := NULL;
  FCodigoProveedor := NULL;
  FNombreProveedor := NULL;
  FTipo := tiTodo;
  FNombreInforme := 'ListadoFacturasProvPendientes.frf';
  OnGetParametersText := InformeGetParametersText;
end;

procedure TdmInformeListadoFacturasProvPendientes.InformeGetParametersText(
  Memo: TStringList);
begin
  with Memo do
  begin
    if Tipo = tiTodo then
      Add(msgInfIntervaloTodosPro)
    else
      Add(SysUtils.Format('%s - %s', [FCodigoProveedor, FNombreProveedor]));
    Add(SysUtils.Format(msgInfIntervaloFec, [FFechaIni, FFechaFin]))
  end;
end;

procedure TdmInformeListadoFacturasProvPendientes.PrepararConsultas;
begin
  with TablaFacturas do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Add('select BANCO, NOMBRE, IMPORTETOTAL, FORMAPAGO, FECHAVENCIMIENTO, ');
    SQL.Add('SITUACION, ');
    SQL.Add('EXTRACT (MONTH FROM FECHAVENCIMIENTO)||''/''||EXTRACT (YEAR FROM FECHAVENCIMIENTO) as MES ');
    SQL.Add('from FACTURASPROVEEDOR ');
    SQL.Add('where FECHAVENCIMIENTO between :FECHAINI and :FECHAFIN ');
    SQL.Add('and upper(SITUACION) <> ''PAGADA'' ');
    SQL.Add('and CODIGOEMPRESA = :CODIGOEMPRESA ');
    if Tipo = tiPorProveedor then
    begin
      SQL.Add('and CODIGOPROVEEDOR = :CODIGOPROVEEDOR ');
      ParamByName('CODIGOPROVEEDOR').AsString := FCodigoProveedor;
    end;
    SQL.Add('order by FECHAVENCIMIENTO, BANCO, NOMBRE');

    ParamByName('FECHAINI').AsDate := FFechaIni;
    ParamByName('FECHAFIN').AsDate := FFechaFin;
    ParambyName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    Prepare;
  end;

  with TablaFacturasBanco do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    SQL.Clear;
    SQL.Add('select BANCO, NOMBRE, IMPORTETOTAL, FORMAPAGO, FECHAVENCIMIENTO, ');
    SQL.Add('SITUACION, ');
    SQL.Add('EXTRACT (MONTH FROM FECHAVENCIMIENTO)||''/''||EXTRACT (YEAR FROM FECHAVENCIMIENTO) as MES ');
    SQL.Add('from FACTURASPROVEEDOR ');
    SQL.Add('where FECHAVENCIMIENTO between :FECHAINI and :FECHAFIN ');
    SQL.Add('and upper(SITUACION) <> ''PAGADA'' ');
    SQL.Add('and CODIGOEMPRESA = :CODIGOEMPRESA ');
    if Tipo = tiPorProveedor then
    begin
      SQL.Add('and CODIGOPROVEEDOR = :CODIGOPROVEEDOR ');
      ParamByName('CODIGOPROVEEDOR').AsString := FCodigoProveedor;
    end;
    SQL.Add('order by 7, BANCO');

    ParamByName('FECHAINI').AsDate := FFechaIni;
    ParamByName('FECHAFIN').AsDate := FFechaFin;
    ParambyName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    Prepare;
  end;

end;

end.
