{
===============================================================================
  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.8
  Fecha versión actual: 04-10-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    02-11-2001    En CambiarEntidad tengo que cambiar manualmante la entidad de
                  la barra de titulo ArticulosAlmacen, ya que no está incluida
                  dentro del frame y no se entera de la entidad en la que está,
                  que puede ser ArticulosAlmacen, ArticulosAlmacenFisico o
                  ArticulosAlmacenObra, y en cada uno tendrá un titulo
                  diferente. El no estar incluido en el panel era por un
                  problema de barras en ciertos casos, que salian las dos
                  barras a la vez.

                  Añadir el botón finalizar obra que solo será visible cuando
                  la entidad en la que nos encontremos sea
                  entArticulosAlmacenObra.

    02-03-2002    En el contenido se pueden añadir muchos materiales a la vez.

    07-04-2002    Se ha adaptado a una unica transacción.

    11-08-2002    p223. Se ha modificado finalizar obra para la ampliacion de
                  historico de obras.

    07-09-2002    Adaptada la función 'CambiarEntidad'.

    15-04-2004    Al hacer doble click sobre el grid, se pasará a modificar el
                  registro o se seleccionará, dependiendo del modo en el que
                  se encuentre la pantalla.

    15-04-2004    p272. Adaptación a multiempresa.

    14-07-2004    Arreglo de un error de conversion al cambiar de almacenes a
                  articulos obra

    04-10-2004    Cambio CambiarEntidad para que soporte otro color.              
===============================================================================
}

unit ArticulosAlmacen;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RDXFRAME, Grids, DBGrids, ComCtrls, RdxBotones, ToolWin, ExtCtrls,
  StdCtrls, RdxComboBox, Tipos, Menus, am2000menuitem, IB,
  Db, am2000popupmenu, am2000, RdxBarras,
  RdxPaneles, RXDBCtrl, DBTables, RdxFrameArticulosAlmacen,
  IBCustomDataSet, RdxCampos, StrFunc, Mensajes, am2000utils,Entidades,
  cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage,
  cxEdit, cxDBData, cxGridLevel, cxClasses, cxControls, cxGridCustomView,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
  cxSpinEdit, cxContainer, cxTextEdit;

type
  TfrArticulosAlmacen = class(TRdxFrameArticulosAlmacen)
    menuEntrada: TPopupMenu2000;
    menuSalida: TPopupMenu2000;
    dsEstadoAlmacen: TDataSource;
    BarraEstado: TRdxBarraSuperior;
    brSeleccion: TRdxBarraInferior;
    bSeleccionar: TRdxBoton;
    bCancelarGuardar: TRdxBoton;
    RegularizarEntrada: TMenuItem2000;
    RecibirEntradaPedido: TMenuItem2000;
    N1: TMenuItem2000;
    pnlCuerpo: TRdxPanel;
    pnlGridArticulos: TPanel;
    pnlDatos: TPanel;
    pnlExtra: TRdxBarraSuperior;
    RegularizarSalida: TMenuItem2000;
    N2: TMenuItem2000;
    DevolverSalidaPedido: TMenuItem2000;
    bEntrada: TRdxBotonMenu;
    bSalida: TRdxBotonMenu;
    bTrasladar: TRdxBotonSuperior;
    bEliminar: TRdxBotonSuperior;
    bConsultar: TRdxBotonSuperior;
    bListar: TRdxBotonSuperior;
    gridArticulosAlmacen: TcxGrid;
    imgSombra: TImage;
    gridArticulosAlmacenView: TcxGridDBTableView;
    Panel1: TPanel;
    eNombre: TLabel;
    Buscar: TcxTextEdit;
    bLimpiar: TRdxBoton;
    bRefrescar: TRdxBoton;
    Panel2: TPanel;
    cbxAlmacen: TRdxComboBox;
    bFinalizar: TRdxBoton;
    eAlmacen: TLabel;

    procedure bConsultarClick(Sender: TObject);
    procedure bEliminarClick(Sender: TObject);
    procedure bListadosClick(Sender: TObject);
    procedure bTrasladarClick(Sender: TObject);
    procedure RegularizarEntradaClick(Sender: TObject);
    procedure RegularizarSalidaClick(Sender: TObject);
    procedure RecibirEntradaPedidoClick(Sender: TObject);
    procedure DevolverSalidaPedidoClick(Sender: TObject);
    procedure cbxAlmacenChange(Sender: TObject);
    procedure bSeleccionarClick(Sender: TObject);
    procedure bCancelarGuardarClick(Sender: TObject);
    procedure bFinalizarClick(Sender: TObject);
    procedure gridArticulosAlmacenSelectedCountChange(Sender: TObject);
    procedure BusquedaRapidaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure gridArticulosAlmacenDblClick(Sender: TObject);
    procedure gridArticulosAlmacenViewSelectionChanged(
      Sender: TcxCustomGridTableView);
    procedure BuscarPropertiesChange(Sender: TObject);
    procedure bLimpiarClick(Sender: TObject);
    procedure bRefrescarClick(Sender: TObject);
  private
    FCodigoAlmacenInicial : Variant;
    FCodigoPedido : Variant;
    FListaArticulosAux : TStringList;
    procedure ActualizarBotones;
  protected
    procedure SetCodigoAlmacen (Value : Variant); override;
    procedure BuscarAlmacen; override;
    procedure BuscarArticulo; override;
    procedure FreeContenido; override;
    function CambiarEntidad (EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;
    procedure VerModal; override;
  public
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property TablaArticulosAlmacen;
    property CodigoAlmacen;
    property CodigoArticulo;
  end;

var
  frArticulosAlmacen: TfrArticulosAlmacen;

implementation
 {$R *.DFM}

uses
  BaseDatos, ArticuloAlmacen, ListadoArticulosAlmacen,
  MovimientoAlmacenes, PedidosProveedores, TablaArticulosAlmacen,
  TablaAlmacenes, RdxFramePedidosProveedor, RdxFrameMovimientos,
  Excepciones, FinalizarObra, Configuracion, RdxEmpresaActiva,
  Literales, Variants, TablaArticulos;

constructor TfrArticulosAlmacen.Create (AOwner : TComponent);
var
  i:integer;
begin
  inherited Create(AOwner);
  FCodigoAlmacenInicial := NULL;
  FCodigoPedido := NULL;

  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaArticulosAlmacen := TIBDataSet.Create(Self);
  dsEstadoAlmacen.DataSet := TablaArticulosAlmacen;

  with TablaArticulosAlmacen do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaArticulosAlmacen.sqlGrid);
  end;

  Entidad := entArticulosAlmacen;
  ConfigurarFrame(Self, Self.Entidad);
  dmTablaArticulosAlmacen.InicializarGridArticulosAlmacen(gridArticulosAlmacen);
  FListaArticulosAux := TStringList.Create;
end;

destructor TfrArticulosAlmacen.Destroy;
begin
  TablaArticulosAlmacen.Close;
  TablaArticulosAlmacen.UnPrepare;
  TablaArticulosAlmacen.Free;
  if FListaArticulosAux <> NIL then
  begin
    FListaArticulosAux.Clear;
    FListaArticulosAux.Free;
    FListaArticulosAux := NIL;
  end;
  inherited;
end;

procedure TfrArticulosAlmacen.BuscarAlmacen;
begin
  if Transaccion = NIL then
    exit;

  try
    with TablaArticulosAlmacen do
    begin
      DisableControls;
      Close;

      if not VarIsNull(CodigoAlmacen) then
        Params.ByName('CODIGOALMACEN').AsString := CodigoAlmacen;
      Params.ByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
      Prepare;
      Open;
      ActualizarBotones;

      // dmTablaArticulosAlmacen.InicializarTablaArticulosAlmacen(@TablaArticulosAlmacen);

      EnableControls;
    end;


    // Establece en el combox el almacen correspondiente al codigo a buscar
    cbxAlmacen.ItemIndex := cbxAlmacen.Items.IndexOf(FListaCodigosAlmacen.Values[CodigoAlmacen]);

  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrArticulosAlmacen.BuscarArticulo;
begin
  with TablaArticulosAlmacen do
  begin
    DisableControls;
    Close;
    Open;
    ActualizarBotones;

    // dmTablaArticulosAlmacen.InicializarTablaArticulosAlmacen(@TablaArticulosAlmacen);
    
    EnableControls;
  end;
  TablaArticulosAlmacen.Locate('CODIGOARTICULO',CodigoArticulo,[]);
end;

procedure TfrArticulosAlmacen.cbxAlmacenChange(Sender: TObject);
begin
  CodigoAlmacen := FListaAlmacenesCodigo.Values[cbxAlmacen.Text];
end;

procedure TfrArticulosAlmacen.FreeContenido;
begin
  if (Contenido is TRdxFrameArticulosAlmacen) then begin
    CodigoAlmacen := (Contenido as TRdxFrameArticulosAlmacen).CodigoAlmacen;
    CodigoArticulo := (Contenido as TRdxFrameArticulosAlmacen).CodigoArticulo;
  end;
  // Guarda el codigo del pedido en el que se basa una entrada a almacen por pedido
  if (ContenidoModal is TRdxFramePedidosProveedor) then
    FCodigoPedido := (ContenidoModal as TRdxFramePedidosProveedor).CodigoPedido;

  if (Contenido is TRdxFrameMovimientos) then
  begin
    if (Contenido as TRdxFrameMovimientos).Modo = Traslado then
      CodigoAlmacen := (Contenido as TRdxFrameMovimientos).CodigoAlmacenOrigen;

    //No incluimos entrada de pedido ni salida devolucion, porque como pueden
    //ser tanto almacenes como obras el codigoalmacen luego el combo saldria
    //en blanco al no tener nada mas que almacenes u obras
    if (Contenido as TRdxFrameMovimientos).Modo = Entrada then
      CodigoAlmacen := (Contenido as TRdxFrameMovimientos).CodigoAlmacenDestino
    else
    begin
      if (Contenido as TRdxFrameMovimientos).Modo = Salida then
        CodigoAlmacen := (Contenido as TRdxFrameMovimientos).CodigoAlmacenOrigen
      else
        BuscarAlmacen;
    end;
  end;

  inherited;
end;

procedure TfrArticulosAlmacen.bConsultarClick(Sender: TObject);
begin
  CodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').AsString;
  Contenido := TfrArticuloAlmacen.Create(Self);
  // Por si realmente no se ha liberado con la pregunta tratarcambios
  if (Contenido is TRdxFrameArticulosAlmacen) then
  begin
    Case Entidad of
      entArticulosAlmacen : Contenido.Entidad := entArticuloAlmacen;
      entArticulosAlmacenFisico : Contenido.Entidad := entArticuloAlmacenFisico;
      entArticulosAlmacenObra : Contenido.Entidad := entArticuloAlmacenObra;
    end;
    Contenido.Modo := Consultar;
  end;
end;

procedure TfrArticulosAlmacen.bEliminarClick(Sender: TObject);
begin
  CodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').AsString;
  Contenido := TfrArticuloAlmacen.Create(Self);
  if (Contenido is TRdxFrameArticulosAlmacen) then
  begin
    Case Entidad of
      entArticulosAlmacen : Contenido.Entidad := entArticuloAlmacen;
      entArticulosAlmacenFisico : Contenido.Entidad := entArticuloAlmacenFisico;
      entArticulosAlmacenObra : Contenido.Entidad := entArticuloAlmacenObra;
    end;
    Contenido.Modo := Eliminar;
  end;
end;

procedure TfrArticulosAlmacen.bListadosClick(Sender: TObject);
begin
  CodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').AsString;
  Contenido := TfrListadoArticulosAlmacen.Create(Self);
end;

procedure TfrArticulosAlmacen.RegularizarEntradaClick(Sender: TObject);
begin
  CodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').AsString;
  Contenido := TfrMovimientoAlmacenes.Create(Self);
  if (Contenido is TRdxFrameMovimientos) then
  begin
    Contenido.Entidad := Entidad;
    Contenido.Modo := Entrada;
    (Contenido as TRdxFrameMovimientos).CodigoAlmacenDestino := CodigoAlmacen;
    Contenido.Visible := True;
  end;
end;

procedure TfrArticulosAlmacen.RegularizarSalidaClick(Sender: TObject);
begin
  CodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').AsString;
  Contenido := TfrMovimientoAlmacenes.Create(Self);
  if (Contenido is TRdxFrameMovimientos) then
  begin
    Contenido.Entidad := Entidad;
    Contenido.Modo := Salida;
    (Contenido as TRdxFrameMovimientos).CodigoAlmacenOrigen := CodigoAlmacen;
    Contenido.Visible := True;
  end;
end;

procedure TfrArticulosAlmacen.RecibirEntradaPedidoClick(Sender: TObject);
begin
  CodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').AsString;
  CaptionModal := 'Lista de pedidos pendientes de recibir';
  ModoModal := Recibir;
  ContenidoModal := TfrPedidosProveedores.Create(Self);
  if VarIsNull(FCodigoPedido) then
    exit;

  Contenido := TfrMovimientoAlmacenes.Create(Self);
  Contenido.Entidad := Entidad;
  Contenido.Modo := EntradaPedido;
  (Contenido as TfrMovimientoAlmacenes).CodigoPedido := FCodigoPedido;
  Contenido.Visible := True;
end;

procedure TfrArticulosAlmacen.DevolverSalidaPedidoClick(Sender: TObject);
begin
  CodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').AsString;
  CaptionModal := 'Lista de pedidos totalmente recibidos';
  ModoModal := Devolver;
  ContenidoModal := TfrPedidosProveedores.Create(Self);
  if VarIsNull(FCodigoPedido) then
    exit;

  Contenido := TfrMovimientoAlmacenes.Create(Self);
  Contenido.Entidad := Entidad;
  Contenido.Modo := SalidaDevolucion;
  (Contenido as TfrMovimientoAlmacenes).CodigoPedido := FCodigoPedido;
  Contenido.Visible := True;
end;

procedure TfrArticulosAlmacen.bTrasladarClick(Sender: TObject);
begin
  CodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').AsString;
  Contenido := TfrMovimientoAlmacenes.Create(Self);
  if (Contenido is TRdxFrameMovimientos) then
  begin
    Contenido.Entidad := Entidad;
    Contenido.Modo := Traslado;
    (Contenido as TRdxFrameMovimientos).CodigoAlmacenOrigen := CodigoAlmacen;
    Contenido.Visible := True;
  end;
end;

procedure TfrArticulosAlmacen.bSeleccionarClick(Sender: TObject);
begin
  if TablaArticulosAlmacen.RecordCount = 0 then
  begin
    VerMensaje(msgArtNoHayArtAlm);
    exit;
  end;

  {Codigo almacen no haria falta coger el valor porque ya lo tendríamos,
   porque se inicializa el crearlo el padre y cada vez que se selecciona un
   almacen distinto del combox CodigoAlmacen cambia}
  //FCodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').AsString;

  if gridArticulosAlmacenView.Controller.SelectedRowCount <= 1 then
    FCodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').Value
  else
    ListaArticulos := FListaArticulosAux;

{ ESTO NO VALE  
  if gridArticulosAlmacen.SelectedCount = 0 then
    FCodigoArticulo := TablaArticulosAlmacen.FieldByName('CODIGOARTICULO').Value
  else
    FListaArticulos := dmTablaArticulosAlmacen.darListaArticulos(gridArticulosAlmacen, @TablaArticulosAlmacen);}

  CloseFrame;
end;

procedure TfrArticulosAlmacen.bCancelarGuardarClick(Sender: TObject);
begin
  {Se recupera el almacen inicial que ha sido guardado en la primera asignación
   del CodigoAlmacen del frame, para que no haga frMovimientos todo lo que hace
   cuando el codigo almacen es distinto. No se puede diferenciar desde otro sitio
   cuando se ha dado a seleccionar y cuando a cancelar}
  FCodigoAlmacen := FCodigoAlmacenInicial;
  FCodigoArticulo := Null;
  CloseFrame;
end;

function TfrArticulosAlmacen.CambiarEntidad(EntidadAnterior, Entidad: TRdxEntidad): Boolean;
var
  i : Integer;
begin
  if not inherited CambiarEntidad(EntidadAnterior, Entidad) then
    Exit;

  ConfigurarFrame(Self, Self.Entidad);
      
  //Limpia la posible lista de almacenes que tuviese
  FListaAlmacenesCodigo.Clear;
  FListaCodigosAlmacen.Clear;

  case Entidad of
    entArticulosAlmacen       : begin
                                 eAlmacen.Caption := 'Almacén/Montaje:';
                                 bFinalizar.Visible := False;
                                 cbxAlmacen.Width := 365;
                                 BarraEstado.Caption := Entidades.darNombreEntidad(entAlmacen);
                                 dmTablaAlmacenes.darAlmacenes(EmpresaActiva.Codigo, FListaAlmacenesCodigo,FListaCodigosAlmacen);
                                end;
    entArticulosAlmacenFisico : begin
                                 eAlmacen.Caption := 'Almacén:';
                                 bFinalizar.Visible := False;
                                 bListar.Visible := True;
                                 cbxAlmacen.Width := 365;
                                 BarraEstado.Caption := Entidades.darNombreEntidad(entAlmacenFisico);
                                 dmTablaAlmacenes.darAlmacenesFisicos(EmpresaActiva.Codigo, FListaAlmacenesCodigo,FListaCodigosAlmacen);
                                end;
    entArticulosAlmacenObra   : begin
                                 eAlmacen.Caption := 'Montaje:';
                                 bFinalizar.Visible := True;
                                 bListar.Visible := False;                                 
                                 cbxAlmacen.Width := 260;
                                 BarraEstado.Caption := Entidades.darNombreEntidad(entAlmacenObra);
                                 dmTablaAlmacenes.darAlmacenesObras(EmpresaActiva.Codigo, FListaAlmacenesCodigo,FListaCodigosAlmacen);
                                end;
  end;

  //Limpia la posible lista de almacenes que tuviese
  cbxAlmacen.Items.Clear;

  for i:=0 to FListaAlmacenesCodigo.Count-1 do
    cbxAlmacen.Items.Add(FListaAlmacenesCodigo.Names[i]);

  ActualizarBotones;

  // Carga el primer almacen
  cbxAlmacen.ItemIndex := 0;
  CodigoAlmacen := FListaAlmacenesCodigo.Values[cbxAlmacen.Text];

  {Como FCodigoAlmacenInicial solo sirve para guardar el codigo de almacen
   del que se parte cuando se activa una ventana modal, reiniciamos a null su
   valor ya que el codigo que nos interesa es el que establecerá despues de
   la creacion el frame padre, en nuestro caso ArticuloAlmacen}
  FCodigoAlmacenInicial := Null;
end;

procedure TfrArticulosAlmacen.SetCodigoAlmacen(Value: Variant);
begin
  if (EsCadenaVacia(Value)) then
    Exit;

  {Se guarda el codigo de almacen que asigna inicialmente el padre}
  if (VarIsNull(FCodigoAlmacenInicial)) then
    FCodigoAlmacenInicial := Value;

  inherited;
end;

procedure TfrArticulosAlmacen.VerModal;
begin
  { >>>><<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<
  if (ContenidoModal is TfrListarArticulosAlmacen) then
    (ContenidoModal as TfrListarArticulosAlmacen).CodigoAlmacen := CodigoAlmacen;}

  if (ContenidoModal is TfrFinalizarObra) then
    (ContenidoModal as TfrFinalizarObra).CodigoObra := CodigoAlmacen;

  inherited;
end;

procedure TfrArticulosAlmacen.ActualizarBotones;
begin
  if BaseDatos.IsReadOnly then
  begin
    bEntrada.Enabled := False;
    bSalida.Enabled := False;
    bTrasladar.Enabled := False;
    bEliminar.Enabled := False;
    bConsultar.Enabled := True;
    bListar.Enabled := True;
    Exit;
  end;

  if cbxAlmacen.Items.Count = 0 then
  begin
    bEntrada.Enabled := False;
    bSalida.Enabled := False;
    bTrasladar.Enabled := False;
    bConsultar.Enabled := False;
    bEliminar.Enabled := False;
    bListar.Enabled := False;
  end
  else begin
    if TablaArticulosAlmacen.RecordCount = 0 then
    begin
      bEntrada.Enabled := True;
      bSalida.Enabled := False;
      bTrasladar.Enabled := False;
      bConsultar.Enabled := False;
      bEliminar.Enabled := False;
      bListar.Enabled := False;
    end
    else begin
      bEntrada.Enabled := True;
      bSalida.Enabled := True;
      bTrasladar.Enabled := True;
      bConsultar.Enabled := True;
      bEliminar.Enabled := True;
      bListar.Enabled := True;
    end;
  end;
end;

procedure TfrArticulosAlmacen.bFinalizarClick(Sender: TObject);
var
  Codigo : String;
begin
  Codigo := FListaAlmacenesCodigo.Values[cbxAlmacen.Text];

  CaptionModal := 'Cierre de montaje';
  WidthModal := 360;
  HeightModal := 190;
  ModoModal := Emitir;
  ContenidoModal := TfrFinalizarObra.Create(Self);

  //Para refrescar el grid
  BuscarArticulo;
end;

procedure TfrArticulosAlmacen.gridArticulosAlmacenSelectedCountChange(Sender: TObject);
var
  IndiceCol : Integer;
  CodArt : String;
begin
{ revision  IndiceCol := gridArticulosAlmacenView.GetColumnByFieldName('CODIGOARTICULO').Index;
  CodArt := gridArticulosAlmacenView.Controller.FocusedRecord.DisplayTexts[IndiceCol];

  if gridArticulosAlmacenView.Controller.SelectedRowCount = 1 then
    FListaArticulosAux.Clear;

  if gridArticulosAlmacen.FocusedNode.Selected then
    FListaArticulosAux.Add(CodArt)
  else
    FListaArticulosAux.Delete(FListaArticulosAux.IndexOf(CodArt));}


{ revisar  IndiceCol := gridArticulosAlmacen.ColumnByFieldName('CODIGOARTICULO').Index;
  CodArt := gridArticulosAlmacen.FocusedNode.Strings[IndiceCol];

  if gridArticulosAlmacen.SelectedCount = 1 then
    FListaArticulosAux.Clear;

  if gridArticulosAlmacen.FocusedNode.Selected then
    FListaArticulosAux.Add(CodArt)
  else
    FListaArticulosAux.Delete(FListaArticulosAux.IndexOf(CodArt));}
end;

procedure TfrArticulosAlmacen.BusquedaRapidaKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_RETURN) and (Modo = Seleccionar) then
    bSeleccionar.Click;
end;

procedure TfrArticulosAlmacen.CambiarModo(ModoAnterior, Modo: TRdxModo);
begin
  inherited;
  if Modo = Seleccionar then
    gridArticulosAlmacenView.OptionsSelection.MultiSelect := True
  else
    gridArticulosAlmacenView.OptionsSelection.MultiSelect := False;
end;

procedure TfrArticulosAlmacen.gridArticulosAlmacenDblClick(
  Sender: TObject);
begin
  if Modo = Seleccionar then
    bSeleccionar.Click
end;

procedure TfrArticulosAlmacen.SetContenido(NuevoFrame: TRdxFrame);
begin
  inherited;
  if (Contenido is TfrListadoArticulosAlmacen) then
  begin
    case Entidad of
      entArticulosAlmacen : Contenido.Entidad := entAlmacen;
      entArticulosAlmacenFisico : Contenido.Entidad := entAlmacenFisico;
      entArticulosAlmacenObra : Contenido.Entidad := entAlmacenObra;
    end;
    (Contenido as TfrListadoArticulosAlmacen).CodigoAlmacen := CodigoAlmacen;
  end;
end;

procedure TfrArticulosAlmacen.gridArticulosAlmacenViewSelectionChanged(
  Sender: TcxCustomGridTableView);
begin
  //
end;

procedure TfrArticulosAlmacen.BuscarPropertiesChange(Sender: TObject);
begin
  FiltrarGrid(gridArticulosAlmacen, Buscar.Text);
end;

procedure TfrArticulosAlmacen.bLimpiarClick(Sender: TObject);
begin
  Buscar.Text := '';
end;

procedure TfrArticulosAlmacen.bRefrescarClick(Sender: TObject);
begin
  //Porque no se va ha cambiar de almacen ya que es solo refresco
  BuscarArticulo;
end;

end.

