{
===============================================================================
  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.2
  Fecha versión actual: 01-05-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    13-11-2001    No se comprobaban correctamente los campos inicial y final
                  para intervalos por código de material y por familias.

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

unit ListarArticulos;

interface

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

type
  TfrListarArticulos = class(TfrListadoBase)
    rbTodos: TRdxRadioButton;
    rbArticulos: TRdxRadioButton;
    DescripcionIni: TcxButtonEdit;
    DescripcionFin: TcxButtonEdit;
    rbFamilias: TRdxRadioButton;
    cbFamiliaIni: TcxComboBox;
    cbFamiliaFin: TcxComboBox;
    Label1: TLabel;
    procedure rbTodosClick(Sender: TObject);
    procedure rbArticulosClick(Sender: TObject);
    procedure rbFamiliasClick(Sender: TObject);
    procedure DescripcionIniPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure DescripcionFinPropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure DescripcionFinPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure DescripcionIniPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure cbFamiliaIniPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure cbFamiliaFinPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption;
      var Error: Boolean);
    procedure RdxFrameShow(Sender: TObject);
  private
    FCodigoArticuloAux : Variant;
    FArticuloIni : TDatosArticulo;
    FArticuloFin : TDatosArticulo;
    procedure ActivarNombres;
    procedure ActivarFamilias;
    procedure DesactivarNombres;
    procedure DesactivarFamilias;
    procedure RefrescarInforme; override;
  protected
    procedure FreeContenido; override;
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
  end;

var
  frListarArticulos: TfrListarArticulos;

implementation

{$R *.DFM}

uses
  Articulos, Familias, TablaFamilias, InformeListadoMateriales,
  Mensajes, StrFunc, Configuracion, RdxFrameArticulos, Literales;

{ TfrListarArticulos }

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

  FArticuloIni := TDatosArticulo.Create;
  FArticuloFin := TDatosArticulo.Create;
  FCodigoArticuloAux := NULL;

  DescripcionAux := dmTablaArticulos.DarArticuloMin;
  FArticuloIni.Codigo := '';
  FArticuloIni.Descripcion := DescripcionAux;
  DescripcionIni.EditingText := FArticuloIni.Descripcion;

  DescripcionAux := dmTablaArticulos.DarArticuloMax;
  FArticuloFin.Codigo := '';
  FArticuloFin.Descripcion := DescripcionAux;
  DescripcionFin.EditingText := FArticuloFin.Descripcion;

  cbFamiliaIni.Properties.Items := dmTablaFamilias.darFamilias;
  cbFamiliaIni.Properties.Items.Delete(0); //Borro el item en blanco.
  cbFamiliaIni.ItemIndex := 0;
  cbFamiliaFin.Properties.Items := dmTablaFamilias.darFamilias;
  cbFamiliaFin.Properties.Items.Delete(0); //Borro el item en blanco.
  cbFamiliaFin.ItemIndex := cbFamiliaFin.Properties.Items.Count - 1;

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

procedure TfrListarArticulos.ActivarNombres;
begin
  DescripcionIni.Enabled := True;
  DescripcionIni.SetFocus;
  DescripcionFin.Enabled := True;
end;

procedure TfrListarArticulos.ActivarFamilias;
begin
  cbFamiliaIni.Enabled := True;
  cbFamiliaIni.SetFocus;
  cbFamiliaFin.Enabled := True;
end;

procedure TfrListarArticulos.DesactivarNombres;
begin
  DescripcionIni.Enabled := False;
  DescripcionFin.Enabled := False;
end;

procedure TfrListarArticulos.DesactivarFamilias;
begin
  cbFamiliaIni.Enabled := False;
  cbFamiliaFin.Enabled := False;
end;

procedure TfrListarArticulos.rbTodosClick(Sender: TObject);
begin
  DesactivarNombres;
  DesactivarFamilias;
  RefrescarInforme;
end;

procedure TfrListarArticulos.rbArticulosClick(Sender: TObject);
begin
  ActivarNombres;
  DesactivarFamilias;
  RefrescarInforme;
end;

procedure TfrListarArticulos.rbFamiliasClick(Sender: TObject);
begin
  ActivarFamilias;
  DesactivarNombres;
  RefrescarInforme;  
end;

procedure TfrListarArticulos.FreeContenido;
begin
  if (ContenidoModal is TRdxFrameArticulos) then
    FCodigoArticuloAux := (ContenidoModal as TRdxFrameArticulos).CodigoArticulo;
  inherited FreeContenido;
end;

procedure TfrListarArticulos.DescripcionIniPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, DescripcionFin.Text) > 0 then
  begin
    ErrorText := msgInfArticuloIniMayor;
    Error := True;
    Exit;
  end;
  FArticuloIni.Descripcion := DisplayValue;
  FArticuloIni.Codigo := '';
  RefrescarInforme;
end;

procedure TfrListarArticulos.DescripcionIniPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  ContenidoModal := TfrArticulos.Create(Self);
  if not VarIsNull(FCodigoArticuloAux) then
  begin
    FArticuloIni.Codigo := FCodigoArticuloAux;
    dmTablaArticulos.DarDatosArticulo(FArticuloIni);
    DescripcionIni.EditingText := FArticuloIni.Descripcion;
    PostMessage(DescripcionIni.Handle, WM_KEYDOWN, VK_RETURN, 0);
  end;
end;

procedure TfrListarArticulos.DescripcionFinPropertiesButtonClick(
  Sender: TObject; AButtonIndex: Integer);
begin
  ContenidoModal := TfrArticulos.Create(Self);
  if not VarIsNull(FCodigoArticuloAux) then
  begin
    FArticuloFin.Codigo := FCodigoArticuloAux;
    dmTablaArticulos.DarDatosArticulo(FArticuloFin);
    DescripcionFin.EditingText := FArticuloFin.Descripcion;
    PostMessage(DescripcionFin.Handle, WM_KEYDOWN, VK_RETURN, 0);
  end;
end;

procedure TfrListarArticulos.DescripcionFinPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, DescripcionIni.Text) < 0 then
  begin
    ErrorText := msgInfArticuloIniMayor;
    Error := True;
    Exit;
  end;
  FArticuloFin.Descripcion := DisplayValue;
  FArticuloFin.Codigo := '';
  RefrescarInforme;
end;

destructor TfrListarArticulos.Destroy;
begin
  FreeAndNil(FArticuloIni);
  FreeAndNil(FArticuloFin);
  // El informe se destruye en el padre
  inherited;
end;

procedure TfrListarArticulos.RdxFrameShow(Sender: TObject);
begin
  DesactivarNombres;
  DesactivarFamilias;
  rbTodos.SetFocus;
end;

procedure TfrListarArticulos.cbFamiliaIniPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, cbFamiliaFin.Text) > 0 then
  begin
    ErrorText := msgInfFamiliaIniMayor;
    Error := True;
    Exit;
  end;
  RefrescarInforme;
end;

procedure TfrListarArticulos.cbFamiliaFinPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  if AnsiCompareText(DisplayValue, cbFamiliaIni.Text) < 0 then
  begin
    ErrorText := msgInfFamiliaIniMayor;
    Error := True;
    Exit;
  end;
  RefrescarInforme;
end;

procedure TfrListarArticulos.RefrescarInforme;
begin
  with (FInforme as TdmInformeListadoMateriales) do
  begin
    if rbTodos.Checked then
    begin
      DescripcionIni := NULL;
      DescripcionFin := NULL;
      FamiliaIni := NULL;
      FamiliaFin := NULL;
    end
    else begin
      if rbArticulos.Checked then
      begin
        DescripcionIni := FArticuloIni.Descripcion;
        DescripcionFin := FArticuloFin.Descripcion;
        FamiliaIni := NULL;
        FamiliaFin := NULL;
      end
      else begin
        DescripcionIni := NULL;
        DescripcionFin := NULL;
        FamiliaIni := cbFamiliaIni.Text;
        FamiliaFin := cbFamiliaFin.Text;
      end;
    end;
    Previsualizar;
  end;
end;

end.

