{
===============================================================================
  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: 03-11-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 RdxFrameClientes;

{$I ..\COMPILE.INC}

interface

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

type
  TRdxFrameClientes = class(TRdxDBFrame)
  private
    FTablaClientes : TIBDataSet;
    FTablaSucursales : TIBDataSet;
  protected
    FCodigoCliente : Variant;
    procedure SetTablaClientes (Value : TIBDataSet);
    procedure SetTablaSucursales (Value : TIBDataSet);
    procedure SetCodigoCliente (Value : Variant); virtual;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;

    function TratarCambios : integer; override;
    procedure BuscarCliente; virtual;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
  public
    property TablaClientes: TIBDataSet read FTablaClientes write SetTablaClientes;
    property TablaSucursales: TIBDataSet read FTablaSucursales write SetTablaSucursales;
    property CodigoCliente : Variant read FCodigoCliente write SetCodigoCliente;
    
    constructor Create (AOwner : TComponent); override;
  published
    property BaseDatos;
    property Transaccion;
  end;


implementation

{$R *.DFM}

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

{ TRdxFrameClientes }

constructor TRdxFrameClientes.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FCodigoCliente := NULL;
  FTablaClientes := NIL;
  FTablaSucursales := NIL;
end;

function TRdxFrameClientes.TratarCambios : integer;
begin
  if (TablaClientes.State in dsEditModes) or
     ((TablaSucursales <> NIL) and (TablaSucursales.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 TRdxFrameClientes.SetCodigoCliente(Value: Variant);
begin
  if not EsCadenaVacia(Value) then
  begin
    FCodigoCliente := Value;
    BuscarCliente;
  end
end;

procedure TRdxFrameClientes.SetContenido(NuevoFrame: TRdxFrame);
begin
  if (FContenido <> NIL) then
    if (Contenido.Name = NuevoFrame.ClassName) then
    begin
      NuevoFrame.Free;
      exit;
    end;
  inherited;
  if (TablaClientes <> NIL) then
  begin
    FCodigoCliente := TablaClientes.FieldByName('CODIGO').Value;
    if Contenido is TRdxFrameClientes then
      (Contenido as TRdxFrameClientes).CodigoCliente := FCodigoCliente;
  end;
end;

procedure TRdxFrameClientes.CambiarModo(ModoAnterior, Modo : TRdxModo);
begin
  inherited;
  if (FModo in [Normal, Seleccionar]) then
  begin
    TablaClientes.Close;
    TablaClientes.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 cliente que tiene el frame
      en CodigoCliente (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 TablaClientes.Active) or (ModoAnterior = Anadir) then
      BuscarCliente;
  end;
end;

procedure TRdxFrameClientes.SetTablaClientes(Value: TIBDataSet);
begin
  if (FTablaClientes <> Value) then
    FTablaClientes := Value;
end;

procedure TRdxFrameClientes.SetTablaSucursales(Value: TIBDataSet);
begin
  if (FTablaSucursales <> Value) then
    FTablaSucursales := Value;
end;

procedure TRdxFrameClientes.BuscarCliente;
begin
//
end;

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

end.
