diff --git a/mg/mglib.h b/mg/mglib.h index 35b787e86..6050c0611 100755 --- a/mg/mglib.h +++ b/mg/mglib.h @@ -7,140 +7,60 @@ #ifndef __RELATION_H #include #endif + #ifndef __RECARRAY_H #include -#endif +#endif + #ifndef __VARREC_H #include #endif + #ifndef __MSKSHEET_H #include -#endif +#endif + #ifndef __FORM_H #include "form.h" #endif + #ifndef __ANAMAG_H #include "anamag.h" #endif + #ifndef __UMART_H #include "umart.h" #endif + #ifndef __CODCORR_H #include "codcorr.h" #endif + #ifndef __DESLIN_H #include "deslin.h" #endif + #ifndef __MAG_H #include "mag.h" #endif + #ifndef __STOMAG_H #include "stomag.h" #endif +#ifndef __RMOVMAG_H +#include "rmovmag.h" +#endif + +#ifndef __MULTIREC_H #include +#endif -#include "..\cg\cglib.h" - -/*class TMultiple_rectype ; -//************************************** -// classe per il controllo dei record composti da una testata e N file di righe -// è implementato come un TRectype che contiene anche un TRecord_array -// -class TMultiple_rectype : public TAuto_variable_rectype -{ - enum { maxfiles = 20}; - // @ cmember Array di TRecord array per le righe - TArray _files; // - // @ cmember flag indicatore di record nuovo - bool _nuovo; - // @ cmember numero di file righe - short _nfiles; - // @ cmember file delle righe - int _logicnums[maxfiles]; - // @ cmember Array di nomi di campo "numeratore" delle righe - TString_array _numfields; - -protected: - const TArray & files() const { return _files;} - // @ cmember funzione per costruire la chiave delle righe - virtual void set_body_key(TRectype & rowrec) pure; - // @ cmember renumber la chiave del corpo - virtual long renum(long numdoc = -1) { return -1; } - virtual TRectype & get_body_record(int logicnum = 0) { return *(new TRectype(logicnum ? logicnum : _logicnums[0])); } - virtual void load_rows_file(int logicnum); - // @cmember Ritorna l'indice di

del numero logico passato - int log2ind(int logicnum) const; - virtual int find(int logicnum, const char * fieldname, const char * s, int from = 0, bool reverse = FALSE) const ; - virtual int write_rewrite(TBaseisamfile& f, bool re = FALSE) const; - void remove_body(int logicnum); - -public: - //*********************** - // struttura - // @ cmember restituisce il record di testata - const TAuto_variable_rectype& head() const { return *this; } // Ritorna la testata del documento - // @ cmember restituisce il record di testata - TAuto_variable_rectype& head() { return *this; } // Ritorna la testata del documento - - - // @ cmember restituisce il record array del corpo - TRecord_array & body(int logicnum = 0) const; - // @ cmember restituisce il numero di record nel corpo - int rows(int logicnum = 0) const { return body(logicnum).rows(); } - - // @ cmember restituisce il record n-esimo del del corpo - virtual const TRecord_array & operator[](int logicnum) const { return (const TRecord_array &)((TMultiple_rectype *)this)->body(logicnum); } - // @ cmember restituisce il record n-esimo del del corpo - virtual TRecord_array & operator[](int logicnum) { return (TRecord_array &)body(logicnum); } - - bool destroy_row(int n, bool pack = FALSE, int logicnum = 0) { return body(logicnum).destroy_row(n, pack); } - void destroy_rows(int logicnum = 0) { body(logicnum).destroy_rows(); } - - //*********************** - // record e I/O - virtual void dirty_fields() {} - virtual void set_fields(TAuto_variable_rectype & rec) {} - virtual void reset_fields(TAuto_variable_rectype & rec) { rec.remove_field(); } - - virtual void renum_key(const char * kfield,const char * val); - virtual TRectype & operator =(const TRectype & r); - virtual TRectype & operator =(const char * r); - virtual void zero(char c = '\0'); - - virtual int read(TRectype & rec, word op = _isequal, word lockop = _nolock); - virtual int read(word op = _isequal, word lockop = _nolock) { return read(*this, op, lockop); } - int read(TBaseisamfile & f, word op = _isequal, word lockop = _nolock) { return read(f.curr(), op, lockop); } - - virtual int write(TBaseisamfile& f) const - { return write_rewrite(f);} - virtual int rewrite(TBaseisamfile& f) const - { return write_rewrite(f,TRUE);} - virtual int remove(TBaseisamfile& f) const; - - int write() const { TBaseisamfile f(num()); return write(f);} - int rewrite() const { TBaseisamfile f(num()); return rewrite(f);} - int remove() const { TBaseisamfile f(num()); return remove(f);} - - - void add_file(int logicnum, const char * numfield); - //************************** - // @ cmember costruttore dal numero del file - TMultiple_rectype(int hfn); - // @ cmember costruttore dal file - TMultiple_rectype(const TBaseisamfile* file); - // @ cmember costruttore dal record - TMultiple_rectype(const TRectype & rec); - // @ cmember costruttore di copia - TMultiple_rectype(const TMultiple_rectype& r); - virtual ~TMultiple_rectype() {} -}; - -*/ +#ifndef __CGLIB01_H +#include "..\cg\cglib01.h" +#endif - -// typedef enum { riga_nongenerata=' ', riga_automatica='A', @@ -210,7 +130,7 @@ public: virtual void zero(char c = '\0'); int find_mag(const char * annoes, const char * codmag = NULL, const char * livello = NULL, int from = 0) const ; - int find_storico(const char * annoesrif, const char * annoes = NULL, int from = 0) const; + int find_storico(const char * annoesrif, const char * annoes = NULL, const char * codmag = NULL, int from = 0) const; TRecord_array & mag(const char * annoes) const; TRecord_array & storico(const char * annoesrif) const; @@ -237,137 +157,19 @@ public: virtual ~TArticolo_giacenza() {} }; -class THead_lines_record ; -//************************************** -// classe per il controllo dei record composti da una testata e N righe -// è implementato come un TRectype che contiene anche un TRecord_array -// -class THead_lines_record : public TAuto_variable_rectype { - - // @ cmember Array di TRectype per le righe - TRecord_array * _rows; // - // @ cmember flag indicatore di record nuovo - bool _nuovo; - // @ cmember file principale - int _file; - // @ cmember file delle righe - int _rfile; - // @ cmember nome del campo "numeratore" delle righe - TString _numfield; - - -protected: - // @ cmember restituisce la riga del corpo - virtual TRectype & row(int index) const; - virtual void put_str(const char* fieldname, const char* val); - // @ cmember funzione per estrarre dal record della testata la chiave delle righe - virtual void copy_linekey(const TRectype & headrecord, TRectype & linesrecord)=0; - // @ cmember renumer la chiave del corpo - virtual long renum(long numdoc=-1)=0; - - int write_rewrite(TBaseisamfile& f ,bool re = FALSE) const ; -public: - //*********************** - // struttura - // @ cmember restituisce il record di testata - const TAuto_variable_rectype& head() const { return *this; } // Ritorna la testata del documento - // @ cmember restituisce il record di testata - TAuto_variable_rectype& head() { return *this; } // Ritorna la testata del documento - - // @ cmember restituisce il numero di record nel corpo - int rows() const { return _rows->rows(); } - // @ cmember restituisce il record array del corpo - TRecord_array * rows_record() { return _rows; } - - // @ cmember restituisce il record n-esimo del del corpo - virtual const TRectype& operator[](int index) const - { return (const TRectype&)((THead_lines_record *)this)->row(index); } - // @ cmember restituisce il record n-esimo del del corpo - virtual TRectype& operator[](int index) - { return (TRectype&)row(index); } - - TRectype & insert_row(int row, const char *tipo = NULL); - TRectype & new_row(const char *tipo = NULL); - bool destroy_row(int n, bool pack = FALSE) { return _rows->destroy_row(n, pack); } - void destroy_rows() { _rows->destroy_rows(); } - - //*********************** - // record e I/O - virtual void dirty_fields(); - - virtual const char *get_next_key() =0 ; - virtual void renum_key(const char * kfield,const char * val); - virtual TRectype & operator =(const TRectype & r); - virtual TRectype & operator =(const char * r); - virtual void zero(const char * fieldname); - virtual void zero(char c = '\0'); - - void reset_fields(TAuto_variable_rectype & rec) { rec.remove_field(); } - virtual void set_fields(TAuto_variable_rectype & rec); - - virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop= _nolock); - virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock); - - virtual int write(TBaseisamfile& f) const ; - virtual int rewrite(TBaseisamfile& f) const ; - virtual int remove(TBaseisamfile& f) const ; - - //************************** - // @ cmember costruttore dal numero del file - THead_lines_record(int hfn, int rfn,const char *numfield); - // @ cmember costruttore dal file - THead_lines_record(const TBaseisamfile* head_file,int rfn,const char *numfield); - // @ cmember costruttore dal record - THead_lines_record(const TRectype & r,int rfn,const char *numfield); - // @ cmember costruttore di copia - THead_lines_record(const THead_lines_record& r); - virtual ~THead_lines_record(); -}; - - -// ************************************** -// ************************************** -// ************************************** -// fine classi da portare in libreria: - // ******************************* // LIBRERIA DI utility del magazzino // ******************************* -//#include "..\ve\velib03.h" - +//#define MANY_MAG_LEV 10 +//#define MAX_GIAC_LEVEL 4 #define MANY_MAG_LEV 10 #define MAX_GIAC_LEVEL 4 -class TMag_livelli { - bool _enabled[MANY_MAG_LEV]; - int _code_lenght[MANY_MAG_LEV]; - TString _name[MANY_MAG_LEV]; - TString _picture[MANY_MAG_LEV]; - int _last_level; - -public: - int last_level() const {return _last_level;}; // Ritorna il numero di livelli abilitati - const bool enabled(int levnum=1); // Ritorna se il livello è abilitato - const TString & name(int levnum); // Ritorna il nome (descrizione) di quel livello - const TString & picture(int levnum);// Ritorna la stringa di picture per i codici gruppo di quel livello - const int code_lenght(int levnum); // Ritorna la lunghezza dei codici gruppo di quel livello - const int packed_lenght(int levnum); // Ritorna la lunghezza del codice compatto fino a quel livello - void pack_grpcode(TString & pc, const TString &codlev, const int levnum); // Inserisce il codice del gruppo del livello levnum in pc - TString unpack_grpcode(const TString & pc, const int levnum); // Estrae il codice del gruppo del livello levnum da pc - TString build_tabcode(const TString & pc, const int levnum); - - TMag_livelli(const char *tabname); // costruttore - ~TMag_livelli() {}; // distruttore -}; - - - -// ******************************* -// ******************************* -// riconoscimento di metacaratteri class TR_automa; -class TMetachar { + +class TMetachar : public TObject +{ TR_automa * _au; TString _language; char _metach_mand[10]; @@ -387,12 +189,78 @@ public: const char *opz_chars() {return _metach_opz;}; TMetachar(const char * str); TMetachar(); - ~TMetachar(); + virtual ~TMetachar(); }; + +class TCodice_livelli : public TObject +{ + bool _enabled[MANY_MAG_LEV]; + int _code_lenght[MANY_MAG_LEV]; + TString _name[MANY_MAG_LEV]; + TString _picture[MANY_MAG_LEV]; + int _last_level; + TDecoder *_gruppi; + +protected: + void add_metachar(int lev); + TArray _metachars; + +public: + // Ritorna il numero di livelli abilitati + int last_level() const {return _last_level;}; + // Ritorna se il livello è abilitato + const bool enabled(int levnum=1) const ; + // Ritorna il nome (descrizione) di quel livello + const TString & name(int levnum) const ; + // Ritorna la stringa di picture per i codici gruppo di quel livello + const TString & picture(int levnum) const; + // Ritorna la lunghezza dei codici gruppo di quel livello + const int code_lenght(int levnum) const ; + // Ritorna la lunghezza del codice compatto fino a quel livello + const int packed_lenght(int levnum) const ; + // Restituisce la descrizione del gruppo + const TString & group_descr(const char * grpcode, int levnum) const; + void pack_grpcode(TString & pc, const TString &codlev, const int levnum); // Inserisce il codice del gruppo del livello levnum in pc + TString unpack_grpcode(const TString & pc, const int levnum) const ; // Estrae il codice del gruppo del livello levnum da pc + TString build_tabcode(const TString & pc, const int levnum) const ; + + + // Restituisce il formato previsto per il codice (default==ultimo livello) + const char * code_format(int levnum=-1) const ; + // Restituisce se

e' riconosciuto come codice articolo (default==ultimo livello) + bool fit_to_format(const char *codepart, int levnum=-1) const ; + +/* bool has_mandchars(const char * pattern); + bool has_opzchars(const char * pattern); + const char * opz_chars(); + const char * mand_chars();*/ + + TCodice_livelli(const char *tabcod,const char *tabgrp); // costruttore + virtual ~TCodice_livelli() {}; // distruttore +}; + + +class TCodart_livelli : public TCodice_livelli +{ +public: + TCodart_livelli(); // costruttore + virtual ~TCodart_livelli() ; // distruttore +}; + + +class TCodgiac_livelli : public TCodice_livelli +{ +public: + TCodgiac_livelli(); // costruttore + virtual ~TCodgiac_livelli() {}; // distruttore +}; + + // ********************* // classe che incapsula le causali di magazzino (record della tabella CAU) -typedef enum { +typedef enum +{ s_giac, s_acq,s_ent, s_ven,s_usc, @@ -404,42 +272,32 @@ typedef enum { s_label } TTipo_saldomag; -class TCausale_magazzino : public TRectype { +class TCausale_magazzino : public TRectype +{ public: - const char * get_codice() {return get("CODTAB");} - const char * get_descr() {return get("S0");} - const char get_tipoprz() {return get_char("S6");} - const char get_tipomov() {return get_char("S7");} - const char * get_raggfisc() {return get("S8");} - const char * get_collegata() {return get("S9");} + const TString & codice() const {return get("CODTAB");} + const TString & descr() const {return get("S0");} + char tipoprz() const {return get_char("S6");} + char tipomov() const {return get_char("S7");} + const TString & raggfisc() {return get("S8");} + const TString & caus_collegata() {return get("S9");} int sgn(TTipo_saldomag fieldname) ; + bool update_qta() {return get_bool("B0");} + bool update_val() {return get_bool("B1");} + bool update_ultcos() {return TRUE; /*get_bool("B2");*/} + bool is_fiscale(); TCausale_magazzino(const char * codice); - ~TCausale_magazzino(); + virtual ~TCausale_magazzino() {} }; class TLine_movmag ; // convenience... -// dati della linea di movimento di magazzino -class TLine_movmag : public TObject { -public: - TString16 um; - real quant; - real prezzo; - int operator==(TLine_movmag &); - - virtual TObject* dup() const {return new TLine_movmag(*this);}; - - TLine_movmag() {}; - TLine_movmag(const TLine_movmag &); - virtual ~TLine_movmag() {}; -}; - // classe per la definizione dei movimenti di magazzino // ( un movimento (testata+righe) == un oggetto TMov_mag ) -class TMov_mag : public TMultiple_rectype { +class TMov_mag : public TMultiple_rectype +{ // - TString16 _codcaus; TString16 _annoes; // TString16 _nextcod; @@ -448,6 +306,7 @@ class TMov_mag : public TMultiple_rectype { TAssoc_array lines_to_add; TAssoc_array lines_to_subtract; + static TRecord_cache cache_causali; protected: virtual void set_body_key(TRectype & rowrec); virtual bool renum(); // rinumerazione ; @@ -456,31 +315,40 @@ protected: // @member: compone le parti chiave + dati a partire dalla riga dello sheet void line2key_data(int numriga, TToken_string &key,TLine_movmag &rest) const; // @member: compone la chiave a partire dalla riga dello sheet - TToken_string line2key(int numriga) const; + TToken_string & line2key(int numriga) const; // @member: compone la dati a partire dalla riga dello sheet - TLine_movmag line2data(int numriga) const; + TLine_movmag & line2data(int numriga) const; // @member: estrae dalla Tokenstring della chiave i valori corrispondenti ai campi del file static TString key2field(TToken_string &key,const char * f); // @member: memorizza la linea come "da togliere" - int delete_line(TToken_string &key,TLine_movmag &rest); + int line_deleted(TToken_string &key,TLine_movmag &rest); // @member: memorizza la linea come "da aggiungere" - int insert_line(TToken_string &key,TLine_movmag &rest); + int line_inserted(TToken_string &key,TLine_movmag &rest); // @member: effettua l'aggiornamento dei saldi relativi alle giacenze interessate al movimento int update_balances() ; // @member: effettua l'aggiornamento dei saldi di una giacenza - int update_balances(TRectype & magrec, const TLine_movmag &l,TString16 codcaus,int sign) ; + int update_balances(TRectype & magrec, const TLine_movmag &l,int sign) ; // @member: effettua l'aggiornamento di un saldo di una giacenza void update_balance(TRectype & magrec, const char * fieldname, real diff) const; static void giac_putkey(TLocalisamfile & mag,TString16 annoes,TToken_string curr_key); static bool lock_anamag(const char *codart); static bool unlock_anamag(const char *codart) ; + virtual const char * codmag_rauto(int r) const { return NULL;} + virtual const char * prezzo_rauto(int r) const { return NULL;} + // @member: restituisce il codice del magazzino della riga automatica accoppiata a + virtual const char * codmag_rauto(int r) + {return NULL;} + // @member: restituisce il prezzo della riga automatica accoppiata a + virtual const char * prezzo_rauto(int r) + {return NULL;} public: // IO ad alto livello const char *get_next_key() ; virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock); virtual int remove(TBaseisamfile& f) const ; + void add_automatiche(); virtual int write(TBaseisamfile& f) const ; virtual int rewrite(TBaseisamfile& f) const ; int force_update_bal(); @@ -504,11 +372,15 @@ class TForm_stampemg : public TForm bool _permag; int _fromlivgiac,_tolivgiac,_fromlivart,_tolivart; bool _sottocatmer; - TMag_livelli * _giaclev,*_artlev; - TDecoder *_giacgrp,*_artgrp; + //sostituire con le funzioni di TLivelli_... : + //TDecoder *_giacgrp,*_artgrp; bool setdettaglio(bool show, int fromlivart,int livart,int fromlivgiac,int livgiac,bool dettgiac); void add_giaclev(TString &levname); +public: + TCodart_livelli * _artlev; + TCodgiac_livelli * _giaclev; + public: void gruppogiac(TForm_item &cf, TToken_string &s); void gruppoart(TForm_item &cf, TToken_string &s); @@ -517,10 +389,9 @@ public: bool setdett_perart(int fromlivart,int livart,int fromlivgiac,int livgiac,bool showmag, bool showdep); bool setdett_permag(int fromlivart,int livart,int fromlivgiac,int livgiac,bool showmag, bool showdep,bool showdett); TForm_stampemg(const char *name,const char *code) ; - ~TForm_stampemg(); + virtual ~TForm_stampemg(); }; - #include "..\ve\sconti.h" class TCondizione_vendita : public TObject @@ -567,7 +438,7 @@ public: bool ricerca(const char * cod,const real & qta=0) ; TCondizione_vendita(TConfig * _ditta = NULL, TLocalisamfile * anamag = NULL, TLocalisamfile * umart = NULL); - ~TCondizione_vendita() {} + virtual ~TCondizione_vendita() {} };