{
===============================================================================
  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.1
  Fecha versión actual: 07-04-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    07-04-2002    Se ha adaptado a una unica transacción.
===============================================================================
}

unit LocalizarArticulo;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  RDXFRAME, StdCtrls, RdxComboBox, RdxBotones, RdxCampos,
  ExtCtrls, Tipos, RdxBarras, RdxTitulos, IBCustomDataSet, IB, 
  Grids, DBGrids, RdxMemo, RdxPaneles, RdxFrameArticulos, Db, RXDBCtrl,
  Mensajes, dxCntner, dxTL, dxDBCtrl, dxDBGrid;

type
  TfrLocalizarArticulo = class(TRdxFrameArticulos)
    RdxScrollPanel1: TRdxScrollPanel;
    pnlDatos: TRdxPanel;
    cDatos: TRdxCabecera;
    eCodigo: TLabel;
    Codigo: TRdxDBEdit;
    eUnidades: TLabel;
    cbxUnidadesMedida: TRdxDBComboBox;
    eHastaArticulo: TLabel;
    Descripcion: TRdxDBEdit;
    eObservaciones: TLabel;
    cbxFamilia: TRdxDBComboBox;
    eFamilia: TLabel;
    ePrecioEuros: TLabel;
    Precio: TRdxDBEdit;
    pnlAlmacenes: TRdxPanel;
    cListado: TRdxCabecera;
    pnlGridAlmacenes: TRdxPanel;
    pnlGrid: TPanel;
    dsArticulo: TDataSource;
    brSimple: TRdxBarraInferior;
    bAceptarSimple: TRdxBoton;
    Titulo: TRdxPanelTituloOperacion;
    dsAlmacenes: TDataSource;
    Observaciones: TRdxDBMemo;
    gridAlmacenes: TdxDBGrid;
    procedure bSalirClick(Sender: TObject);
    procedure CodigoButtonClick(Sender: TObject);
  protected
    TablaAlmacenes : TIBDataSet;
    procedure FreeContenido; override;
    procedure BuscarArticulo; override;
  public
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property TablaArticulos;
    property CodigoArticulo;
  end;

var
  frLocalizarArticulo: TfrLocalizarArticulo;

implementation

uses
  BaseDatos, TablaArticulos, Articulos, TablaAlmacenes, Excepciones,
  Configuracion, RdxEmpresaActiva;

{$R *.DFM}
constructor TfrLocalizarArticulo.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  Entidad := entArticulo;
  ConfigurarFrame(Self, Self.Entidad);

  BaseDatos := dmBaseDatos.BD;
  Transaccion := dmBaseDatos.Transaccion;
  TablaArticulos := TIBDataSet.Create(Self);
  dsArticulo.DataSet := TablaArticulos;
  TablaAlmacenes := TIBDataSet.Create(Self);
  dsAlmacenes.DataSet := TablaAlmacenes;

  with TablaArticulos do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaArticulos.sqlConsultar);
    RefreshSQL.Assign(dmTablaArticulos.sqlConsultar);
  end;

  with TablaAlmacenes do
  begin
    Database := BaseDatos;
    Transaction := Transaccion;
    SelectSQL.Assign(dmTablaAlmacenes.sqlLocalizarGrid);
  end;

  dmTablaAlmacenes.InicializarGridLocalizar(gridAlmacenes);
//  gridAlmacenes.AutoWidth := awWidestValueTitle;
end;


procedure TfrLocalizarArticulo.bSalirClick(Sender: TObject);
begin
  try
    Rollback;
    CloseFrame;
  except
    on E : EIBError do
      TratarExcepcion(E);
    on E : Exception do
      TratarExcepcion(E);
  end;
end;

procedure TfrLocalizarArticulo.BuscarArticulo;
begin
  if Transaccion = NIL then
    exit;

  try
    TablaArticulos.Close;
    TablaAlmacenes.Close;

    // Buscar la fila a tratar si es necesario
    if not VarIsNull(CodigoArticulo) then
    begin
      TablaArticulos.ParamByName('CODIGO').AsString := CodigoArticulo;
      TablaAlmacenes.ParamByName('CODIGOARTICULO').AsString := CodigoArticulo;
      TablaAlmacenes.ParamByName('CODIGOEMPRESA').AsInteger := EmpresaActiva.Codigo;
    end;

    TablaArticulos.Prepare;
    TablaAlmacenes.Prepare;
    TablaArticulos.Open;
    dmTablaArticulos.InicializarTablaArticulos(@TablaArticulos);
    TablaAlmacenes.Open;
  except
    on E : EIBError do begin
      VerMensaje(E.Message);
    end;
    on E : EDatabaseError do begin
      VerMensaje(E.Message);
    end;
  end;
end;

procedure TfrLocalizarArticulo.CodigoButtonClick(Sender: TObject);
begin
  ContenidoModal := TfrArticulos.Create(Self);
end;

destructor TfrLocalizarArticulo.Destroy;
begin
  TablaArticulos.Close;
  TablaArticulos.UnPrepare;
  TablaArticulos.Free;
  inherited;
end;

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

end.
