{
===============================================================================
  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: 12-10-2002
  Versión actual: 1.0.1
  Fecha versión actual: 01-05-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------

    19-11-2003    p268. Cambiar funcion ImprimirListadoCli, ExportarListadoCli,
                  bImprimirClick y bExportarClick para validar intervalo y en
                  lugar por codigo se realice por nombre alfabetico.

    01-05-2004    p274. Actualización del informe a FastReport.
===============================================================================
}

unit ListarClientes;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ListadoBase, ExtCtrls, StdCtrls, RdxTitulos, RdxPaneles, TablaClientes,
  cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit,
  RdxRadioButton;

type
  TfrListarClientes = class(TfrListadoBase)
    ClienteIni: TcxButtonEdit;
    ClienteFin: TcxButtonEdit;
    rbTodos: TRdxRadioButton;
    rbArticulos: TRdxRadioButton;
    Label1: TLabel;
    procedure ClienteIniPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure ClienteFinPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure ClienteIniPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure ClienteFinPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure rbTodosClick(Sender: TObject);
    procedure rbArticulosClick(Sender: TObject);
    procedure RdxFrameShow(Sender: TObject);
  private
    FClienteIni : TDatosCliente;
    FClienteFin : TDatosCliente;
    FCodigoClienteAux : Variant;
    procedure ActivarIntervalo;
    procedure DesactivarIntervalo;
    procedure RefrescarInforme; override;
  protected
    procedure FreeContenido; override;
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
  end;

var
  frListarClientes: TfrListarClientes;

implementation

{$R *.DFM}

{ TfrListarClientes }

uses
  RdxFrameClientes, Configuracion, InformeListadoClientes, Clientes,
  Literales;

constructor TfrListarClientes.Create(AOwner: TComponent);
var
  NombreAux : String;
begin
  inherited Create(AOwner);
  ConfigurarFrame(Self, Self.Entidad);

  FClienteIni := TDatosCliente.Create;
  FClienteFin := TDatosCliente.Create;
  FCodigoClienteAux := NULL;

  FClienteIni.Codigo := dmTablaClientes.DarClienteMin;
  dmTablaClientes.DarDatosCliente(FClienteIni);
  ClienteIni.EditingText := FClienteIni.Nombre;

  FClienteFin.Codigo := dmTablaClientes.DarClienteMax;
  dmTablaClientes.DarDatosCliente(FClienteFin);
  ClienteFin.EditingText := FClienteFin.Nombre;

  FInforme := TdmInformeListadoClientes.Create(Self);
  FInforme.Preview := FVistaPrevia.Preview;
  RefrescarInforme;
end;

destructor TfrListarClientes.Destroy;
begin
  FreeAndNil(FClienteIni);
  FreeAndNil(FClienteFin);
  // El informe se destruye en el padre
  inherited;
end;

procedure TfrListarClientes.ClienteIniPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  ContenidoModal := TfrClientes.Create(Self);
  if not VarIsNull(FCodigoClienteAux) then
  begin
    FClienteIni.Codigo := FCodigoClienteAux;
    dmTablaClientes.DarDatosCliente(FClienteIni);
    ClienteIni.EditingText := FClienteIni.Nombre;
    PostMessage(ClienteIni.Handle, WM_KEYDOWN, VK_RETURN, 0);
  end;
end;

procedure TfrListarClientes.ClienteFinPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  ContenidoModal := TfrClientes.Create(Self);
  if not VarIsNull(FCodigoClienteAux) then
  begin
    FClienteFin.Codigo := FCodigoClienteAux;
    dmTablaClientes.DarDatosCliente(FClienteFin);
    ClienteFin.EditingText := FClienteFin.Nombre;
    PostMessage(ClienteFin.Handle, WM_KEYDOWN, VK_RETURN, 0);
  end;
end;

procedure TfrListarClientes.FreeContenido;
begin
  if (ContenidoModal is TRdxFrameClientes) then
    FCodigoClienteAux := (ContenidoModal as TRdxFrameClientes).CodigoCliente;
  inherited;
end;

procedure TfrListarClientes.ClienteIniPropertiesValidate(Sender: TObject;
  var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, ClienteFin.Text) > 0 then
  begin
    ErrorText := msgInfClienteIniMayor;
    Error := True;
    Exit;
  end;
  FClienteIni.Nombre := DisplayValue;
  FClienteIni.Codigo := '';
  RefrescarInforme;
end;

procedure TfrListarClientes.ClienteFinPropertiesValidate(Sender: TObject;
  var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, ClienteIni.Text) < 0 then
  begin
    ErrorText := msgInfClienteIniMayor;
    Error := True;
    Exit;
  end;
  FClienteFin.Nombre := DisplayValue;
  FClienteFin.Codigo := '';
  RefrescarInforme;
end;

procedure TfrListarClientes.ActivarIntervalo;
begin
  ClienteIni.Enabled := True;
  ClienteIni.SetFocus;
  ClienteFin.Enabled := True;
end;

procedure TfrListarClientes.DesactivarIntervalo;
begin
  ClienteIni.Enabled := False;
  ClienteFin.Enabled := False;
end;

procedure TfrListarClientes.rbTodosClick(Sender: TObject);
begin
  DesactivarIntervalo;
  RefrescarInforme;
end;

procedure TfrListarClientes.rbArticulosClick(Sender: TObject);
begin
  ActivarIntervalo;
  RefrescarInforme;
end;

procedure TfrListarClientes.RefrescarInforme;
begin
  with (FInforme as TdmInformeListadoClientes)do
  begin
    if rbTodos.Checked then
    begin
      NombreIni := NULL;
      NombreFin := NULL;
    end
    else begin
      NombreIni := FClienteIni.Nombre;
      NombreFin := FClienteFin.Nombre;
    end;
    Previsualizar;
  end;
end;

procedure TfrListarClientes.RdxFrameShow(Sender: TObject);
begin
  DesactivarIntervalo;
  rbTodos.SetFocus;
end;

end.
