{
===============================================================================
  Copyright (©) 2002. 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-04-2004
  Versión actual: 1.0.2
  Fecha versión actual: 05-08-2004
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
    30-07-2004    p284. Se han añadido los datos de inscripción del Registro
                  Mercantil a la tabla de empresas.

    05-08-2004    P279. Añadido el campo 'MODELOINFORME' para determinar por
                  empresa qué formato usarán los informes (no internos).
===============================================================================
}

unit RdxEmpresaActiva;

interface

uses
  //Generales
  SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB,
   IBDatabase,
  //Particulares
  IBCustomDataSet, Graphics, IBQuery,

  //Aplicacion
  Framework, StrFunc, Entidades, Constantes;

type
  TEmpresaSingleton = class
  private
    FCodigo : Variant;
    FNombre: String;
    FNifCif: String;
    FCalle: String;
    FNumero: String;
    FCodigoPostal: String;
    FPoblacion: String;
    FProvincia: String;
    FTelefono: String;
    FFax: String;
    FCorreo: String;
    FWeb: String;
    FLogotipo : TPicture;
    FRegistroMercantil : String;
    FModeloInforme : Integer;

    FDatabase : TIBDatabase;
    FTransaction : TIBTransaction;

    procedure ObtenerDatos;
    procedure LimpiarCampos;

  protected
    procedure SetCodigo(const Value: Variant);

  public
    property Nombre : String read FNombre;
    property NifCif : String read FNifCif;
    property Calle : String read FCalle;
    property Numero : String read FNumero;
    property CodigoPostal : String read FCodigoPostal;
    property Poblacion : String read FPoblacion;
    property Provincia : String read FProvincia;
    property Telefono : String read FTelefono;
    property Fax : String read FFax;
    property Correo : String read FCorreo;
    property Web : String read FWeb;
    property Logotipo : TPicture read FLogotipo;
    property RegistroMercantil : String read FRegistroMercantil;
    property ModeloInforme : Integer read FModeloInforme;

    property Codigo : Variant read FCodigo write setCodigo;
    property BD : TIBDatabase read FDatabase write FDatabase;
    property Transaccion : TIBTransaction read FTransaction write FTransaction;

    class function NewInstance: TObject; override;
    procedure FreeInstance; override;
    procedure Refrescar;
  end;

var
  EmpresaActiva : TEmpresaSingleton = Nil;

implementation

{ TEmpresaSingleton }

procedure TEmpresaSingleton.FreeInstance;
begin
  if EmpresaActiva = Self then
  begin
    EmpresaActiva := NIL;
    inherited FreeInstance;
  end;
end;

procedure TEmpresaSingleton.LimpiarCampos;
begin
  FNombre := '';
  FNifCif := '';
  FCalle := '';
  FNumero := '';
  FCodigoPostal := '';
  FPoblacion := '';
  FProvincia := '';
  FTelefono := '';
  FFax := '';
  FCorreo := '';
  FWeb := '';
  FRegistroMercantil := '';
  FModeloInforme := 0;

  if FLogotipo <> Nil then
     FLogotipo.Free;
  FLogotipo := Nil;   
end;

class function TEmpresaSingleton.NewInstance: TObject;
begin
  if Assigned(EmpresaActiva) then
    Exception.Create('No se puede tener mas de una instancia')
  else begin
    Result := inherited NewInstance;
    with TEmpresaSingleton(Result) do
    begin
      FDatabase := NIL;
      FTransaction := NIL;
      FCodigo := NULL;
    end;
  end;
end;

procedure TEmpresaSingleton.ObtenerDatos;
var
  oSQL : TIBQuery;
  Stream : TIBDSBlobStream;
begin
  LimpiarCampos;

  if EsCadenaVacia(Codigo) then
     exit;

  oSQL := TIBQuery.Create(Nil);
  with oSQL do
  begin
    Database := FDataBase;
    Transaction := FTransaction;
    SQL.Add('select * ');
    SQL.Add('from EMPRESAS ');
    SQL.Add('where CODIGO = :CODIGO');
    try
      ParamByName('CODIGO').AsInteger := Codigo;
      Prepare;
      Open;

      // Compruebo si se han recuperado datos
      if (RecordCount > 0) then
      begin
        FNombre := FieldByName('NOMBRE').AsString;
        FNifCif := FieldByName('NIFCIF').AsString;
        FCalle := FieldByName('CALLE').AsString;
        FNumero := FieldByName('NUMERO').AsString;
        FCodigoPostal := FieldByName('CODIGOPOSTAL').AsString;
        FPoblacion := FieldByName('POBLACION').AsString;
        FProvincia := FieldByName('PROVINCIA').AsString;
        FTelefono := FieldByName('TELEFONO').AsString;
        FFax := FieldByName('FAX').AsString;
        FCorreo := FieldByName('CORREO').AsString;
        FWeb := FieldByName('WEB').AsString;
        FRegistroMercantil := FieldByName('REGISTROMERCANTIL').AsString;
        FModeloInforme := FieldByName('MODELOINFORME').AsInteger;

        //En el caso de que tenga logotipo asociado
        if not esCadenaVacia(FieldByName('LOGOTIPO').AsVariant) then
        begin
          Stream := (oSQL.CreateBlobStream(FieldByName('LOGOTIPO'), bmReadWrite) as TIBDSBlobStream);
          FLogotipo := TPicture.Create;
          FLogotipo.Bitmap.LoadFromStream(Stream);
          Stream.Free;
        end;
      end;
    finally
      Close;
      Transaction := NIL;
      Free;
    end;
  end;
end;

procedure TEmpresaSingleton.Refrescar;
begin
  ObtenerDatos;
end;

procedure TEmpresaSingleton.SetCodigo(const Value: Variant);
begin
  FCodigo := Value;
  // Recuperar los datos de la empresa
  ObtenerDatos;
end;


procedure LiberarEmpresaActiva; far;
Begin
  if Assigned(EmpresaActiva) then
    FreeAndNil(EmpresaActiva);
end;

initialization
  EmpresaActiva := TEmpresaSingleton.Create;
  SysUtils.AddExitProc(LiberarEmpresaActiva);
end.


 