{
===============================================================================
  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
    ---------------------------------------------------------------------------
    07-04-2002    Se ha adaptado el frame para transacción única.

    09-04-2002    Sustituir las constantes IDYES/IDNO por IDOK.
===============================================================================
}

unit RdxFrameAlbaranes;

interface

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

type
  TRdxFrameAlbaranes = class(TRdxDBFrame)
  private
    FTablaAlbaranes : TIBDataSet;
    FTablaDetallesAlbaranes : TIBDataSet;
  protected
    FCodigoAlbaran : Variant;
    procedure SetTablaAlbaranes (Value : TIBDataSet);
    procedure SetTablaDetallesAlbaranes (Value : TIBDataSet);
    procedure SetCodigoAlbaran (Value : Variant); virtual;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;
    function TratarCambios : integer; override;
    procedure BuscarAlbaran; virtual;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
  public
    property TablaAlbaranes: TIBDataSet read FTablaAlbaranes write SetTablaAlbaranes;
    property TablaDetallesAlbaranes: TIBDataSet read FTablaDetallesAlbaranes write SetTablaDetallesAlbaranes;
    property CodigoAlbaran : Variant read FCodigoAlbaran write SetCodigoAlbaran;
    constructor Create (AOwner : TComponent); override;
  published
    property BaseDatos;
    property Transaccion;
  end;

implementation

{$R *.DFM}

uses
  IB, Mensajes, StrFunc, Literales;

{ TRdxFrameAlbaranes }

procedure TRdxFrameAlbaranes.BuscarAlbaran;
begin
//
end;

procedure TRdxFrameAlbaranes.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 pedido que tiene el frame
      en CodigoAlbaran (al activar el modo Añadir NO se pisa este valor con
      el código de albaran nuevo) }
    if (not TablaAlbaranes.Active) or (ModoAnterior = Anadir) then
      BuscarAlbaran;
  end;
end;

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

procedure TRdxFrameAlbaranes.SetCodigoAlbaran(Value: Variant);
begin
  if not EsCadenaVacia (Value) then
  begin
    FCodigoAlbaran := Value;
    BuscarAlbaran;
  end
end;

procedure TRdxFrameAlbaranes.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').AsString;
    if Contenido is TRdxFrameAlbaranes then
      (Contenido as TRdxFrameAlbaranes).CodigoAlbaran := FCodigoAlbaran;
  end;
end;

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

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

function TRdxFrameAlbaranes.TratarCambios: integer;
begin
 if (TablaAlbaranes.Modified = True) or
     ((TablaDetallesAlbaranes <> NIL) and (TablaDetallesAlbaranes.Modified = True)) 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;

end.
