{
===============================================================================
  Copyright (©) 2005. 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: 30-09-2005
  Versión actual: 1.0.0
  Fecha versión actual: 30-09-2005
===============================================================================
  Modificaciones:

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

unit RdxFrameAlbaranesCliente;

{$I ..\COMPILE.INC}

interface

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

type
  TRdxFrameAlbaranesCliente = class(TRdxDBFrame)
  private
    FTablaAlbaranes : TIBDataSet;
    FTablaDetallesAlbaranes : TIBDataSet;
  protected
    FListaAlbaranes : TStringList;
    procedure SetTablaAlbaranes (Value : TIBDataSet);
    procedure SetTablaDetallesAlbaranes (Value : TIBDataSet);
    procedure SetListaAlbaranes (Value : TStringList);
    procedure SetCodigoAlbaran (Value : Variant);
    procedure SetFCodigoAlbaran (Value : Variant);
    function GetCodigoAlbaran: Variant;
    function GetFCodigoAlbaran: Variant;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;

    function TratarCambios : integer; override;
    procedure BuscarAlbaran; virtual;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
  public
    property TablaAlbaranes: TIBDataSet read FTablaAlbaranes write SetTablaAlbaranes;
    property TablaDetallesAlbaranes: TIBDataSet read FTablaDetallesAlbaranes write SetTablaDetallesAlbaranes;
    property ListaAlbaranes : TStringList read FListaAlbaranes write SetListaAlbaranes;
    property CodigoAlbaran : Variant read GetCodigoAlbaran write SetCodigoAlbaran;
    property FCodigoAlbaran : Variant read GetFCodigoAlbaran write SetFCodigoAlbaran;
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property BaseDatos;
    property Transaccion;
  end;


implementation

{$R *.DFM}

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


{ TRdxFrameAlbaranesCliente }

constructor TRdxFrameAlbaranesCliente.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FListaAlbaranes := TStringList.Create;
  FTablaAlbaranes := NIL;
  FTablaDetallesAlbaranes := NIL;
end;

function TRdxFrameAlbaranesCliente.TratarCambios : integer;
begin
  if (TablaAlbaranes.State in dsEditModes) or
     ((TablaDetallesAlbaranes <> NIL) and (TablaDetallesAlbaranes.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 TRdxFrameAlbaranesCliente.SetCodigoAlbaran(Value: Variant);
begin
  if not EsCadenaVacia(Value) then
  begin
    FCodigoAlbaran := Value;
    BuscarAlbaran;
  end
end;

procedure TRdxFrameAlbaranesCliente.SetContenido(NuevoFrame: TRdxFrame);
begin
  if (FContenido <> NIL) then
    if (Contenido.Name = NuevoFrame.ClassName) then
    begin
      NuevoFrame.Free;
      exit;
    end;
  inherited;
  if (TablaAlbaranes <> NIL) then
  begin
    FCodigoAlbaran := TablaAlbaranes.FieldByName('CODIGO').Value;
    if Contenido is TRdxFrameAlbaranesCliente then
    begin
      (Contenido as TRdxFrameAlbaranesCliente).CodigoAlbaran := FCodigoAlbaran;
    end;
  end;
end;

procedure TRdxFrameAlbaranesCliente.CambiarModo(ModoAnterior, Modo : TRdxModo);
begin
  inherited;
  if (FModo in [Normal, Seleccionar]) then
  begin
    TablaAlbaranes.Close;
    TablaAlbaranes.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 albaran que tiene el frame
      en CodigoAlbaran (al activar el modo Añadir NO se pisa este valor con
      el código de albarán nuevo) }
    if (not TablaAlbaranes.Active) or (ModoAnterior = Anadir) then
      BuscarAlbaran;
  end;
end;

procedure TRdxFrameAlbaranesCliente.SetTablaAlbaranes(Value: TIBDataSet);
begin
  if (FTablaAlbaranes <> Value) then
    FTablaAlbaranes := Value;
end;

procedure TRdxFrameAlbaranesCliente.SetTablaDetallesAlbaranes(Value: TIBDataSet);
begin
  if (FTablaDetallesAlbaranes <> Value) then
    FTablaDetallesAlbaranes := Value;
end;

procedure TRdxFrameAlbaranesCliente.BuscarAlbaran;
begin
//
end;

function TRdxFrameAlbaranesCliente.GetCodigoAlbaran: Variant;
begin
  Result := FCodigoAlbaran;
end;

function TRdxFrameAlbaranesCliente.GetFCodigoAlbaran: Variant;
begin
  if (ListaAlbaranes.Count = 0) then
    Result := NULL
  else
    Result := ListaAlbaranes.Strings[ListaAlbaranes.Count-1];
end;

procedure TRdxFrameAlbaranesCliente.SetFCodigoAlbaran(Value: Variant);
begin
  FListaAlbaranes.Clear;
  if (not VarIsNull(Value)) then
    FListaAlbaranes.Add(Value);
end;

procedure TRdxFrameAlbaranesCliente.SetListaAlbaranes(Value: TStringList);
begin
  if (Value = NIL) or (Value.Count = 0) then
    exit;

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

destructor TRdxFrameAlbaranesCliente.Destroy;
begin
  FListaAlbaranes.Free;
  FListaAlbaranes := NIL;
  inherited;
end;

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

end.
