Patch level : 10.0 138
Files correlati : ve*.exe mg *.exe Ricompilazione Demo : [ ] Commento : gestione giacenze per cliente/ fornitore git-svn-id: svn://10.65.10.50/trunk@17367 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
570d0bc9f5
commit
6ab05780cd
186
mg/mglib.h
186
mg/mglib.h
@ -74,6 +74,17 @@ typedef enum {
|
||||
|
||||
extern const char* const nome_valorizz(TTipo_valorizz tipo);
|
||||
|
||||
const char* const zero_fields[] =
|
||||
{
|
||||
MAG_GIAC, MAG_PRODFIN, MAG_INCL, MAG_ACL, MAG_NLABEL,
|
||||
MAG_RIM, MAG_VALRIM, MAG_ACQ, MAG_VALACQ, MAG_ENT, MAG_VALENT,
|
||||
MAG_VEN, MAG_VALVEN, MAG_USC, MAG_VALUSC, MAG_ORDF, MAG_VALORDF,
|
||||
MAG_ORDC, MAG_VALORDC, MAG_SCARTI, MAG_VALSCARTI, MAG_PRODCOMP,
|
||||
"USER1", "USERVAL1", "USER2", "USERVAL2", "USER3", "USERVAL3",
|
||||
"USER4", "USERVAL4", "USER5", "USERVAL5", "USER6", "USERVAL6",
|
||||
NULL
|
||||
};
|
||||
|
||||
class TArticolo : public TMultiple_rectype
|
||||
{
|
||||
protected:
|
||||
@ -103,7 +114,7 @@ public:
|
||||
const TString& descrizione(const char * lingua = NULL) const;
|
||||
|
||||
bool unlock() ;
|
||||
bool lock_and_prompt(const char * cod) ;
|
||||
bool lock_and_prompt(word lockop = _testandlock);
|
||||
void update_ultcosti(const real& costo, const TDate& data, long numreg, int numrig);
|
||||
void set_prezzo_vendita(const real& prezzo, const char* um = NULL);
|
||||
|
||||
@ -120,12 +131,12 @@ public:
|
||||
|
||||
TArticolo(const char* codice = NULL);
|
||||
TArticolo(const TRectype& rec);
|
||||
virtual ~TArticolo();
|
||||
virtual ~TArticolo() {}
|
||||
};
|
||||
|
||||
class TArticolo_giacenza : public TArticolo
|
||||
{
|
||||
TString4 _anno_mag, _anno_sto;
|
||||
int _anno_mag, _anno_sto;
|
||||
|
||||
protected:
|
||||
// la get_str supporta anche la sintassi:
|
||||
@ -141,15 +152,21 @@ protected:
|
||||
// fieldname = nome del campo nel file collegato
|
||||
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 set_anno_mag (int anno = 0);
|
||||
void set_anno_mag (const char * anno) { set_anno_mag(atoi(anno)); }
|
||||
void set_anno_sto (int anno = 0);
|
||||
void set_anno_sto (const char * anno) { set_anno_sto(atoi(anno)); }
|
||||
void reset_anno_mag () { set_anno_mag();}
|
||||
void reset_anno_sto () { set_anno_sto();}
|
||||
bool is_last_esercizio(const char* annoes) const;
|
||||
bool is_last_esercizio(int annoes) const;
|
||||
bool is_last_esercizio(const char* annoes) const { return is_last_esercizio(atoi(annoes));}
|
||||
bool is_deletable(const TRectype& mag) const;
|
||||
|
||||
void copia_storico(TRecord_array& nrstorico, const char * annoes,const char * codmag, const char * annoprec, real rim, real valrim);
|
||||
void add_storico(TRecord_array& nrstorico, const char * annoes,const char * codmag, const real & qta, const real & prz);
|
||||
void copia_storico(TRecord_array& nrstorico, int annoes, const char * codmag, int annoprec, real rim, real valrim);
|
||||
void add_storico(TRecord_array& nrstorico, int annoes,const char * codmag, const real & qta, const real & prz);
|
||||
|
||||
void copia_storico(TRecord_array& nrstorico, const char * annoes, const char * codmag, const char * annoprec, real rim, real valrim) { copia_storico(nrstorico, atoi(annoes), codmag, atoi(annoprec), rim, valrim); }
|
||||
void add_storico(TRecord_array& nrstorico, const char * annoes,const char * codmag, const real & qta, const real & prz) { add_storico(nrstorico, atoi(annoes), codmag, qta, prz); }
|
||||
|
||||
public:
|
||||
|
||||
@ -158,12 +175,15 @@ public:
|
||||
|
||||
int find_mag(TRecord_array& rmag, const char * codmag = NULL, const char * livello = NULL, int from = 0) const ;
|
||||
int find_storico(TRecord_array& rsto, const char * codmag = NULL, int from = 0) const;
|
||||
int find_mag(int annoes, const char * codmag = NULL, const char * livello = NULL, int from = 0) const ;
|
||||
int find_storico(int annoesrif, const char * codmag = NULL, int from = 0) const;
|
||||
int find_mag(const char * annoes, const char * codmag = NULL, const char * livello = NULL, int from = 0) const { return find_mag(atoi(annoes), codmag, livello, from); }
|
||||
int find_storico(const char * annoesrif, const char * codmag = NULL, int from = 0) const { return find_storico(atoi(annoesrif), codmag, from); }
|
||||
|
||||
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 * codmag = NULL, int from = 0) const;
|
||||
|
||||
TRecord_array & mag(const char * annoes) const;
|
||||
TRecord_array & storico(const char * annoesrif) const;
|
||||
TRecord_array & mag(int annoes) const;
|
||||
TRecord_array & mag(const char * annoes) const { return mag(atoi(annoes));}
|
||||
TRecord_array & storico(int annoesrif) const;
|
||||
TRecord_array & storico(const char * annoesrif) const { return mag(atoi(annoesrif));}
|
||||
|
||||
// calcola disponibilità (anche complessiva su più depositi o magazzini)
|
||||
// solo_giac indica di fare il calcolo della sola giacenza
|
||||
@ -172,33 +192,61 @@ public:
|
||||
// rimanenze iniziali dell'esercizio newes, valorizzando secondo il tipo passato
|
||||
// Si suppone che i saldi siano coerenti con i movimenti (effettuare una rebuild_balances()
|
||||
// di oldes.
|
||||
bool riporta_saldi(int oldes, int newes, const TTipo_valorizz tipo,
|
||||
const char* catven, const char* codlis, bool save_to_disk = true);
|
||||
|
||||
// Identica alla precedente con gli esercizi passati come stringhe
|
||||
bool riporta_saldi(const char * oldes, const char* newes, const TTipo_valorizz tipo,
|
||||
const char * catven ,const char * codlist, bool save_to_disk = TRUE);
|
||||
// La seguente funzione azzera tutti i saldi di mgazzino per l'esercizio cod_es
|
||||
bool azzera_saldi(const char* cod_es, bool save_to_disk = TRUE);
|
||||
const char * catven ,const char * codlist, bool save_to_disk = true) { return riporta_saldi(atoi(oldes), atoi(newes), tipo, catven, codlist, save_to_disk);}
|
||||
bool azzera_saldi(int codes, bool save_to_disk = true);
|
||||
bool azzera_saldi(const char* codes, bool save_to_disk = true) { return azzera_saldi(atoi(codes), save_to_disk); }
|
||||
|
||||
// valorizzazioni
|
||||
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 costo_mediopond(const char * annoes, const char * codmag, const char * livello) const;
|
||||
real ultimo_costo(int annoes) const;
|
||||
real media_costi(int annoes) const;
|
||||
real prezzo_listino(int annoes, const char * catven ,const char * codlist) const;
|
||||
real costo_standard(int annoes) const;
|
||||
real costo_medio(int annoes, const char * codmag, const char * livello) const;
|
||||
real costo_mediopond(int annoes, const char * codmag, const char * livello) const;
|
||||
real LIFO_annuale(int annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const;
|
||||
real FIFO_annuale(int annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const;
|
||||
real LIFO(int annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const;
|
||||
real FIFO(int annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const;
|
||||
real LIFO_ragionieristico(int annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const;
|
||||
real FIFO_ragionieristico(int annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const;
|
||||
|
||||
real ultimo_costo(const char * annoes) const { return ultimo_costo(atoi(annoes));}
|
||||
real media_costi(const char * annoes) const { return media_costi(atoi(annoes));}
|
||||
real prezzo_listino(const char * annoes, const char * catven ,const char * codlist) const { return prezzo_listino(atoi(annoes), catven ,codlist);}
|
||||
real costo_standard(const char * annoes) const { return costo_standard(atoi(annoes));}
|
||||
real costo_medio(const char * annoes, const char * codmag, const char * livello) const { return costo_medio(atoi(annoes), codmag, livello); }
|
||||
real costo_mediopond(const char * annoes, const char * codmag, const char * livello) const { return costo_mediopond(atoi(annoes), codmag, livello); }
|
||||
real LIFO_annuale(const char * annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const;
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const { return LIFO_annuale(atoi(annoes), codmag, livello, giacenza_effettiva, valorizza_componenti); }
|
||||
real FIFO_annuale(const char * annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const;
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const { return FIFO_annuale(atoi(annoes), codmag, livello, giacenza_effettiva, valorizza_componenti);}
|
||||
real LIFO(const char * annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const;
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const { return LIFO(atoi(annoes), codmag, livello, giacenza_effettiva, valorizza_componenti ); }
|
||||
real FIFO(const char * annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const;
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const { return FIFO(atoi(annoes), codmag, livello, giacenza_effettiva, valorizza_componenti); }
|
||||
real LIFO_ragionieristico(const char * annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const;
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const { return LIFO_ragionieristico(atoi(annoes), codmag, livello, giacenza_effettiva, valorizza_componenti);}
|
||||
real FIFO_ragionieristico(const char * annoes, const char * codmag, const char * livello,
|
||||
bool giacenza_effettiva = TRUE, bool valorizza_componenti = TRUE) const;
|
||||
void agg_storicoLIFO (const char * annoes, const char * codmag, bool giac_eff, bool valorizza_componenti) ;
|
||||
void agg_storicoFIFO (const char * annoes, const char * codmag, bool giac_eff, bool valorizza_componenti) ;
|
||||
void agg_storico(const char * annoes, const char * codmag, bool giac_eff, bool valorizza_componenti, const real& val) ;
|
||||
bool giacenza_effettiva = true, bool valorizza_componenti = true) const { return FIFO_ragionieristico(atoi(annoes), codmag, livello, giacenza_effettiva, valorizza_componenti );}
|
||||
|
||||
void agg_storicoLIFO (int annoes, const char * codmag, bool giac_eff, bool valorizza_componenti) ;
|
||||
void agg_storicoFIFO (int annoes, const char * codmag, bool giac_eff, bool valorizza_componenti) ;
|
||||
void agg_storico(int annoes, const char * codmag, bool giac_eff, bool valorizza_componenti, const real& val) ;
|
||||
|
||||
void agg_storicoLIFO (const char * annoes, const char * codmag, bool giac_eff, bool valorizza_componenti) { agg_storicoLIFO (atoi(annoes), codmag, giac_eff, valorizza_componenti); }
|
||||
void agg_storicoFIFO (const char * annoes, const char * codmag, bool giac_eff, bool valorizza_componenti) { agg_storicoFIFO (atoi(annoes), codmag, giac_eff, valorizza_componenti); }
|
||||
void agg_storico(const char * annoes, const char * codmag, bool giac_eff, bool valorizza_componenti, const real& val) { return agg_storico(atoi(annoes), codmag, giac_eff, valorizza_componenti, val);}
|
||||
|
||||
real giacenza_corretta(const TRectype & rec , bool giacenza_effettiva, bool valorizza_componenti) const;
|
||||
|
||||
@ -237,6 +285,9 @@ public:
|
||||
TArticolo_giacenza_loadable(const TRectype& rec);
|
||||
};
|
||||
|
||||
TArticolo & cached_article(const char * codart);
|
||||
TArticolo_giacenza & cached_article_balances(const char * codart);
|
||||
|
||||
// *******************************
|
||||
// LIBRERIA DI utility del magazzino
|
||||
// *******************************
|
||||
@ -299,7 +350,7 @@ public:
|
||||
// Ritorna il numero di livelli abilitati
|
||||
int last_level() const { return enabled() ? _last_level : 0; }
|
||||
// Abilita la gestione dei livelli
|
||||
void enable(bool on=TRUE) ;
|
||||
void enable(bool on=true) ;
|
||||
// Ritorna se la gestione dei livelli è abilitata
|
||||
const bool enabled() const ;
|
||||
// Ritorna se il livello specificato è abilitato
|
||||
@ -442,6 +493,7 @@ class TCausale_magazzino : public TRectype
|
||||
public:
|
||||
const TString & codice() const {return get("CODTAB");}
|
||||
const TString & descr() const {return get("S0");}
|
||||
const TString & qta_doc() const {return get("S5");}
|
||||
char tipoprz() const {return get_char("S6");}
|
||||
char tipomov() const {return get_char("S7");}
|
||||
const TString & raggfisc() const {return get("S8");}
|
||||
@ -454,6 +506,7 @@ public:
|
||||
bool scarica_artprod() const {return get_bool("B4");}
|
||||
bool movimenta_sospesi() const {return get_bool("B5");}
|
||||
bool scarica_alternativi() const {return get_bool("B6");}
|
||||
bool aggiorna_clifo() const {return get_bool("B7");}
|
||||
const TString & default_magdep() const {return get("S10");}
|
||||
const char *default_mag() const {return get("S10").mid(0,3);}
|
||||
const char *default_dep() const {return get("S10").mid(3,2);}
|
||||
@ -465,61 +518,46 @@ public:
|
||||
virtual ~TCausale_magazzino() {}
|
||||
};
|
||||
|
||||
class TLine_movmag;
|
||||
|
||||
TCausale_magazzino & cached_causale_magazzino(const char * codcaus);
|
||||
|
||||
class TSaldo_mag;
|
||||
class TSaldo_mag_clifo;
|
||||
|
||||
// classe per la definizione dei movimenti di magazzino
|
||||
// ( un movimento (testata+righe) == un oggetto TMov_mag )
|
||||
class TMov_mag : public TMultiple_rectype
|
||||
{
|
||||
static TCausale_magazzino *_causmag;
|
||||
//
|
||||
TString4 _annoes; // codice esercizio del movimento
|
||||
int _annoes; // codice esercizio del movimento
|
||||
TDate _datacomp; // data di competenza
|
||||
//
|
||||
TArticolo_giacenza curr_art;
|
||||
TAssoc_array lines_to_add;
|
||||
TAssoc_array lines_to_subtract;
|
||||
TAssoc_array _saldi_mag;
|
||||
TAssoc_array _saldi_mag_clifo;
|
||||
|
||||
protected:
|
||||
virtual void load_rows_file(int logicnum);
|
||||
// virtual void load_rows_file(int logicnum);
|
||||
virtual void set_body_key(TRectype & rowrec);
|
||||
virtual bool key_complete();
|
||||
virtual bool renum(); // rinumerazione ;
|
||||
|
||||
// ************ gestione saldi
|
||||
// @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;
|
||||
// @member: compone la dati a partire dalla riga dello sheet
|
||||
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 line_deleted(TToken_string &key,TLine_movmag &rest);
|
||||
// @member: memorizza la linea come "da aggiungere"
|
||||
int line_inserted(TToken_string &key,TLine_movmag &rest);
|
||||
// @member: memorizza le linee attuali: tutte da togliere e nessuna da aggiungere (o viceversa)
|
||||
void mark_current_lines(const bool as_deleted=TRUE);
|
||||
// @member: aggiorna i saldi
|
||||
void add_saldi(const bool plus = true);
|
||||
// @member: effettua l'aggiornamento dei saldi relativi alle giacenze interessate al movimento
|
||||
int update_balances() ;
|
||||
bool update_balances(bool lock = true) ;
|
||||
// @member: effettua l'aggiornamento dei saldi di una giacenza
|
||||
int update_balances(TRectype & magrec, const TLine_movmag &l,int sign) ;
|
||||
void update_balances(TRectype & magrec, const TSaldo_mag & s) ;
|
||||
// @member: effettua l'aggiornamento dei saldi di una giacenza sulle gacenze per ciente/fornitore
|
||||
void update_balances_clifo(TRectype & clifomagrec, const TSaldo_mag_clifo & s);
|
||||
// @member: effettua l'aggiornamento di un saldo di una giacenza
|
||||
void update_balance(TRectype & magrec, const char * fieldname, real diff) const;
|
||||
void update_balance(TRectype & rec, const char * fieldname, real diff) const;
|
||||
|
||||
static void giac_putkey(TLocalisamfile & mag,const TString& annoes,TToken_string curr_key);
|
||||
static bool lock_anamag(const char *codart);
|
||||
static bool unlock_anamag(const char *codart) ;
|
||||
void giac_putkey(TLocalisamfile & mag, TSaldo_mag & s);
|
||||
void giac_putkey_clifo(TLocalisamfile & clifomag, TSaldo_mag_clifo & s);
|
||||
bool lock_anamag(const char *codart);
|
||||
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 <par r>
|
||||
//virtual const char * codmag_rauto(int r)
|
||||
//{return NULL;}
|
||||
// @member: restituisce il prezzo della riga automatica accoppiata a <par r>
|
||||
//virtual const char * prezzo_rauto(int r)
|
||||
//{return NULL;}
|
||||
// aggiunge le righe automatiche e da esplosione
|
||||
void add_extrarows() const;
|
||||
// aggiunge le righe automatiche
|
||||
@ -531,13 +569,17 @@ public:
|
||||
virtual const char *get_next_key() ;
|
||||
virtual int remove(TBaseisamfile& f) const ;
|
||||
virtual void zero(char c = '\0');// azzeramento ;
|
||||
virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock);
|
||||
virtual int write(TBaseisamfile& f) const ;
|
||||
virtual int rewrite(TBaseisamfile& f) const ;
|
||||
int force_update_bal();
|
||||
const TCausale_magazzino& causale(const char* cod = NULL) const;
|
||||
bool force_update_bal();
|
||||
TArticolo & articolo(int row) const { return cached_article(body()[row].get(RMOVMAG_CODART));}
|
||||
TArticolo_giacenza & articolo_giacenza(int row) const { return cached_article_balances(body()[row].get(RMOVMAG_CODART));}
|
||||
TCausale_magazzino& causale(int row) const;
|
||||
|
||||
// @member: effettua l'aggiornamento dei saldi di una giacenza
|
||||
int update_balances(TRectype& magrec, int numrig, int sign);
|
||||
void update_balances(TRectype& magrec, int numrig, bool plus = true);
|
||||
void update_balances_clifo(TRectype& cliforec, int numrig, bool plus = true);
|
||||
|
||||
//
|
||||
int codice_esercizio(const TDate &d);
|
||||
@ -548,7 +590,7 @@ public:
|
||||
|
||||
};
|
||||
|
||||
bool rebuild_balances(const TString& annoes,
|
||||
bool rebuild_balances(int annoes,
|
||||
const TTipo_valorizz tipo=valorizz_costmediopond,
|
||||
const char* catven=NULL,
|
||||
const char* codlis=NULL);
|
||||
@ -690,7 +732,7 @@ public:
|
||||
void set_last_print(const TDate d) { put("D3",d); }
|
||||
|
||||
bool write(bool re) const ;
|
||||
bool rewrite() const {return write(TRUE);}
|
||||
bool rewrite() const {return write(true);}
|
||||
int lock();
|
||||
int unlock();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user