// ******************************* // LIBRERIA di magazzino per le valorizzazioni e le chiusure // ******************************* #ifndef __MGLIB02_H #define __MGLIB02_H #ifndef __RELATION_H #include #endif #ifndef __RECARRAY_H #include #endif #ifndef __VARREC_H #include #endif #ifndef __MSKSHEET_H #include #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 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; virtual int rewrite(TBaseisamfile& f) const; 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() {} }; typedef enum { valorizz_ultcos , valorizz_mediacos , valorizz_przlist , valorizz_coststd , valorizz_costmedio , valorizz_FIFOa , valorizz_LIFOa , valorizz_FIFO , valorizz_LIFO, valorizz_FIFOr , valorizz_LIFOr } TTipo_valorizz; char * TNome_valorizz[]= { "Ultimo costo", "Media ultimi costi", "Prezzo di listino", "Costo standard", "Costo medio" , "FIFO annuale", "LIFO annuale", "FIFO", "LIFO", "FIFO Ragionieristico", "LIFO Ragionieristico" } ; class TArticolo : public TMultiple_rectype { TRecfield * _codice; protected: virtual const TString & get_str(const char* fieldname) const ; virtual void set_body_key(TRectype & rowrec); public: virtual int read(const char * cod, word op = _isequal, word lockop = _nolock); virtual int read(TRectype & rec, word op = _isequal, word lockop = _nolock) { return read( rec.get(ANAMAG_CODART), op, lockop); } TObject* dup() const { return new TArticolo(codice()); } const TString& codice() const { return (const char *) *_codice;} const TString& descrizione(const char * lingua = NULL) const; int find_um(const char * um, int from = 0) const { return find(LF_UMART, UMART_UM, um, from); } int find_deslin(const char * deslin, int from = 0) const { return find(LF_DESLIN, DESLIN_CODLIN, deslin, from); } int find_codcorr(const char * codcorr, int from = 0) const { return find(LF_CODCORR, CODCORR_CODARTALT, codcorr, from); } TRecord_array & um() const { return body(LF_UMART); } TRecord_array & deslin() const { return body(LF_DESLIN); } TRecord_array & codcorr() const { return body(LF_CODCORR); } TArticolo(const char* codice = NULL); TArticolo(const TRectype& rec); virtual ~TArticolo(); }; class TArticolo_giacenza : public TArticolo { TString16 _anno_mag; TString16 _anno_sto; protected: virtual const TString & get_str(const char* fieldname) const ; virtual void set_body_key(TRectype & rowrec); void set_anno_mag (const char * anno = NULL); void set_anno_sto (const char * anno = NULL); void reset_anno_mag () { set_anno_mag();} void reset_anno_sto () { set_anno_sto();} public: TObject* dup() const { return new TArticolo_giacenza(codice()); } 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; TRecord_array & mag(const char * annoes) const; TRecord_array & storico(const char * annoesrif) const; real ultimo_costo(const char * annoes) const; real media_costi(const char * annoes) const; real prezzo_listino(const char * annoes, const char * catven ,const char * codlist) const; real costo_standard(const char * annoes) const; real costo_medio(const char * annoes, const char * codmag, const char * livello) const; real LIFO_annuale(const char * annoes, const char * codmag, const char * livello, bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const; real FIFO_annuale(const char * annoes, const char * codmag, const char * livello, bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const; real LIFO(const char * annoes, const char * codmag, const char * livello, bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const; real FIFO(const char * annoes, const char * codmag, const char * livello, bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const; real LIFO_ragionieristico(const char * annoes, const char * codmag, const char * livello, bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const; real FIFO_ragionieristico(const char * annoes, const char * codmag, const char * livello, bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const; TArticolo_giacenza(const char* codice = NULL); TArticolo_giacenza(const TRectype& rec); virtual ~TArticolo_giacenza() {} }; #endif