{
===============================================================================
  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: 23-11-2002
  Versión actual: 1.0.0
  Fecha versión actual: 23-11-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit ImprimirClientes;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RDXFRAME, StdCtrls, RdxComboBox, RdxBotones, RdxCampos,
  ExtCtrls, RdxBarras, RdxTitulos, InformesClientes,
  Grids, DBGrids, RdxPaneles, RdxRadioButton;

type
  TfrImprimirClientes = class(TRdxFrame)
    eInformacion: TLabel;
    Panel: TRdxPanel;
    eCodigoIni: TLabel;
    eCodigoFin: TLabel;
    rbTodos: TRdxRadioButton;
    rbCodigos: TRdxRadioButton;
    NombreIni: TRdxEdit;
    CodigoIni: TRdxEdit;
    CodigoFin: TRdxEdit;
    NombreFin: TRdxEdit;
    brOperacion: TRdxBarraInferior;
    bImprimir: TRdxBoton;
    bCancelar: TRdxBoton;
    bVistaPrevia: TRdxBoton;
    pnlTitulo: TRdxPanelTituloOperacion;
    rbCliente: TRdxRadioButton;
    Label3: TLabel;
    CodCli: TRdxEdit;
    NomCli: TRdxEdit;
    procedure bCancelarClick(Sender: TObject);
    procedure rbTodosClick(Sender: TObject);
    procedure rbCodigosClick(Sender: TObject);
    procedure CodigoIniButtonClick(Sender: TObject);
    procedure CodigoFinButtonClick(Sender: TObject);
    procedure CodigoIniExit(Sender: TObject);
    procedure CodigoFinExit(Sender: TObject);
    procedure rbClienteClick(Sender: TObject);
    procedure CodCliButtonClick(Sender: TObject);
    procedure RdxFrameShow(Sender: TObject);
    procedure CodCliExit(Sender: TObject);
    procedure bVistaPreviaClick(Sender: TObject);
  private
    FCodigoClienteAux : Variant;
    FCodCliente : Variant;
    FCodClienteIni : Variant;
    FCodClienteFin : Variant;
    FInformeCliente : TdmInformesClientes;
    procedure ActivarPorCliente;
    procedure ActivarPorCodigos;
    procedure DesactivarPorCliente;
    procedure DesactivarPorCodigos;
    function DarNombreCliente(Value : string) : string;
    procedure SetCodCliente (Value : Variant);
    procedure SetCodClienteIni (Value : Variant);
    procedure SetCodClienteFin (Value : Variant);
  protected
    procedure FreeContenido; override;
  public
    constructor Create(AOwner : TComponent); override;
  published
    property CodCliente : Variant read FCodCliente write SetCodCliente;
    property CodClienteIni : Variant read FCodClienteIni write SetCodClienteIni;
    property CodClienteFin : Variant read FCodClienteFin write SetCodClienteFin;
  end;

var
  frImprimirClientes: TfrImprimirClientes;

implementation

{$R *.DFM}

uses
  Variants, RdxFrameClientes, Entidades,
  Clientes, TablaClientes, Mensajes, StrFunc;

resourcestring
  msgNoExisteCodigo = 'No existe un cliente con el código %s.';
  msgCodigoIniMenor = 'El código de cliente inicial debe ser menor que el código de cliente final';
  msgCodigoIncorrecto = '%s no es un código correcto para un cliente. Cambie el codigo por otro e inténtelo de nuevo.';
  msgFaltanCodigos = 'Falta indicar o completar el intervalo de códigos de cliente para el listado.';

constructor TfrImprimirClientes.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  FCodCliente := NULL;
  FCodClienteIni := NULL;
  FCodClienteFin := NULL;
end;

procedure TfrImprimirClientes.bCancelarClick(Sender: TObject);
begin
  CloseFrame;
end;

procedure TfrImprimirClientes.ActivarPorCodigos;
begin
  CodigoIni.Enabled := True;
  NombreIni.Enabled := True;
  CodigoIni.VerBoton := True;
  CodigoFin.Enabled := True;
  NombreFin.Enabled := True;
  CodigoFin.VerBoton := True;

  CodigoIni.SetFocus;
end;

procedure TfrImprimirClientes.DesactivarPorCodigos;
begin
  CodigoIni.Enabled := False;
  CodigoIni.VerBoton := False;
  CodigoFin.Enabled := False;
  CodigoFin.VerBoton := False;
  NombreIni.Enabled := False;
  NombreFin.Enabled := False;
end;

procedure TfrImprimirClientes.rbTodosClick(Sender: TObject);
begin
  DesactivarPorCliente;
  DesactivarPorCodigos;
end;

procedure TfrImprimirClientes.rbCodigosClick(Sender: TObject);
begin
  DesactivarPorCliente;
  ActivarPorCodigos;
end;

procedure TfrImprimirClientes.CodigoIniButtonClick(Sender: TObject);
begin
  ContenidoModal := TfrClientes.Create(Self);
  CodClienteIni := FCodigoClienteAux;
end;

procedure TfrImprimirClientes.CodigoFinButtonClick(Sender: TObject);
begin
  ContenidoModal := TfrClientes.Create(Self);
  CodClienteFin := FCodigoClienteAux;
end;

procedure TfrImprimirClientes.CodigoIniExit(Sender: TObject);
begin
  CodClienteIni := CodigoIni.Text;
end;

procedure TfrImprimirClientes.CodigoFinExit(Sender: TObject);
begin
  CodClienteFin := CodigoFin.Text;
end;

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

function TfrImprimirClientes.DarNombreCliente(Value: string): string;
var
  DatosCliente : TDatosCliente;
begin
  Result := '';
  DatosCliente := TDatosCliente.Create;
  with DatosCliente do
  begin
    Codigo := Value;
    try
      if dmTablaClientes.DarDatosCliente(DatosCliente) then
        Result := Nombre
      else
        raise Exception.CreateFmt(msgNoExisteCodigo, [Value]);
    finally
      DatosCliente.Free;
    end;
  end;
end;

procedure TfrImprimirClientes.SetCodCliente(Value: Variant);
begin
  if EsCadenaVacia(Value) then
    Exit;
  FCodCliente := Value;
  if (dmTablaClientes.ValidarCodigo(FCodCliente)) then begin
    FCodCliente := dmTablaClientes.FormatearCodigo(FCodCliente);
    if (not dmTablaClientes.ExisteCodigo(FCodCliente)) then begin
      VerMensajeFmt(msgNoExisteCodigo, [FCodCliente]);
      CodCli.SetFocus;
      Exit;
    end;
  CodCli.Text := FCodCliente;
  NomCli.Text := DarNombreCliente(FCodCliente);
  end
  else begin
    VerMensajeFmt(msgCodigoIncorrecto, [FCodCliente]);
    CodCli.SetFocus;
    Exit;
  end;
end;

procedure TfrImprimirClientes.rbClienteClick(Sender: TObject);
begin
  ActivarPorCliente;
  DesactivarPorCodigos;
end;

procedure TfrImprimirClientes.ActivarPorCliente;
begin
  CodCli.Enabled := True;
  CodCli.VerBoton := True;
  NomCli.Enabled := True;
  CodCli.SetFocus;
end;

procedure TfrImprimirClientes.DesactivarPorCliente;
begin
  CodCli.Enabled := False;
  CodCli.VerBoton := False;
  NomCli.Enabled := False;
end;

procedure TfrImprimirClientes.CodCliButtonClick(Sender: TObject);
begin
  ContenidoModal := TfrClientes.Create(Self);
  CodCliente := FCodigoClienteAux;
end;

procedure TfrImprimirClientes.RdxFrameShow(Sender: TObject);
begin
  CodigoIni.Text := dmTablaClientes.DarClienteMin;
  CodigoFin.Text := dmTablaClientes.DarClienteMax;
end;

procedure TfrImprimirClientes.SetCodClienteFin(Value: Variant);
begin
  if EsCadenaVacia(Value) then
    Exit;
  FCodClienteFin := Value;
  if (dmTablaClientes.ValidarCodigo(FCodClienteFin)) then begin
    FCodClienteFin := dmTablaClientes.FormatearCodigo(FCodClienteFin);
    if (not dmTablaClientes.ExisteCodigo(FCodClienteFin)) then begin
      VerMensajeFmt(msgNoExisteCodigo, [FCodClienteFin]);
      CodigoFin.SetFocus;
      Exit;
    end;
  CodigoFin.Text := FCodClienteFin;    
  NombreFin.Text := DarNombreCliente(FCodClienteFin);
  end
  else begin
    VerMensajeFmt(msgCodigoIncorrecto, [FCodClienteFin]);
    CodigoFin.SetFocus;
    Exit;
  end;
end;

procedure TfrImprimirClientes.SetCodClienteIni(Value: Variant);
begin
  if EsCadenaVacia(Value) then
    Exit;
  FCodClienteIni := Value;
  if (dmTablaClientes.ValidarCodigo(FCodClienteIni)) then begin
    FCodClienteIni := dmTablaClientes.FormatearCodigo(FCodClienteIni);
    if (not dmTablaClientes.ExisteCodigo(FCodClienteIni)) then begin
      VerMensajeFmt(msgNoExisteCodigo, [FCodClienteIni]);
      CodigoIni.SetFocus;
      Exit;
    end;
  CodigoIni.Text := FCodClienteIni;
  NombreIni.Text := DarNombreCliente(FCodClienteIni);
  end
  else begin
    VerMensajeFmt(msgCodigoIncorrecto, [FCodClienteIni]);
    CodigoIni.SetFocus;
    Exit;
  end;
end;

procedure TfrImprimirClientes.CodCliExit(Sender: TObject);
begin
  CodCliente := CodCli.Text;
end;

procedure TfrImprimirClientes.bVistaPreviaClick(Sender: TObject);
begin
  FInformeCliente := TdmInformesClientes.Create(Self);
  FInformeCliente.Generar;
end;

end.
