{
===============================================================================
  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: 01-12-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 RdxFrameVendedores;

{$I ..\COMPILE.INC}

interface

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

type
  TRdxFrameVendedores = class(TRdxDBFrame)
  private
    FTablaVendedores : TIBDataSet;
  protected
    FListaVendedores : TStringList;
    procedure SetTablaVendedores (Value : TIBDataSet);
    procedure SetListaVendedores (Value : TStringList);
    procedure SetCodigoVendedor (Value : Variant);
    procedure SetFCodigoVendedor (Value : Variant);
    function GetCodigoVendedor: Variant;
    function GetFCodigoVendedor: Variant;

    procedure SetContenido (NuevoFrame : TRdxFrame); override;
    function TratarCambios : integer; override;
    procedure BuscarVendedor; virtual; abstract;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
  public
    property TablaVendedores: TIBDataSet read FTablaVendedores write SetTablaVendedores;
    property ListaVendedores : TStringList read FListaVendedores write SetListaVendedores;
    property CodigoVendedor : Variant read GetCodigoVendedor write SetCodigoVendedor;
    property FCodigoVendedor : Variant read GetFCodigoVendedor write SetFCodigoVendedor;

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

implementation

{$R *.DFM}

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

{ TRdxFrameVendedores }

constructor TRdxFrameVendedores.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FListaVendedores := TStringList.Create;
  FTablaVendedores := NIL;
end;

destructor TRdxFrameVendedores.Destroy;
begin
  FListaVendedores.free;
  FListaVendedores := NIL;
  inherited;
end;

function TRdxFrameVendedores.TratarCambios : integer;
begin
  if (TablaVendedores.State in dsEditModes) 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 TRdxFrameVendedores.SetContenido(NuevoFrame: TRdxFrame);
begin
  if (Contenido <> NIL) then
    if (Contenido.Name = NuevoFrame.ClassName) then
    begin
      NuevoFrame.Free;
      exit;
    end;

  inherited;

  if (TablaVendedores <> NIL) then
  begin
    FCodigoVendedor := TablaVendedores.FieldByName('CODIGO').Value;
    if (Contenido is TRdxFrameVendedores) then
      (Contenido as TRdxFrameVendedores).CodigoVendedor := FCodigoVendedor;
  end;
end;

procedure TRdxFrameVendedores.SetTablaVendedores(Value: TIBDataSet);
begin
  if (FTablaVendedores <> Value) then
  begin
    FTablaVendedores := Value;
  end;
end;

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

function TRdxFrameVendedores.GetCodigoVendedor: Variant;
begin
  Result := FCodigoVendedor;
end;

function TRdxFrameVendedores.GetFCodigoVendedor: Variant;
begin
  if (ListaVendedores.Count = 0) then
    Result := NULL
  else
    Result := ListaVendedores.Strings[ListaVendedores.Count-1];
end;

procedure TRdxFrameVendedores.SetCodigoVendedor(Value: Variant);
begin
  if (not VarIsNull(Value)) then
  begin
    FCodigoVendedor := Value;
    BuscarVendedor;
  end
end;

procedure TRdxFrameVendedores.SetFCodigoVendedor(Value: Variant);
begin
  FListaVendedores.Clear;
  if (not VarIsNull(Value)) then
    FListaVendedores.Add(Value);
end;

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

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

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

end.
