{
===============================================================================
  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 RdxFrameContratos;

{$I ..\COMPILE.INC}

interface

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

type
  TRdxFrameContratos = class(TRdxDBFrame)
  private
    FTablaContratos : TIBDataSet;
    FTablaDetallesContratos : TIBDataSet;
    FTablaPropiedadesContratos : TIBDataSet;
    FTablaInstaladoresContratos : TIBDataSet;
  protected
    FCodigoContrato : Variant;
    procedure SetTablaContratos (Value : TIBDataSet);
    procedure SetTablaDetallesContratos (Value : TIBDataSet);
    procedure SetTablaPropiedadesContratos (Value : TIBDataSet);
    procedure SetTablaInstaladoresContratos (Value : TIBDataSet);
    procedure SetCodigoContrato (Value : Variant); virtual;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;

    function TratarCambios : integer; override;
    procedure BuscarContrato; virtual; abstract;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
  public
    property TablaContratos: TIBDataSet read FTablaContratos write SetTablaContratos;
    property TablaDetallesContratos: TIBDataSet read FTablaDetallesContratos write SetTablaDetallesContratos;
    property TablaPropiedadesContratos: TIBDataSet read FTablaPropiedadesContratos write SetTablaPropiedadesContratos;
    property TablaInstaladoresContratos: TIBDataSet read FTablaInstaladoresContratos write SetTablaInstaladoresContratos;
    property CodigoContrato : Variant read FCodigoContrato write SetCodigoContrato;
    
    constructor Create (AOwner : TComponent); override;
  published
    property BaseDatos;
    property Transaccion;
  end;

implementation

{$R *.DFM}

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

{ TRdxFrameContratos }

constructor TRdxFrameContratos.Create (AOwner : TComponent);
begin
  inherited Create(AOwner);
  FCodigoContrato := NULL;
  FTablaContratos := NIL;
  FTablaDetallesContratos := NIL;
  FTablaPropiedadesContratos := NIL;
  FTablaInstaladoresContratos := NIL;
end;

function TRdxFrameContratos.TratarCambios : integer;
begin
  if (TablaContratos.State in dsEditModes) or
     ((TablaDetallesContratos <> NIL) and (TablaDetallesContratos.State in dsEditModes)) or
     ((TablaPropiedadesContratos <> NIL) and (TablaPropiedadesContratos.State in dsEditModes)) or
     ((TablaInstaladoresContratos <> NIL) and (TablaInstaladoresContratos.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 TRdxFrameContratos.SetCodigoContrato(Value: Variant);
begin
  if not EsCadenaVacia (Value) then
    FCodigoContrato := Value;
  BuscarContrato;
end;

procedure TRdxFrameContratos.SetContenido(NuevoFrame: TRdxFrame);
begin
  if (FContenido <> NIL) then
    if (Contenido.Name = NuevoFrame.ClassName) then
    begin
      NuevoFrame.Free;
      exit;
    end;
  inherited;
  if (TablaContratos <> NIL) then
  begin
    FCodigoContrato := TablaContratos.FieldByName('CODIGO').Value;
    if Contenido is TRdxFrameContratos then
      (Contenido as TRdxFrameContratos).CodigoContrato := FCodigoContrato;
  end;
end;

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

procedure TRdxFrameContratos.SetTablaContratos(Value: TIBDataSet);
begin
  if (FTablaContratos <> Value) then
    FTablaContratos := Value;
end;

procedure TRdxFrameContratos.SetTablaDetallesContratos(Value: TIBDataSet);
begin
  if (FTablaDetallesContratos <> Value) then
    FTablaDetallesContratos := Value;
end;

procedure TRdxFrameContratos.SetTablaPropiedadesContratos(
  Value: TIBDataSet);
begin
  if (FTablaPropiedadesContratos <> Value) then
    FTablaPropiedadesContratos := Value;
end;

procedure TRdxFrameContratos.SetTablaInstaladoresContratos(
  Value: TIBDataSet);
begin
  if (FTablaInstaladoresContratos <> Value) then
    FTablaInstaladoresContratos := Value;
end;

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

end.
