{
===============================================================================
  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: 13-05-2002
  Versión actual: 1.0.1
  Fecha versión actual: 28-05-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    28/05/2004    Se han adaptado los frames para que se autoconfiguren
===============================================================================
}

unit RdxFrameInstaladores;

{$I ..\COMPILE.INC}

interface

uses
  Windows, Classes,
  RdxFrame, RdxDBFrame, IBCustomDataSet, DB, Entidades;

type
  TRdxFrameInstaladores = class(TRdxDBFrame)
  private
    FTablaInstaladores : TIBDataSet;
  protected
    FListaInstaladores : TStringList;
    procedure SetTablaInstaladores (Value : TIBDataSet);
    procedure SetListaInstaladores (Value : TStringList);
    procedure SetCodigoInstalador (Value : Variant);
    procedure SetFCodigoInstalador (Value : Variant);
    function GetCodigoInstalador: Variant;
    function GetFCodigoInstalador: Variant;

    procedure SetContenido (NuevoFrame : TRdxFrame); override;
    function TratarCambios : integer; override;
    procedure BuscarInstalador; virtual; abstract;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
  public
    property TablaInstaladores: TIBDataSet read FTablaInstaladores write SetTablaInstaladores;
    property ListaInstaladores : TStringList read FListaInstaladores write SetListaInstaladores;
    property CodigoInstalador : Variant read GetCodigoInstalador write SetCodigoInstalador;
    property FCodigoInstalador : Variant read GetFCodigoInstalador write SetFCodigoInstalador;

    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property BaseDatos;
    property Transaccion;
  end;

implementation

{$R *.DFM}

uses
  StrFunc, Mensajes, Literales, Configuracion
  {$IFDEF RDX_D6}, Variants{$ENDIF};


{ TRdxFrameInstaladores }

constructor TRdxFrameInstaladores.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FListaInstaladores := TStringList.Create;
  FTablaInstaladores := NIL;
end;

destructor TRdxFrameInstaladores.Destroy;
begin
  FListaInstaladores.free;
  FListaInstaladores := NIL;
  inherited;
end;

function TRdxFrameInstaladores.TratarCambios : integer;
begin
  if (TablaInstaladores.State in [dsEdit, dsInsert]) then
    case VerMensajePregunta(msgGuardarCambios) of
      IDCANCEL    : Result := IDCANCEL;
      IDYES       : begin
                      if (RealizarOperacion)
                      then Result := IDOK
                      else Result := IDCANCEL;
                    end;
      IDNO        : begin
                      if (DescartarOperacion)
                      then Result := IDOK
                      else Result := IDCANCEL;
                    end;
    end
  else Result := IDOK;
end;

procedure TRdxFrameInstaladores.SetContenido(NuevoFrame: TRdxFrame);
begin
  if (Contenido <> NIL) then
    if (Contenido.Name = NuevoFrame.ClassName) then
    begin
      NuevoFrame.Free;
      exit;
    end;

  inherited;

  if (TablaInstaladores <> NIL) then
  begin
    FCodigoInstalador := TablaInstaladores.FieldByName('CODIGO').Value;
    if (Contenido is TRdxFrameInstaladores) then
      (Contenido as TRdxFrameInstaladores).CodigoInstalador := FCodigoInstalador;
  end;
end;

procedure TRdxFrameInstaladores.SetTablaInstaladores(Value: TIBDataSet);
begin
  if (FTablaInstaladores <> Value) then
  begin
    FTablaInstaladores := Value;
  end;
end;

procedure TRdxFrameInstaladores.CambiarModo(ModoAnterior, Modo : TRdxModo);
begin
  inherited;
  if (FModo in [Normal, Seleccionar]) then
  begin
    TablaInstaladores.Close;
    TablaInstaladores.Open;
  end
  else begin
    { Si estábamos en el modo Añadir y pasamos a cualquier otro modo SIEMPRE
      es necesario buscar el codigo de articulo que tiene el frame
      en CodigoArticulo (al activar el modo Añadir NO se pisa este valor con
      el código de articulo nuevo), preguntamos si la tabla esta activa por si
      se ha cerrado al realizar algun cambio en modificar y ejecutar TratarCambios}
    if (not TablaInstaladores.Active) or (ModoAnterior = Anadir) then
      BuscarInstalador;
  end;
end;

function TRdxFrameInstaladores.GetCodigoInstalador: Variant;
begin
  Result := FCodigoInstalador;
end;

function TRdxFrameInstaladores.GetFCodigoInstalador: Variant;
begin
  if (ListaInstaladores.Count = 0) then
    Result := NULL
  else
    Result := ListaInstaladores.Strings[ListaInstaladores.Count-1];
end;

procedure TRdxFrameInstaladores.SetCodigoInstalador(Value: Variant);
begin
  if (not VarIsNull(Value)) then
  begin
    FCodigoInstalador := Value;
    BuscarInstalador;
  end
end;

procedure TRdxFrameInstaladores.SetFCodigoInstalador(Value: Variant);
begin
  FListaInstaladores.Clear;
  if (not VarIsNull(Value)) then
    FListaInstaladores.Add(Value);
end;

procedure TRdxFrameInstaladores.SetListaInstaladores(Value: TStringList);
begin
  if (Value = Nil) or (Value.Count = 0) then
    exit;

  FListaInstaladores.Clear;
  FListaInstaladores.Assign(Value);
end;

function TRdxFrameInstaladores.CambiarEntidad(EntidadAnterior, Entidad: TRdxEntidad): Boolean;
begin
  inherited CambiarEntidad(EntidadAnterior, Entidad);
  ConfigurarFrame(Self, Self.Entidad);
end;

end.
