campo-sirio/mg/mglib02.h
alex 4cb017d7da Modifiche all'oggetto articolo
git-svn-id: svn://10.65.10.50/trunk@4464 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-05-30 15:26:08 +00:00

234 lines
8.8 KiB
C++
Executable File

// *******************************
// LIBRERIA di magazzino per le valorizzazioni e le chiusure
// *******************************
#ifndef __MGLIB02_H
#define __MGLIB02_H
#ifndef __RELATION_H
#include <relation.h>
#endif
#ifndef __RECARRAY_H
#include <recarray.h>
#endif
#ifndef __VARREC_H
#include <varrec.h>
#endif
#ifndef __MSKSHEET_H
#include <msksheet.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
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 <p _files> 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