{
===============================================================================
  Copyright (©) 2002. 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: 26-01-2003
  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 RdxFrameDetallesLibro;

{$I ..\COMPILE.INC}

interface

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

type
  TRdxFrameDetallesLibro = class(TRdxDBFrame)
  private
    FTipoLibro : Variant;
    FNumEntrada : Variant;
    FTablaDetallesLibro: TIBDataSet;
    procedure SetTablaDetallesLibro(Value: TIBDataSet);
  protected //Pueden ser overrideados por el hijo
    procedure SetNumEntrada (Value : Variant); virtual;
    procedure SetTipoLibro (Value : Variant); virtual;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;

    function TratarCambios : integer; override;
    procedure BuscarLibro; virtual;
    procedure BuscarNumEntrada; virtual;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
  public
    property TablaDetallesLibro: TIBDataSet read FTablaDetallesLibro write SetTablaDetallesLibro;
    property TipoLibro : Variant read FTipoLibro write SetTipoLibro;
    property NumEntrada : Variant read FNumEntrada write SetNumEntrada;

    constructor Create (AOwner : TComponent); override;
  published
  end;


implementation

{$R *.DFM}

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

{ TRdxFrameDetallesLibro }

////////////////////////////////////////////////////////////////////////////////
// PRIVATE
////////////////////////////////////////////////////////////////////////////////
procedure TRdxFrameDetallesLibro.SetNumEntrada(Value: Variant);
begin
  if (not esCadenaVacia(Value)) then
  begin
    FNumEntrada := Value;
    BuscarNumEntrada;
  end;
end;

procedure TRdxFrameDetallesLibro.SetTablaDetallesLibro(Value: TIBDataSet);
begin
  if (FTablaDetallesLibro <> Value) then
    FTablaDetallesLibro := Value;
end;

////////////////////////////////////////////////////////////////////////////////
// PROTECTED
////////////////////////////////////////////////////////////////////////////////
procedure TRdxFrameDetallesLibro.SetTipoLibro(Value: Variant);
begin
  if not EsCadenaVacia(Value) then
  begin
    FTipoLibro := Value;
    BuscarLibro;
  end
end;

procedure TRdxFrameDetallesLibro.SetContenido(NuevoFrame: TRdxFrame);
begin
  if (FContenido <> NIL) then
    if (Contenido.Name = NuevoFrame.ClassName) then
    begin
      NuevoFrame.Free;
      exit;
    end;
  inherited;
  if (TablaDetallesLibro <> NIL) then
  begin
    if Contenido is TRdxFrameDetallesLibro then begin
      FTipoLibro := TablaDetallesLibro.FieldByName('TIPOLIBRO').Value;
      FNumEntrada := TablaDetallesLibro.FieldByName('NUMENTRADA').Value;
      (Contenido as TRdxFrameDetallesLibro).TipoLibro := FTipoLibro;
      (Contenido as TRdxFrameDetallesLibro).NumEntrada := FNumEntrada;
    end;
  end;
end;

function TRdxFrameDetallesLibro.TratarCambios : integer;
begin
  if (TablaDetallesLibro.State in dsEditModes) then
  begin
    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
  end
  else Result := IDOK;
end;

procedure TRdxFrameDetallesLibro.BuscarLibro;
begin
//
end;

procedure TRdxFrameDetallesLibro.BuscarNumEntrada;
begin
//
end;

procedure TRdxFrameDetallesLibro.CambiarModo(ModoAnterior, Modo : TRdxModo);
begin
  inherited;
  if (FModo in [Normal, Seleccionar]) then
  begin
    TablaDetallesLibro.Close;
    TablaDetallesLibro.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 pago que tiene el frame
      en CodigoPago (al activar el modo Añadir NO se pisa este valor con
      el código de pago nuevo), preguntamos si la tabla esta activa por si
      se ha cerrado al realizar algun cambio en modificar y ejecutar TratarCambios}
    if (not TablaDetallesLibro.Active) or (ModoAnterior = Anadir) then
      BuscarNumEntrada;
  end;
end;

////////////////////////////////////////////////////////////////////////////////
// PUBLIC
////////////////////////////////////////////////////////////////////////////////
constructor TRdxFrameDetallesLibro.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FTipoLibro := NULL;
  FNumEntrada := NULL;
  FTablaDetallesLibro := NIL;
end;

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

end.
