Files correlati : Ricompilazione Demo : [ ] Commento : eliminati riferimenti ai files accoppati colldich e caradd; si continuano a compilare AB0 (che sta nel cd) e AB1 (che non sta da nessuna parte), mentre non si compilano AB2 e AB3 (che però non si compilavano neanche prima) git-svn-id: svn://10.65.10.50/trunk@20660 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			435 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			435 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <relation.h>
 | 
						|
#include <relapp.h>
 | 
						|
#include <tree.h>
 | 
						|
#include <mask.h>
 | 
						|
 | 
						|
#include "ablib09.h"
 | 
						|
#include "analisi.h"
 | 
						|
#include "relvoci.h"
 | 
						|
#include "relana.h"
 | 
						|
#include "saldi.h"
 | 
						|
#include "movdett.h"
 | 
						|
#include "voci.h"
 | 
						|
 | 
						|
#define MAX_ID_REL 999999999
 | 
						|
#define MAX_ID_MOVDETT 999999
 | 
						|
#define NODO_AGGIUNTO "A"
 | 
						|
#define NODO_MODIFICATO "M"
 | 
						|
#define NODO_RIMOSSO "R"
 | 
						|
#define IMMESSO 'I'
 | 
						|
#define TRASFERITO 'T'
 | 
						|
 | 
						|
#define TIPO_ANALISI "A"
 | 
						|
#define TIPO_VOCE    "V"
 | 
						|
#define ID_NULLO 0
 | 
						|
#define ID_NULLO_STR "0"
 | 
						|
 | 
						|
typedef real TNumeric_id;
 | 
						|
 | 
						|
 | 
						|
class TAlbero_movdett : public TBidirectional_tree
 | 
						|
{
 | 
						|
  TToken_string _codtab;
 | 
						|
  TLocalisamfile *_movdett;
 | 
						|
protected:
 | 
						|
  virtual void node2id(const TObject * node,TString & id) const;
 | 
						|
public:
 | 
						|
  virtual bool has_son() const;
 | 
						|
  virtual bool has_rbrother() const;
 | 
						|
  virtual bool has_father() const;
 | 
						|
  virtual bool has_lbrother() const;
 | 
						|
  virtual bool goto_root();
 | 
						|
  virtual bool goto_firstson();
 | 
						|
  virtual bool goto_father();
 | 
						|
  virtual bool goto_rbrother();
 | 
						|
  virtual bool goto_lbrother();
 | 
						|
  virtual bool goto_node(TString & id)
 | 
						|
    {return(_movdett->readat(atol(id))==NOERR); }
 | 
						|
  virtual TObject * curr_node() const;
 | 
						|
  bool goto_id(const TNumeric_id &id);
 | 
						|
  TRectype & curr() {return (TRectype &)*curr_node();}
 | 
						|
  
 | 
						|
  TAlbero_movdett( const char * tabcode);
 | 
						|
  virtual ~TAlbero_movdett();
 | 
						|
};
 | 
						|
  
 | 
						|
  
 | 
						|
//Classe per gestire l'albero di relana
 | 
						|
class TAlbero_relana : public TBidirectional_tree
 | 
						|
{
 | 
						|
  TString _codtab;
 | 
						|
  TLocalisamfile *_relana;
 | 
						|
  TNumeric_id _last_id;
 | 
						|
protected:
 | 
						|
  virtual void node2id(const TObject * node,TString & id) const;
 | 
						|
public:
 | 
						|
  void zero_id() {_last_id = 0;}
 | 
						|
  virtual bool has_son() const;
 | 
						|
  virtual bool has_rbrother() const;
 | 
						|
  virtual bool has_father() const;
 | 
						|
  virtual bool has_lbrother() const;
 | 
						|
  virtual bool goto_root();
 | 
						|
  virtual bool goto_firstson();
 | 
						|
  virtual bool goto_father();
 | 
						|
  virtual bool goto_rbrother();
 | 
						|
  virtual bool goto_lbrother();
 | 
						|
  virtual bool goto_node(TString & id)
 | 
						|
    {return(_relana->readat(atol(id))==NOERR); }
 | 
						|
  virtual TObject * curr_node() const;
 | 
						|
  bool goto_id(const TNumeric_id &id);
 | 
						|
  TRectype & curr() {return (TRectype &)*curr_node();}
 | 
						|
  bool lock();
 | 
						|
  void unlock();
 | 
						|
  TNumeric_id &new_id(real id);
 | 
						|
  
 | 
						|
  TAlbero_relana( const char * tabcode);
 | 
						|
  virtual ~TAlbero_relana();
 | 
						|
};
 | 
						|
 | 
						|
//Classe per gestire la struttura di una tabella di analisi
 | 
						|
// basandosi sull'albero di relvoci
 | 
						|
class TAlbero_relvoci : public TTree
 | 
						|
{
 | 
						|
  TString _codtab;
 | 
						|
  TLocalisamfile *_relvoci;
 | 
						|
protected:
 | 
						|
  virtual void node2id(const TObject* node, TString& id) const;
 | 
						|
public:
 | 
						|
  virtual bool goto_root();
 | 
						|
  virtual bool has_son() const;
 | 
						|
  virtual bool goto_firstson();
 | 
						|
  virtual bool has_rbrother() const;
 | 
						|
  virtual bool goto_rbrother();
 | 
						|
  virtual TObject * curr_node() const;
 | 
						|
  virtual bool goto_node(const TString &id)
 | 
						|
    {return (_relvoci->readat(atol(id))==NOERR);}
 | 
						|
  bool has_lbrother() const;
 | 
						|
  bool goto_lbrother();
 | 
						|
  TRectype & curr() {return (TRectype &)*curr_node();}
 | 
						|
  bool lock();
 | 
						|
  void unlock();
 | 
						|
  const TString & codtab()
 | 
						|
    {return _codtab;}
 | 
						|
  
 | 
						|
  TAlbero_relvoci(const char * tabcode);
 | 
						|
  virtual ~TAlbero_relvoci() ;
 | 
						|
};
 | 
						|
 | 
						|
// Struttura da albero basata su un file temporaneo cached
 | 
						|
class TAlbero_locale : public TBidirectional_tree
 | 
						|
{ 
 | 
						|
  TLocalisamfile *_f;   // da rimuovere !!
 | 
						|
  protected:
 | 
						|
    TAssoc_array _status_node;
 | 
						|
    TRWrecord_cache * _local_cache;
 | 
						|
    TNumeric_id _last_insert_id;
 | 
						|
    TRectype *_currnode;
 | 
						|
 | 
						|
    virtual const char * get_headkey() const {return NULL;}
 | 
						|
    virtual const char * id_fieldname() const {return NULL;}
 | 
						|
  public:
 | 
						|
    // debug
 | 
						|
    void write_cache() { _local_cache->flush(); }
 | 
						|
    void clear_cache()
 | 
						|
    {
 | 
						|
      _local_cache->clear();
 | 
						|
      _last_insert_id = 0;
 | 
						|
    }
 | 
						|
    
 | 
						|
    virtual bool insert_node(TRectype &node, const TNumeric_id id_prec, const TNumeric_id id_padre, TNumeric_id id, const char trasf_immes = TRASFERITO) {return FALSE;}
 | 
						|
    virtual bool delete_node(const TNumeric_id &id) {return FALSE;}
 | 
						|
    virtual bool delete_tree() { return FALSE;}
 | 
						|
    virtual void zero() {;}
 | 
						|
    virtual bool make_root(TBaseisamfile & saldi) {return FALSE;}
 | 
						|
    virtual void link_succ_zero(const TNumeric_id currid) {;}
 | 
						|
    virtual void link_son_zero(const TNumeric_id currid) {;}
 | 
						|
    virtual TObject * curr_node() const {return _currnode;}
 | 
						|
    TRectype & current() const {return (TRectype &)*curr_node();}
 | 
						|
    TRWrecord_cache & current_cache() const {return *_local_cache;}
 | 
						|
 | 
						|
    
 | 
						|
    // ***** gestione interfaccia Database/copia locale
 | 
						|
    virtual TRectype extract_dirtynode(TString &id, TString& status) { TRectype rec(*_currnode); return rec;}
 | 
						|
    int dirty_nodes() { return _status_node.items();}
 | 
						|
    void set_status_node(const TString &id, const char *status);
 | 
						|
    TString* get_status_node(const TString &id) 
 | 
						|
      {return (TString*)_status_node.objptr(id);}
 | 
						|
      
 | 
						|
 | 
						|
    virtual void goto_node(const TNumeric_id id) {;}
 | 
						|
    virtual void goto_node(TRectype &node) {*_currnode = node;}
 | 
						|
    virtual bool goto_node(const TString & id) {TNumeric_id nid(id); goto_node(nid); return TRUE;}
 | 
						|
 | 
						|
    virtual void node2id(const TObject* node, TString& id) const  {;}
 | 
						|
    virtual bool goto_firstson() {return FALSE;}
 | 
						|
    virtual bool goto_rbrother() {return FALSE;}
 | 
						|
    virtual bool goto_root() {return FALSE;}
 | 
						|
 | 
						|
/*    virtual const char * idfather_fieldname() const {return NULL;}
 | 
						|
    virtual const char * idson_fieldname() const {return NULL;}
 | 
						|
    virtual const char * idsucc_fieldname() const {return NULL;}
 | 
						|
    virtual const char * idprec_fieldname() const {return NULL;}
 | 
						|
    virtual void put_headkey(TRectype &) {;}
 | 
						|
    
 | 
						|
    virtual bool remove_subtree(const TNumeric_id lastnode_id) { return TRUE;}
 | 
						|
    virtual TNumeric_id &new_id(TNumeric_id) { real i; return i;}
 | 
						|
    virtual bool has_father() const {return TRUE;}
 | 
						|
    virtual bool goto_father() {return TRUE;}
 | 
						|
    virtual bool has_rbrother() const {return TRUE;}
 | 
						|
    virtual bool has_lbrother() const {return TRUE;}    
 | 
						|
    virtual bool goto_lbrother() {return TRUE;}
 | 
						|
    virtual bool goto_son_first_level() {return TRUE;}
 | 
						|
        virtual void curr_id(TString& id) const 
 | 
						|
    { 
 | 
						|
      node2id(curr_node(), id);
 | 
						|
    }
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
    TAlbero_locale(int filenum);
 | 
						|
    virtual ~TAlbero_locale();
 | 
						|
};
 | 
						|
 | 
						|
class TAlbero_locale_link : public TAlbero_locale
 | 
						|
{
 | 
						|
  
 | 
						|
//  TLocalisamfile *_c;
 | 
						|
//    TRWrecord_cache * _local_cache_carad;
 | 
						|
  protected:
 | 
						|
 | 
						|
    virtual const char * idfather_fieldname() const pure ;
 | 
						|
    virtual const char * idson_fieldname() const pure;
 | 
						|
    virtual const char * idsucc_fieldname() const pure;
 | 
						|
    virtual const char * idprec_fieldname() const pure;
 | 
						|
    virtual const char * id_fieldname() const pure;
 | 
						|
    virtual const char * get_headkey() const pure;
 | 
						|
    virtual void put_headkey(TRectype &) pure;
 | 
						|
    virtual void node2id(const TObject* node, TString& id) const 
 | 
						|
    {
 | 
						|
      const TRectype *rec = (const TRectype *)node;
 | 
						|
      id = rec->get_real(id_fieldname()).string();
 | 
						|
    }
 | 
						|
    
 | 
						|
    virtual bool remove_subtree(const TNumeric_id lastnode_id);
 | 
						|
    virtual TNumeric_id &new_id(TNumeric_id);
 | 
						|
 | 
						|
  public:
 | 
						|
    virtual bool insert_node(TRectype &node, const TNumeric_id id_prec, const TNumeric_id id_padre, TNumeric_id id, const char trasf_immes = TRASFERITO);
 | 
						|
    virtual bool delete_node(const TNumeric_id &id);
 | 
						|
    virtual bool delete_tree();
 | 
						|
    virtual void zero();
 | 
						|
    
 | 
						|
    virtual void goto_node(const TNumeric_id id);
 | 
						|
    virtual void goto_node(TRectype &node) {*_currnode = node;}
 | 
						|
    virtual bool goto_node(const TString & id) {TNumeric_id nid(id); goto_node(nid); return TRUE;}
 | 
						|
 | 
						|
    virtual bool make_root(TBaseisamfile & saldi) pure;
 | 
						|
    virtual bool get_description(TString& desc) const pure; 
 | 
						|
    
 | 
						|
    virtual bool has_son() const;
 | 
						|
    virtual bool goto_firstson();
 | 
						|
    virtual bool has_father() const;
 | 
						|
    virtual bool goto_father();
 | 
						|
    virtual bool has_rbrother() const;
 | 
						|
    virtual bool goto_rbrother();
 | 
						|
    virtual bool has_lbrother() const;
 | 
						|
    virtual bool goto_lbrother();
 | 
						|
 | 
						|
    virtual bool goto_son_first_level();
 | 
						|
//    virtual bool has_root() const {return FALSE;}
 | 
						|
    virtual bool goto_root();
 | 
						|
    virtual void link_succ_zero(const TNumeric_id currid);
 | 
						|
    virtual void link_son_zero(const TNumeric_id currid);
 | 
						|
    virtual TRectype extract_dirtynode(TString &id, TString& status);
 | 
						|
    
 | 
						|
    TAlbero_locale_link(int filenum);
 | 
						|
    virtual ~TAlbero_locale_link() {;}
 | 
						|
};
 | 
						|
 | 
						|
class TAlbero_locale_relvoci: public TAlbero_locale
 | 
						|
{   
 | 
						|
  protected:
 | 
						|
//        virtual bool remove_subtree(const TNumeric_id lastnode_id);
 | 
						|
  
 | 
						|
  public:
 | 
						|
    virtual bool insert_node(TRectype &node, const TNumeric_id id_prec, const TNumeric_id id_padre, TNumeric_id id, const char trasf_immes = TRASFERITO);
 | 
						|
    virtual bool delete_node(const TNumeric_id &id);
 | 
						|
 | 
						|
    virtual bool goto_node(const TString &key);
 | 
						|
 | 
						|
/**********************/
 | 
						|
    virtual bool delete_tree() { return FALSE;}
 | 
						|
    virtual void zero() {;}
 | 
						|
    virtual bool make_root(TBaseisamfile & saldi) {return FALSE;}
 | 
						|
    virtual bool has_rbrother() const;
 | 
						|
    virtual bool goto_rbrother();
 | 
						|
    virtual bool has_lbrother() const;
 | 
						|
    virtual bool goto_lbrother();
 | 
						|
    virtual TRectype extract_dirtynode(TString &id, TString& status);
 | 
						|
    TNumeric_id new_id();
 | 
						|
 | 
						|
 | 
						|
//    virtual bool delete_tree();
 | 
						|
 | 
						|
//    virtual bool has_son() const;
 | 
						|
//    virtual bool goto_firstson();
 | 
						|
//    virtual bool has_father() const;
 | 
						|
//    virtual bool goto_father();
 | 
						|
 | 
						|
//    virtual bool goto_son_first_level();
 | 
						|
 | 
						|
    TAlbero_locale_relvoci();
 | 
						|
    virtual ~TAlbero_locale_relvoci() {;}
 | 
						|
};
 | 
						|
 | 
						|
// Copia locale dell'albero di una tabella analisi
 | 
						|
class TLocal_relana3 : public TAlbero_locale_link
 | 
						|
{ 
 | 
						|
  protected:
 | 
						|
    virtual const char * idfather_fieldname() const {return ABRA_IDPADRE;}
 | 
						|
    virtual const char * idson_fieldname() const {return ABRA_IDFIGLIO;}
 | 
						|
    virtual const char * idsucc_fieldname() const {return ABRA_IDSUCC;}
 | 
						|
    virtual const char * idprec_fieldname() const {return ABRA_IDPREC;}
 | 
						|
    virtual const char * id_fieldname() const {return ABRA_ID;}
 | 
						|
    virtual const char * get_headkey() const {return " ";}
 | 
						|
    virtual void put_headkey(TRectype & node) {node.put(ABRA_CODAN,get_headkey());}
 | 
						|
  public:
 | 
						|
    virtual bool make_root(TBaseisamfile & saldi);
 | 
						|
    virtual bool get_description(TString& desc) const; 
 | 
						|
  
 | 
						|
    TLocal_relana3();
 | 
						|
    virtual ~TLocal_relana3();
 | 
						|
};
 | 
						|
 | 
						|
// Copia locale dell'albero dei dettagli di un saldo
 | 
						|
class TLocal_balance3 : public TAlbero_locale_link
 | 
						|
{ 
 | 
						|
  protected:
 | 
						|
    virtual const char * idfather_fieldname() const {return ABMD_IDPADRE;}
 | 
						|
    virtual const char * idson_fieldname() const {return ABMD_IDFIGLIO;}
 | 
						|
    virtual const char * idsucc_fieldname() const {return ABMD_IDSUCC;}
 | 
						|
    virtual const char * idprec_fieldname() const {return ABMD_IDPREC;}
 | 
						|
    virtual const char * id_fieldname() const {return ABMD_ID;}
 | 
						|
    virtual const char * get_headkey() const {return " | | | | ";}
 | 
						|
    virtual void put_headkey(TRectype & node) ;
 | 
						|
  public:
 | 
						|
    virtual bool make_root(TBaseisamfile & saldi); 
 | 
						|
    virtual bool get_description(TString& desc) const;  
 | 
						|
 | 
						|
    TLocal_balance3();
 | 
						|
    virtual ~TLocal_balance3();
 | 
						|
};
 | 
						|
 | 
						|
class TAlbero_AB: public TRectype
 | 
						|
{
 | 
						|
  protected:
 | 
						|
    TAlbero_locale *_inter_tree;
 | 
						|
    virtual int commit_body() const;
 | 
						|
    virtual int read_body(bool lockstruct) {return 0;}  //DA FARE
 | 
						|
    virtual void put_headkey(TRectype &rec) const {;} //DA FARE
 | 
						|
    
 | 
						|
    TRectype * _newrec; //buffer per l'inserimento dodo per nodo
 | 
						|
 
 | 
						|
  public:
 | 
						|
    TAlbero_AB(int filenum);
 | 
						|
    virtual ~TAlbero_AB();
 | 
						|
    
 | 
						|
    virtual int read(TBaseisamfile& analisi, word isop=_isequal, word lockop=_nolock);
 | 
						|
    virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop = _nolock);
 | 
						|
    virtual int write(TBaseisamfile& analisi) const;
 | 
						|
    virtual int rewrite(TBaseisamfile& analisi) const;
 | 
						|
    virtual int remove(TBaseisamfile& f) const;
 | 
						|
    virtual bool remove_node(const TNumeric_id &id) {return FALSE;}
 | 
						|
    virtual bool insert_new_node() {return FALSE;}
 | 
						|
    virtual void zero();
 | 
						|
    TAlbero_locale * user_tree()
 | 
						|
      {return _inter_tree;}
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class TRecord : public TObject
 | 
						|
{    
 | 
						|
  TLocalisamfile *_r;   // da rimuovere !!
 | 
						|
  protected:                         
 | 
						|
    TAssoc_array _status_node_record;
 | 
						|
    TRWrecord_cache * _local_cache_record;
 | 
						|
    TRectype *_currrec;
 | 
						|
    
 | 
						|
  public:
 | 
						|
    // debug
 | 
						|
    void write_cache() { _local_cache_record->flush(); }
 | 
						|
    TRectype & current_rec() const {return *_currrec;}
 | 
						|
    TRWrecord_cache & current_cache_record() const {return *_local_cache_record;}
 | 
						|
    virtual TRectype extract_dirtynode(TString &id, TString& status);
 | 
						|
    
 | 
						|
    int dirty_nodes() { return _status_node_record.items();}
 | 
						|
    void set_status_node(const TString &id, const char *status);
 | 
						|
    TString* get_status_node(const TString &id) 
 | 
						|
      {return (TString*)_status_node_record.objptr(id);}
 | 
						|
    TRecord(int filenum);
 | 
						|
    virtual ~TRecord();
 | 
						|
};
 | 
						|
 | 
						|
class TAnalisi_bil: public TAlbero_AB
 | 
						|
{
 | 
						|
    class TArray_fratelli: public TAssoc_array
 | 
						|
    {
 | 
						|
      public:
 | 
						|
        void setkey(const char *tipocod, const char *codvc, TToken_string &key) const;
 | 
						|
        bool find1stkey(const char *tipocod, const char *codvc, TToken_string &key);
 | 
						|
        void mark_used(const char *key);
 | 
						|
        bool used(TObject *o);
 | 
						|
    };
 | 
						|
    TArray_fratelli _nodifratelli;
 | 
						|
    TLocalisamfile *_analisi;
 | 
						|
    TLocalisamfile *_voci;
 | 
						|
    TAlbero_relvoci *_relaz;
 | 
						|
    TAlbero_relana *_ana;
 | 
						|
    TAlbero_locale *_inter_tree_relvoci;
 | 
						|
    
 | 
						|
  protected:
 | 
						|
    void naviga_relazioni(const TNumeric_id & id_relana,const TNumeric_id & prec,const TNumeric_id & padre );
 | 
						|
    TRectype * sincronizza_relana(const TNumeric_id &begin_relana,TNumeric_id &id_relana);
 | 
						|
    bool lock_struttura();
 | 
						|
    bool unlock_struttura();
 | 
						|
    bool lock_tabella();
 | 
						|
    bool unlock_tabella();
 | 
						|
    virtual int read_body(bool lockstruct);
 | 
						|
    virtual int commit_body() const;
 | 
						|
    virtual void put_headkey(TRectype &rec) const;
 | 
						|
    void prova_inserimento();
 | 
						|
 | 
						|
  public:
 | 
						|
    virtual bool remove_node(const TNumeric_id &id);
 | 
						|
    virtual bool insert_new_node(TToken_string &codice);
 | 
						|
    virtual void modify_node(TToken_string &codice);
 | 
						|
    TAnalisi_bil();
 | 
						|
    virtual ~TAnalisi_bil() ;
 | 
						|
    TAlbero_locale * user_tree_voc()
 | 
						|
      {return _inter_tree_relvoci;}
 | 
						|
 | 
						|
    const TString &type() {return get(ABAN_TIPOAN);}
 | 
						|
    void set_type(const char * tipo) {put(ABAN_TIPOAN,tipo);}
 | 
						|
    
 | 
						|
};
 | 
						|
    
 | 
						|
class TABsaldo: public TAlbero_AB
 | 
						|
{
 | 
						|
    TLocalisamfile *_saldi;
 | 
						|
    TAlbero_movdett *_mov;
 | 
						|
    TLocalisamfile *_movdett;
 | 
						|
 | 
						|
  protected:
 | 
						|
    virtual int read_body(bool lockstruct);
 | 
						|
    virtual void put_headkey(TRectype &rec) const;
 | 
						|
    void naviga_movdett();
 | 
						|
    void prova_inserimento();
 | 
						|
 | 
						|
  public:
 | 
						|
    virtual bool remove_node(const TNumeric_id &id) {return FALSE;} //da fare
 | 
						|
    TABsaldo();
 | 
						|
    virtual ~ TABsaldo();
 | 
						|
};
 |