{
===============================================================================
  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.4
  Fecha versión actual: 28-05-2004
===============================================================================
  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.

    02-08-2002    P224. El frame ahora trabaja con listas de facturas en vez de
                  con una sola factura.

    28/05/2004    Se han adaptado los frames para que se autoconfiguren
===============================================================================
}

unit RdxFrameFacturasProforma;

{$I ..\COMPILE.INC}

interface

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

type
  TRdxFrameFacturasProforma = class(TRdxDBFrame)
  private
    FTablaFacturas : TIBDataSet;
    FTablaDetallesFacturas : TIBDataSet;
  protected
    FListaFacturas : TStringList;
    procedure SetTablaFacturas (Value : TIBDataSet);
    procedure SetTablaDetallesFacturas (Value : TIBDataSet);
    procedure SetListaFacturas (Value : TStringList);
    procedure SetCodigoFactura (Value : Variant);
    procedure SetFCodigoFactura (Value : Variant);
    function GetCodigoFactura: Variant;
    function GetFCodigoFactura: Variant;
    procedure SetContenido (NuevoFrame : TRdxFrame); override;

    function TratarCambios : integer; override;
    procedure BuscarFactura; virtual;
    procedure CambiarModo(ModoAnterior, Modo : TRdxModo); override;
    function CambiarEntidad(EntidadAnterior, Entidad : TRdxEntidad): Boolean; override;
  public
    property TablaFacturas: TIBDataSet read FTablaFacturas write SetTablaFacturas;
    property TablaDetallesFacturas: TIBDataSet read FTablaDetallesFacturas write SetTablaDetallesFacturas;

    property ListaFacturas : TStringList read FListaFacturas write SetListaFacturas;
    property CodigoFactura : Variant read GetCodigoFactura write SetCodigoFactura;
    property FCodigoFactura : Variant read GetFCodigoFactura write SetFCodigoFactura;
    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};  


{ TRdxFrameFacturasProforma }

constructor TRdxFrameFacturasProforma.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FListaFacturas := TStringList.Create;
  FTablaFacturas := NIL;
  FTablaDetallesFacturas := NIL;
end;

function TRdxFrameFacturasProforma.TratarCambios : integer;
begin
  if (TablaFacturas.State in dsEditModes) or
     ((TablaDetallesFacturas <> NIL) and (TablaDetallesFacturas.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 TRdxFrameFacturasProforma.SetCodigoFactura(Value: Variant);
begin
  if not EsCadenaVacia(Value) then
  begin
    FCodigoFactura := Value;
    BuscarFactura;
  end
end;

procedure TRdxFrameFacturasProforma.SetContenido(NuevoFrame: TRdxFrame);
begin
  if (FContenido <> NIL) then
    if (Contenido.Name = NuevoFrame.ClassName) then
    begin
      NuevoFrame.Free;
      exit;
    end;
  inherited;
  if (TablaFacturas <> NIL) then
  begin
    FCodigoFactura := TablaFacturas.FieldByName('CODIGO').Value;
    if Contenido is TRdxFrameFacturasProforma then
      (Contenido as TRdxFrameFacturasProforma).CodigoFactura := FCodigoFactura;
  end;
end;

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

procedure TRdxFrameFacturasProforma.SetTablaFacturas(Value: TIBDataSet);
begin
  if (FTablaFacturas <> Value) then
    FTablaFacturas := Value;
end;

procedure TRdxFrameFacturasProforma.SetTablaDetallesFacturas(Value: TIBDataSet);
begin
  if (FTablaDetallesFacturas <> Value) then
    FTablaDetallesFacturas := Value;
end;

procedure TRdxFrameFacturasProforma.BuscarFactura;
begin
//
end;

function TRdxFrameFacturasProforma.GetCodigoFactura: Variant;
begin
  Result := FCodigoFactura;
end;

function TRdxFrameFacturasProforma.GetFCodigoFactura: Variant;
begin
  if (ListaFacturas.Count = 0) then
    Result := NULL
  else
    Result := ListaFacturas.Strings[ListaFacturas.Count-1];
end;

procedure TRdxFrameFacturasProforma.SetFCodigoFactura(Value: Variant);
begin
  FListaFacturas.Clear;
  if (not VarIsNull(Value)) then
    FListaFacturas.Add(Value);
end;

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

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

destructor TRdxFrameFacturasProforma.Destroy;
begin
  FListaFacturas.Free;
  FListaFacturas := NIL;
  inherited;
end;

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

end.
