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

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    09-04-2002    Se ha adaptado el frame para transaccion unica.
===============================================================================
}

unit RdxFrameHistoricoMovimientos;

{$I ..\COMPILE.INC}

interface

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

type
  TRdxFrameHistoricoMovimientos = class(TRdxDBFrame)
  private
    FTablaMovimientos : TIBDataSet;
  protected
    FCodigoAlmacen : Variant;
    FCodigoMovimiento : Variant;
    FListaAlmacenesCodigo : TStringList;
    FListaCodigosAlmacen : TStringList;

    procedure SetTablaMovimientos (Value : TIBDataSet);
    procedure SetCodigoAlmacen (Value : Variant); virtual;
    procedure SetCodigoMovimiento (Value : Variant); virtual;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;
    function TratarCambios : integer; override;
    procedure BuscarAlmacen; virtual; abstract;
    procedure BuscarMovimiento; virtual; abstract;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
  public
    property TablaMovimientos: TIBDataSet read FTablaMovimientos write SetTablaMovimientos;
    property CodigoAlmacen : Variant read FCodigoAlmacen write SetCodigoAlmacen;
    property CodigoMovimiento : Variant read FCodigoMovimiento write SetCodigoMovimiento;
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property BaseDatos;
    property Transaccion;
  end;

implementation

{$R *.DFM}

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

{ TRdxFrameHistoricoMovimientos }

constructor TRdxFrameHistoricoMovimientos.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FTablaMovimientos := NIL;
  FListaAlmacenesCodigo := TStringList.Create;
  FListaCodigosAlmacen := TStringList.Create;
end;

destructor TRdxFrameHistoricoMovimientos.Destroy;
begin
  FListaAlmacenesCodigo.Free;
  FListaCodigosAlmacen.Free;
  inherited;
end;


function TRdxFrameHistoricoMovimientos.TratarCambios : integer;
begin
  if (TablaMovimientos.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 TRdxFrameHistoricoMovimientos.SetCodigoAlmacen(Value: Variant);
begin
  if (not VarIsNull(Value)) then
  begin
    FCodigoAlmacen := Value;
    BuscarAlmacen;
  end;
end;

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

  inherited;

  if (TablaMovimientos <> NIL) then
  begin
    FCodigoMovimiento := TablaMovimientos.FieldByName('CODIGO').AsString;
    if (Contenido is TRdxFrameHistoricoMovimientos) then begin
      (Contenido as TRdxFrameHistoricoMovimientos).CodigoAlmacen := FCodigoAlmacen;
      (Contenido as TRdxFrameHistoricoMovimientos).CodigoMovimiento := FCodigoMovimiento;
    end;
  end;
end;

procedure TRdxFrameHistoricoMovimientos.SetTablaMovimientos(Value: TIBDataSet);
begin
  if (FTablaMovimientos <> Value) then
  begin
    FTablaMovimientos := Value;
  end;
end;

procedure TRdxFrameHistoricoMovimientos.CambiarModo(ModoAnterior, Modo : TRdxModo);
begin
  inherited;
  if (FModo in [Normal, Seleccionar]) then
  begin
    TablaMovimientos.Close;
    TablaMovimientos.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 TablaMovimientos.Active) or (ModoAnterior = Anadir) then
//      BuscarArticulo;
  end;
end;

procedure TRdxFrameHistoricoMovimientos.SetCodigoMovimiento(Value: Variant);
begin
  if (not VarIsNull(Value)) then
  begin
    FCodigoMovimiento := Value;
    BuscarMovimiento;
  end;
end;

end.
