{
===============================================================================
  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.0
  Fecha versión actual: 13-05-2002
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit RdxFrameArticulosObraHistorica;

{$I ..\COMPILE.INC}

interface

uses
  Consts, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, IB, IBCustomDataSet, IBDataBase, DB, Mensajes, RdxFrame, RdxDBFrame,
  Tipos;

type
  TRdxFrameArticulosObraHistorica = class(TRdxDBFrame)
  private
    FTablaArticulosObraHistorica : TIBDataSet;
  protected
    FCodigoAlmacen : TTipoCodigoFecha;
    FListaArticulos : TStringList;
    FListaAlmacenesCodigo : TStringList;
    procedure SetTablaArticulosObraHistorica (Value : TIBDataSet);
    procedure SetCodigoAlmacen (Value : TTipoCodigoFecha); virtual;
    procedure SetCodigoArticulo (Value : Variant);
    procedure SetFCodigoArticulo (Value : Variant);
    procedure SetListaArticulos (Value : TStringList);
    function GetCodigoArticulo: Variant;
    function GetFCodigoArticulo: Variant;

    procedure SetContenido (NuevoFrame : TRdxFrame); override;
    function TratarCambios : integer; override;
    procedure BuscarAlmacen; virtual; abstract;
    procedure BuscarArticulo; virtual; abstract;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
  public
    property TablaArticulosObraHistorica: TIBDataSet read FTablaArticulosObraHistorica write SetTablaArticulosObraHistorica;
    property CodigoAlmacen : TTipoCodigoFecha read FCodigoAlmacen write SetCodigoAlmacen;
    property CodigoArticulo : Variant read GetCodigoArticulo write SetCodigoArticulo;
    property FCodigoArticulo : Variant read GetFCodigoArticulo write SetFCodigoArticulo;
    property ListaArticulos : TStringList read FListaArticulos write SetListaArticulos;

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

implementation
{$R *.DFM}

uses
  Literales{$IFDEF RDX_D6},Variants{$ENDIF};

{ TRdxFrameArticulosObraHistorica }

constructor TRdxFrameArticulosObraHistorica.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FListaArticulos:= TStringList.Create;
  FListaAlmacenesCodigo := TStringList.Create;

  FCodigoAlmacen := NIL;
  FTablaArticulosObraHistorica := NIL;
end;

destructor TRdxFrameArticulosObraHistorica.Destroy;
begin
  FListaArticulos.Free;
  FListaArticulos := NIL;

  FListaAlmacenesCodigo.Free;
  FListaAlmacenesCodigo := NIL;
    
  inherited;
end;

function TRdxFrameArticulosObraHistorica.TratarCambios : integer;
begin
  if (TablaArticulosObraHistorica.Modified = True) 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 TRdxFrameArticulosObraHistorica.SetContenido(NuevoFrame: TRdxFrame);
begin
  if Contenido <> NIL then
    if Contenido.Name = NuevoFrame.ClassName then
    begin
      NuevoFrame.Free;
      exit;
    end;

  inherited;

  if TablaArticulosObraHistorica <> NIL then
  begin
    if Contenido is TRdxFrameArticulosObraHistorica then begin
      FCodigoAlmacen.Codigo := TablaArticulosObraHistorica.FieldByName('CODIGOOBRA').Value;
      FCodigoAlmacen.Fecha := TablaArticulosObraHistorica.FieldByName('FECHACIERRE').Value;
      FCodigoArticulo := TablaArticulosObraHistorica.FieldByName('CODIGOARTICULO').Value;
      (Contenido as TRdxFrameArticulosObraHistorica).CodigoAlmacen := FCodigoAlmacen;
      (Contenido as TRdxFrameArticulosObraHistorica).CodigoArticulo := FCodigoArticulo;
    end;
  end;
end;

procedure TRdxFrameArticulosObraHistorica.SetTablaArticulosObraHistorica(Value: TIBDataSet);
begin
  if (FTablaArticulosObraHistorica <> Value) then
  begin
    FTablaArticulosObraHistorica := Value;
  end;
end;

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

procedure TRdxFrameArticulosObraHistorica.SetCodigoAlmacen(Value: TTipoCodigoFecha);
begin
  if (Value <> Nil) then
  begin
    FCodigoAlmacen := Value;
    BuscarAlmacen;
  end;
end;

function TRdxFrameArticulosObraHistorica.GetCodigoArticulo: Variant;
begin
  Result := FCodigoArticulo;
end;

function TRdxFrameArticulosObraHistorica.GetFCodigoArticulo: Variant;
begin
  if (FListaArticulos.Count = 0) then
    Result := NULL
  else
    Result := FListaArticulos.Strings[FListaArticulos.Count-1];
end;

procedure TRdxFrameArticulosObraHistorica.SetCodigoArticulo(Value: Variant);
begin
  if (not VarIsNull(Value)) then
  begin
    FCodigoArticulo := Value;
    BuscarArticulo;
  end;
end;

procedure TRdxFrameArticulosObraHistorica.SetFCodigoArticulo(Value: Variant);
begin
  FListaArticulos.Clear;
  if (not VarIsNull(Value)) then
    FListaArticulos.Add(Value);
end;

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

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

end.
