{
===============================================================================
  Copyright (©) 2003. 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: 02-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 RdxFramePresupuestos;

{$I ..\COMPILE.INC}

interface

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

type
  TRdxFramePresupuestos = class(TRdxDBFrame)
  private
    FTablaPresupuestos : TIBDataSet;
    FTablaDetallesPresupuestos : TIBDataSet;
    FTablaPropiedadesPresupuestos : TIBDataSet;
  protected
    FCodigoPresupuesto : Variant;
    procedure SetTablaPresupuestos (Value : TIBDataSet);
    procedure SetTablaDetallesPresupuestos (Value : TIBDataSet);
    procedure SetTablaPropiedadesPresupuestos (Value : TIBDataSet);
    procedure SetCodigoPresupuesto (Value : Variant); virtual;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;
    function TratarCambios : integer; override;
    procedure BuscarPresupuesto; virtual; abstract;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;    
  public
    property TablaPresupuestos: TIBDataSet read FTablaPresupuestos write SetTablaPresupuestos;
    property TablaDetallesPresupuestos: TIBDataSet read FTablaDetallesPresupuestos write SetTablaDetallesPresupuestos;
    property TablaPropiedadesPresupuestos: TIBDataSet read FTablaPropiedadesPresupuestos write SetTablaPropiedadesPresupuestos;
    property CodigoPresupuesto : Variant read FCodigoPresupuesto write SetCodigoPresupuesto;
    constructor Create (AOwner : TComponent); override;
  published
    property BaseDatos;
    property Transaccion;
  end;

implementation

{$R *.DFM}

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

{ TRdxFramePresupuestos }

constructor TRdxFramePresupuestos.Create (AOwner : TComponent);
begin
  inherited Create(AOwner);
  FCodigoPresupuesto := NULL;
  FTablaPresupuestos := NIL;
  FTablaDetallesPresupuestos := NIL;
  FTablaPropiedadesPresupuestos := NIL;
end;

function TRdxFramePresupuestos.TratarCambios : integer;
begin
  if (TablaPresupuestos.State in [dsEdit, dsInsert]) or
     ((TablaDetallesPresupuestos <> NIL) and (TablaDetallesPresupuestos.State in dsEditModes)) or
     ((TablaPropiedadesPresupuestos <> NIL) and (TablaPropiedadesPresupuestos.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 TRdxFramePresupuestos.SetCodigoPresupuesto(Value: Variant);
begin
  if not EsCadenaVacia (Value) then
    FCodigoPresupuesto := Value;
  BuscarPresupuesto;
end;

procedure TRdxFramePresupuestos.SetContenido(NuevoFrame: TRdxFrame);
begin
  if (FContenido <> NIL) then
    if (Contenido.Name = NuevoFrame.ClassName) then
    begin
      NuevoFrame.Free;
      exit;
    end;
  inherited;
  if (TablaPresupuestos <> NIL) then
  begin
    FCodigoPresupuesto := TablaPresupuestos.FieldByName('CODIGO').Value;
    if Contenido is TRdxFramePresupuestos then
      (Contenido as TRdxFramePresupuestos).CodigoPresupuesto := FCodigoPresupuesto;
  end;
end;

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

procedure TRdxFramePresupuestos.SetTablaPresupuestos(Value: TIBDataSet);
begin
  if (FTablaPresupuestos <> Value) then
    FTablaPresupuestos := Value;
end;

procedure TRdxFramePresupuestos.SetTablaDetallesPresupuestos(Value: TIBDataSet);
begin
  if (FTablaDetallesPresupuestos <> Value) then
    FTablaDetallesPresupuestos := Value;
end;

procedure TRdxFramePresupuestos.SetTablaPropiedadesPresupuestos(
  Value: TIBDataSet);
begin
  if (FTablaPropiedadesPresupuestos <> Value) then
    FTablaPropiedadesPresupuestos := Value;
end;

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

end.
