{
===============================================================================
  Copyright (©) 2002. 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-03-2003
  Versión actual: 1.0.1
  Fecha versión actual: 02-04-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    02-04-2004    Se ha eliminado el atributo SERIE (P8 MULTIEMPRESA)
===============================================================================
}

unit InformeListadoPagosClientes;

interface

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

type
  TdmInformeListadoPagosClientes = class(TdmInformeBase)
    dsTablaPagosClientes: TfrDBDataSet;
    TablaPagosClientes: TIBQuery;
  private
    FCodigoCliente : Variant;
    FNIFCIFCliente : Variant;
    FNombreCliente : Variant;
    FPagos : Double;
    FDebe : Double;
    FTotal : Double;
  protected
    procedure RellenarCabecera(Band: TfrBand); override;
    procedure CrearVariables; override;    
    procedure PrepararConsultas; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property CodigoCliente : variant read FCodigoCliente write FCodigoCliente;
    property NIFCIFCliente : variant read FNIFCIFCliente write FNIFCIFCliente;
    property NombreCliente : variant read FNombreCliente write FNombreCliente;
    property Pagos : Double read FPagos write FPagos;
    property Debe : Double read FDebe write FDebe;
    property Total : Double read FTotal write FTotal;
  end;

var
  dmInformeListadoPagosClientes: TdmInformeListadoPagosClientes;

implementation

{$R *.dfm}

uses
  Types, StrFunc, BaseDatos, Constantes, mensajes, TablaEmpresas;

{ TdmInformeListadoPagosClientes }

procedure TdmInformeListadoPagosClientes.CrearVariables;
begin
  inherited;
  FReport.Dictionary.Variables['intervalo'] := EmpresaActiva.IntervaloPagosCli;
end;

constructor TdmInformeListadoPagosClientes.Create(AOwner: TComponent);
var
  S: TStrings;
begin
  inherited;
  FNombreInforme := 'InformeListadoPagosClientes.frf';
end;

procedure TdmInformeListadoPagosClientes.PrepararConsultas;
begin
  inherited;

  with TablaPagosClientes do
  begin
    Database := FBaseDatos;
    Transaction := FTransaccion;
    with SQL do
    begin
      Clear;

      Add('select c.codigo as codigocliente, c.NIFCIF, c.nombre,');
      Add('(select sum(f2.importetotal)');
      Add('from facturascliente f2');
      Add('where f2.codigocliente = c.codigo and');
      Add('f2.codigoempresa = :CODIGOEMPRESA) totalfacturas,');
      Add('(select sum(p.importe)');
      Add('from pagoscliente p');
      Add('where p.codigocliente = c.codigo and');
      Add('p.codigoempresa = :CODIGOEMPRESA) totalpagos,');
      Add('0.00 debe');

      Add('from clientes c');
      Add('where (((select sum(f2.importetotal)');
      Add('from facturascliente f2');
      Add('where f2.codigocliente = c.codigo and');
      Add('f2.codigoempresa = :CODIGOEMPRESA) is not null) or ((select sum(p.importe)');
      Add('from pagoscliente p');
      Add('where p.codigocliente = c.codigo and');
      Add('p.codigoempresa = :CODIGOEMPRESA) is not null))');
      Add('order by c.nombre');
    end;
    ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    Prepare;
  end;
end;

procedure TdmInformeListadoPagosClientes.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 = 'Empresa')) then
      begin
        with (Objeto as TfrMemoView) do
        begin
          Memo.Clear;
          Memo.Add('Empresa: ' + EmpresaActiva.NombreComercial);
        end;
      end;
    end;
  end;
end;

end.
