{
===============================================================================
  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: 23-11-2004
===============================================================================
  Modificaciones:

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

    19-11-2003    p268. Cambiar funcion ImprimirListadoCli y bImprimirClick
                  para hacerlo alfabeticamente.

    23-11-2004    p297. Solo sacar etiquetas de los clientes/proveedores etiquetados

===============================================================================
}

unit GenerarEtiquetasClientes;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RdxFrame, RdxBotones, ExtCtrls, RdxPaneles, RdxBarras, RdxCheckBox,
  StdCtrls, RdxCampos, Tipos, RdxDialogos,

  DB, IBCustomDataSet, IBSQL, BaseDatos, IBDatabase, IBQuery,
  FR_Class, FR_DSet, FR_DBSet, FR_View, FR_PTabl, RdxRadioButton;

type
  TfrGenerarEtiquetasClientes = class(TRdxFrame)
    brOperacion: TRdxBarraInferior;
    bCancelar: TRdxBoton;
    bImprimir: TRdxBoton;
    NombreClienteIni: TRdxEdit;
    CodCliIni: TRdxEdit;
    CodCliFin: TRdxEdit;
    NombreClienteFin: TRdxEdit;
    eFechaIni: TLabel;
    eFechaFin: TLabel;
    frReport1: TfrReport;
    frDBDataSet1: TfrDBDataSet;
    IBQuery1: TIBQuery;
    eInfoCriterios: TLabel;
    rbTodos: TRdxRadioButton;
    rbCodigo: TRdxRadioButton;
    procedure bCancelarClick(Sender: TObject);
    procedure CodCliIniButtonClick(Sender: TObject);
    procedure CodCliIniExit(Sender: TObject);
    procedure bImprimirClick(Sender: TObject);
    procedure CodCliFinButtonClick(Sender: TObject);
    procedure CodCliFinExit(Sender: TObject);
    procedure rbTodosClick(Sender: TObject);
    procedure rbCodigoClick(Sender: TObject);
  private
    FCodCliIni : variant;
    FCodCliFin : variant;
    FCodigoClienteAux : variant;
    procedure SetCodigoCliente (Index : Integer; Value : Variant);
    procedure ImprimirListadoCli;
  protected
    procedure FreeContenido; override;
    procedure VerModal; override;    
  public
    constructor Create (AOwner : TComponent); override;
  published
    property CodClienteIni : Variant index 0 read FCodCliIni write SetCodigoCliente;
    property CodClienteFin : Variant index 1 read FCodCliFin write SetCodigoCliente;
  end;

var
  frGenerarEtiquetasClientes: TfrGenerarEtiquetasClientes;

implementation

{$R *.DFM}

uses
  StrFunc, TablaClientes,
  RdxFrameClientes, Mensajes, Clientes, Configuracion, Literales;


{ TfrGenerarEtiquetasClientes }

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

constructor TfrGenerarEtiquetasClientes.Create(AOwner: TComponent);
begin
  inherited;
//  CodClienteIni := dmTablaClientes.DarClienteMin;
//  CodClienteFin := dmTablaClientes.DarClienteMax;
  rbTodosClick(Self);
end;

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

procedure TfrGenerarEtiquetasClientes.ImprimirListadoCli;
begin
  IBQuery1.Database := dmBaseDatos.BD;
  IBQuery1.Transaction := dmBaseDatos.Transaccion;
  IBQuery1.SQL.Add('select * from CLIENTES ');
  IBQuery1.SQL.Add('where ETIQUETADO = 1 ');
  if not rbTodos.Checked then
     IBQuery1.SQL.Add('and upper(NOMBRE) between upper(:NOMBREINI) and upper(:NOMBREFIN)');
  IBQuery1.SQL.Add('order by NOMBRE');

  if not rbTodos.Checked then
  begin
    IBQuery1.ParamByName('NOMBREINI').AsString := NombreClienteIni.Text;
    IBQuery1.ParamByName('NOMBREFIN').AsString := NombreClienteFin.Text;
  end;

  IBQuery1.Active := True;

  frReport1.LoadFromFile(ExtractFileDir(ParamStr(0))+ '\informes\' + Configuracion.ListaInformes.Values['LISTADOETIQUETASCLIENTES']);
  frReport1.PrepareReport;
  frReport1.PrintPreparedReportDlg;
end;

procedure TfrGenerarEtiquetasClientes.SetCodigoCliente (Index : Integer; Value : Variant);
var
  DatosCliente : TDatosCliente;
begin
  if VarIsNull(Value) then
    exit;

  FCodigoClienteAux := Value;
  DatosCliente := TDatosCliente.Create;
  try
    DatosCliente.Codigo := FCodigoClienteAux;
    dmTablaClientes.DarDatosCliente(DatosCliente);
    case Index of
      0 : begin
            CodCliIni.Text := FCodigoClienteAux;
            NombreClienteIni.Text := DatosCliente.Nombre;
          end;
      1 : begin
            CodCliFin.Text := FCodigoClienteAux;
            NombreClienteFin.Text := DatosCliente.Nombre;
          end;
    end;
  finally
    DatosCliente.Free;
  end;
end;

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

procedure TfrGenerarEtiquetasClientes.CodCliIniExit(Sender: TObject);
begin
  if EsCadenaVacia(CodCliIni.Text) then
  begin
    VerMensaje(msgCliFaltaCodigo);
    CodCliIni.SetFocus;
    Exit;
  end;

  if (dmTablaClientes.ValidarCodigo(CodCliIni.Text)) then begin
    CodCliIni.Text := dmTablaClientes.FormatearCodigo(CodCliIni.Text);
    if (dmTablaClientes.ExisteCodigo(CodCliIni.Text)) then
      CodClienteIni := CodCliIni.Text
    else
    begin
      VerMensajeFmt(msgCliCodCliNoExiste, [CodCliIni.Text]);
      CodCliIni.SetFocus;
    end;
  end
  else begin
    VerMensajeFmt(msgCliCodCliIncorrecto, [CodCliIni.Text]);
    CodCliIni.SetFocus;
  end;
end;

procedure TfrGenerarEtiquetasClientes.bImprimirClick(Sender: TObject);
begin
  if not rbTodos.Checked then
  begin
    if (esCadenaVacia(CodCliIni.Text) OR esCadenaVacia(CodCliFin.Text)) then
    begin
        VerMensaje(msgIntervaloObligatorio);
        exit;
    end;

    if AnsiCompareText(NombreClienteIni.text, NombreClienteFin.Text) > 0 then
    begin
        VerMensaje(msgIntervaloIniMenor);
        exit;
    end;
  end;

  ImprimirListadoCli;
  CloseFrame;
end;

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

procedure TfrGenerarEtiquetasClientes.CodCliFinExit(Sender: TObject);
begin
  if EsCadenaVacia(CodCliFin.Text) then
  begin
    VerMensaje(msgCliFaltaCodigo);
    CodCliFin.SetFocus;
    Exit;
  end;

  if (dmTablaClientes.ValidarCodigo(CodCliFin.Text)) then begin
    CodCliFin.Text := dmTablaClientes.FormatearCodigo(CodCliFin.Text);
    if (dmTablaClientes.ExisteCodigo(CodCliFin.Text)) then
      CodClienteFin := CodCliFin.Text
    else
    begin
      VerMensajeFmt(msgCliCodCliNoExiste, [CodCliFin.Text]);
      CodCliFin.SetFocus;
    end;
  end
  else begin
    VerMensajeFmt(msgCliCodCliIncorrecto, [CodCliFin.Text]);
    CodCliFin.SetFocus;
  end;
end;

procedure TfrGenerarEtiquetasClientes.rbTodosClick(Sender: TObject);
begin
  CodCliIni.Enabled := False;
  NombreClienteIni.Enabled := False;
  CodCliFin.Enabled := False;
  NombreClienteFin.Enabled := False;
end;

procedure TfrGenerarEtiquetasClientes.rbCodigoClick(Sender: TObject);
begin
  CodCliIni.Enabled := True;
  NombreClienteIni.Enabled := True;
  CodCliFin.Enabled := True;
  NombreClienteFin.Enabled := True;
end;

procedure TfrGenerarEtiquetasClientes.VerModal;
begin
 if (ContenidoModal is TfrClientes) then
    (ContenidoModal as TfrClientes).SoloEtiquetados := true;

  inherited;
end;

end.
