diff --git a/lv/f164.trr b/lv/f164.trr index 7e0193d71..16bfc8274 100755 --- a/lv/f164.trr +++ b/lv/f164.trr @@ -16,8 +16,5 @@ UTULAGG|1|16|0|Utente che ha fatto l'ultimo aggiornamento DTULAGG|5|8|0|Data dell'ultimo aggiornamento ORULAGG|10|6|Ora dell'ultimo aggiornamento NOTE|11|10|0|Note -3 -CODCF+CODCONT+CODITI+GGCONS| -GGCONS+CODITI+CODCF+CONCONT| -GGCONS+CODCF+CONDCON+CODITI|X - +1 +CODCF+CODCONT+GGCONS+CODITI| diff --git a/lv/f165.trr b/lv/f165.trr index 56dc64db7..eb8f1c88e 100755 --- a/lv/f165.trr +++ b/lv/f165.trr @@ -1,7 +1,7 @@ 165 16 CODCF|3|6|0|Codice Cliente -CODCONT|6|8|0|Codice Contratto +CODCONT|3|6|0|Codice Contratto CODPER|3|6|0|Codice periodo di sospensione DATAINI|5|8|0|Data inizio periodo di sospensione DATAFIN|5|8|0|Data fine periodo di sospensione diff --git a/lv/f167.trr b/lv/f167.trr index f87070caa..12eec2e23 100755 --- a/lv/f167.trr +++ b/lv/f167.trr @@ -1,20 +1,29 @@ 167 -16 -CODPLAN|3|6|0|Codice planning -CODRIGA|2|5|0|Codice ria -MODPASS|1|1|0|Modalità di passaggio onsegna itiro ntrambi +23 +CODPLAN|3|8|0|Codice planning +CODRIGA|2|5|0|Codice riga DTCONS|5|8|0|Data di consegna -CODCONT|3|6|0|Codice contratto +CODITI|2|3|0|Codice itinerario +ORDFER|2|2|0|Ordine di fermata CODCF|3|6|0|Codice del cliente +CODCONT|3|6|0|Codice contratto +GGCONS|2|1|0|Giorno consegna +MODPASS|1|1|0|Modalità di passaggio onsegna itiro ntrambi +CODAUT|1|2|0|Autista +CODMEZ|1|2|0|Mezzo PROVV|1|1|0|

rovvisorio o efinitivo ANNO|2|4|0|Anno documento CODNUM|1|4|0|Numerazione documento NDOC|3|7|0|Numero documento CODPLANOR|1|10|0| -ORDFER|2|2|0|Ordine di fermata FREQ|1|2|0|Frequenaza di consegna CONSSTD|8|1|0|Flag che indica se una consegna è standard o speciale -CODPERSOSP|2|2|0|Periodo di sospensione -CODPERSOSPVAR|2|2|0|Periodo di sospensionevariato -1 -IDPLAN+IDRIGA| +PERSOSP|2|2|0|Periodo di sospensione +PERSOSPVAR|2|2|0|Periodo di sospensionevariato +UTULAGG|1|16|0|Utente che aggiornato per ultimo il planning +DTULAGG|5|8|0|Data ultimo aggionamento del planning +ORULAGG|10|6|0|Ora ultimo aggiornamento del planning +3 +CODPLAN+CODRIGA| +DTCONS+CODITI+ORDFER+CODRIGA| +CODCF+CODITI+DTCONS| diff --git a/lv/lv2.cpp b/lv/lv2.cpp index c0220c786..9d213eecc 100755 --- a/lv/lv2.cpp +++ b/lv/lv2.cpp @@ -7,8 +7,7 @@ int main(int argc, char** argv) const int r = (argc > 1) ? argv[1][1] - '0' : 0; switch (r) { - case 0: lv2100(argc, argv); break; //generazione automatica del planning - default: lv2100(argc, argv); break; + default: lv2100(argc, argv); break; //generazione automatica del planning } return 0; } \ No newline at end of file diff --git a/lv/lv2100.cpp b/lv/lv2100.cpp index dba4bb949..eb9abffbf 100755 --- a/lv/lv2100.cpp +++ b/lv/lv2100.cpp @@ -1,10 +1,14 @@ #include #include -#include +#include +#include +#include -#include "../lv/lvconsplan.h" -#include "../lv/lvrconsplan.h" -#include "../lv/lvpasplan.h" +#include "lvlib.h" + +#include "lvcondv.h" +#include "lvrconsplan.h" +#include "lvpasplan.h" #include "lv2.h" #include "lv2100a.h" @@ -22,7 +26,25 @@ public: bool TGenera_planning_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { - return true; + switch (o.dlg()) + { + case F_CODCF: + if (e == fe_close) + { + if (!field(F_CODCF).empty() && !field(F_CODITI).empty()) + return error_box(TR("Non è possibile specificare sia itinerario che cliente")); + } + break; + case F_CODITI: + if (e == fe_close) + { + if (!field(F_CODCF).empty() && !field(F_CODITI).empty()) + return error_box(TR("Non è possibile specificare sia itinerario che cliente")); + } + break; + default: break; + } + return true; } /* ///////////////////////////////////////////////////////////// @@ -49,13 +71,21 @@ TGenera_planning_recordset::TEsporta_ps0713_recordset() class TGenera_planning_app : public TSkeleton_application { - TGenera_planning_mask* _msk; + TGenera_planning_mask* _msk; + TAssoc_array _codriga; protected: virtual bool create(); virtual bool destroy(); bool elimina_planning(const TDate& dadata, const TDate& adata) const; - bool genera_codplan(long& key) const; + bool elimina_planning_itinerario(const TDate& dadata, const TDate& adata, const long& coditi) const; + bool elimina_planning_cliente(const TDate& dadata, const TDate& adata, const long& codcf) const; + bool kill_planning (TISAM_recordset& selrighe) const; + int prossimo_codriga(const TDate& data); + TDate cerca_ultima_consegna(long codcf, long coditi, const TDate& data) const; + int conta_consegne_mese(long codcf, long coditi, const TDate& adata) const; + void arrotonda_al_giorno(TDate& data, const int ggcons) const; + void elabora_passaggio(const TDate& dadata, const TDate& adata, const TISAM_recordset& pplan); public: bool transfer(); @@ -75,68 +105,310 @@ bool TGenera_planning_app::destroy() return TApplication::destroy(); } -//funzione che controlla se il planning per una certa data esiste già -/*bool TGenera_planning_app::elimina_planning(const TDate& dadata, const TDate& adata) const +//funzione estrae dalla tabella dei planning tutte le righe comprese tra le due date indicate +bool TGenera_planning_app::elimina_planning(const TDate& dadata, const TDate& adata) const { - long codplan = 0; + //creo il recordset + TISAM_recordset selrighe("USE LVRCONSPLAN KEY 2\nFROM DTCONS=#DADATA\nTO DTCONS=#ADATA"); + //setto le variabili + selrighe.set_var("#DADATA",dadata); + selrighe.set_var("#ADATA",adata); - TRelation tplan(LF_LVCONSPLAN); //instanzio una relazione sul file LF_LVCONSPLAN - TRelation rplan(LF_LVRCONSPLAN); //instanzio una relazione sul file LF_LVRCONSPLAN + //richiamo la funzione che effettivamente fa la cancellazione delle righe interessate + kill_planning(selrighe); - for (TDate tmp = dadata; tmp <= adata; ++tmp) + return true; +} + +//funzione estrae dalla tabella dei planning tutte le righe comprese tra le due date indicate... +//...relative ad un itinerario specifico +bool TGenera_planning_app::elimina_planning_itinerario(const TDate& dadata, const TDate& adata, const long& coditi) const +{ + //creo il recordset + TISAM_recordset selrighe("USE LVRCONSPLAN KEY 2\nSELECT (CODITI=#CODITI)\nFROM DTCONS=#DADATA\nTO DTCONS=#ADATA"); + //setto le variabili + selrighe.set_var("#CODITI",coditi); + selrighe.set_var("#DADATA",dadata); + selrighe.set_var("#ADATA",adata); + + //richiamo la funzione che effettivamente fa la cancellazione delle righe interessate + kill_planning(selrighe); + + return true; +} + +//funzione estrae dalla tabella dei planning tutte le righe comprese tra le due date indicate... +//...relative ad un cliente specifico +bool TGenera_planning_app::elimina_planning_cliente(const TDate& dadata, const TDate& adata, const long& codcf) const +{ + //creo il recordset + TISAM_recordset selrighe("USE LVRCONSPLAN KEY 2\nSELECT (CODCF=#CODCF)\nFROM DTCONS=#DADATA\nTO DTCONS=#ADATA"); + //setto le variabili + selrighe.set_var("#CODCF",codcf); + selrighe.set_var("#DADATA",dadata); + selrighe.set_var("#ADATA",adata); + + //richiamo la funzione che effettivamente fa la cancellazione delle righe interessate + kill_planning(selrighe); + + return true; +} + +//funzione che elimina un recordset generato precedentemente +bool TGenera_planning_app::kill_planning (TISAM_recordset& selrighe) const +{ + TSystemisamfile rplan(LF_LVRCONSPLAN); //instanzio una relazione sul file LF_LVRCONSPLAN + if (rplan.open(_excllock) == NOERR) { - TRectype& rec = tplan.curr(); //cerco se esiste la testata del planning - rec.zero(); - rec.put(LVCONSPLAN_DTCONS,data); + TRectype& rec = rplan.curr(); - TCursor cur(&tplan,"",2,&rec,&rec); - const TRecnotype items = cur.items(); - if (items > 0) + TProgind pi(selrighe.items(), TR("Eliminazione planning precedenti in corso..."), true, true); + + for (bool ok = selrighe.move_last(); ok; ok = selrighe.move_prev()) + { + if (!pi.addstatus(1)) + break; + + rec.zero(); + rec.put(LVRCONSPLAN_CODPLAN,selrighe.get(LVRCONSPLAN_CODPLAN).as_int()); + rec.put(LVRCONSPLAN_CODRIGA,selrighe.get(LVRCONSPLAN_CODRIGA).as_int()); + rplan.remove(); + } + rplan.close(); + rplan.pack(); + } + else + return error_box(TR("Impossibile eliminare i planning richiesti")); + return true; +} + +//funzione che restituisce il prossimo codriga per il planning della data interessata +int TGenera_planning_app::prossimo_codriga(const TDate& data) +{ + TString8 strcodplan; + strcodplan << data.date2ansi(); + real* ptriga = (real*)_codriga.objptr(strcodplan); + if (ptriga == NULL) + { + //per ora memorizzo zero + ptriga = new real; + _codriga.add(strcodplan,ptriga); + + //se esiste almeno una riga, memorizzo il codriga dell'ultima + TISAM_recordset rplan("USE LVRCONSPLAN KEY 1\nFROM CODPLAN=#CODPLAN\nTO CODPLAN=#CODPLAN"); + rplan.set_var("#CODPLAN",TVariant(strcodplan)); + if (rplan.move_last()) + *ptriga = rplan.get(LVRCONSPLAN_CODRIGA).as_real(); + } + *ptriga++; //incremento il codriga interessato + + return ptriga->integer(); +} + +TDate TGenera_planning_app::cerca_ultima_consegna(long codcf, long coditi, const TDate& data) const +{ + //instanzia un recordset di LVRCONSPLAN prendendo tutte le consegne fatte per un cliente su un certo... + //...itinerario prima di una certa data + TISAM_recordset rplan("USE LVRCONSPLAN KEY 3\nFROM CODCF=#CODCF CODITI=#CODITI\nTO CODCF=#CODCF CODITI=#CODITI DTCONS=#DATA"); + rplan.set_var("#CODCF",codcf); + rplan.set_var("#CODITI",coditi); + rplan.set_var("#DATA",data); + if (rplan.move_last()) + return rplan.get(LVRCONSPLAN_DTCONS).as_date(); // data dell'ultima consegna fatta + return data; +} + +int TGenera_planning_app::conta_consegne_mese(long codcf, long coditi, const TDate& adata) const +{ + TDate dadata = adata; + dadata.set_day(1); + //instanzia un recordset di LVRCONSPLAN prendendo tutte le consegne fatte per un cliente su un certo... + //...itinerario prima di una certa data + TISAM_recordset rplan("USE LVRCONSPLAN KEY 3\nFROM CODCF=#CODCF CODITI=#CODITI DTCONS=#DADATA\nTO CODCF=#CODCF CODITI=#CODITI DTCONS=#ADATA"); + rplan.set_var("#CODCF",codcf); + rplan.set_var("#CODITI",coditi); + rplan.set_var("#DADATA",dadata); + rplan.set_var("#ADATA",adata); + + return rplan.items(); +} + +// Arrotonda per eccesso la data al giorno della settimana desiderato +// ggcons appartiene a [1..7] +void TGenera_planning_app::arrotonda_al_giorno(TDate& data, const int ggcons) const +{ + int delta = ggcons - data.wday(); + if (delta != 0) + { + if (delta < 0) + delta += 7; + data += delta; + } +} + +void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& adata, const TISAM_recordset& pplan) +{ + //dati recuperati dalla tabella dei passaggi per contratto: + const long codcf = pplan.get(LVPASPLAN_CODCF).as_int(); //codice cliente + const long coditi = pplan.get(LVPASPLAN_CODITI).as_int(); //codice itinerario + const long codcont = pplan.get(LVPASPLAN_CODCONT).as_int(); //codice contratto + const bool flstag = pplan.get(LVPASPLAN_FLSTAG).as_bool(); //flag stagionalità + const int ggcons = pplan.get(LVPASPLAN_GGCONS).as_int(); //giorno di consegna (1 = lunedì -> 7 = domenica) + const int ordfer = pplan.get(LVPASPLAN_ORDFERM).as_int(); //ordine di fermata + const TString4 freq = pplan.get(LVPASPLAN_FREQ).as_string(); //codice della tabella di frequenze di consegna + char modpass = pplan.get(LVPASPLAN_MODPASS).as_string()[0]; //modalità di passaggio + + //cache sulle testate dei contratti, selezionati per CODCF e CODCONT + TToken_string keycont; + keycont.add(codcf); + keycont.add(codcont); + const TRectype& contratto = cache().get(LF_LVCONDV,keycont); + //dati recuperati dalle testate dei contratti: + const TDate dadatacont = contratto.get_date(LVCONDV_DATAIN); //data di inizio validità del contratto + const TDate adatacont = contratto.get_date(LVCONDV_DATASC); //data di fine validità del contratto + const TDate dastag = contratto.get_date(LVCONDV_DTSTAGIN); //data di inizio del periodo di stagionalità + const TDate astag = contratto.get_date(LVCONDV_DTSTAGSC); //data di fine del periodo di stagionalità + + // Controllo se il contratto e' valido nel periodo interessato + if (dadatacont > adata || (adatacont.ok() && adatacont < dadata)) + return; // Inutile proseguire + + //cache sulla tabella frequenze consegne + TString8 keycoditi; + keycoditi << coditi; + const TRectype& iti = cache().get("&ITI",keycoditi); + //dati recuperati dalla tabella frequenze consegne: + const TString8 codaut = iti.get("S1"); //codice autista + const TString8 codmez = iti.get("S2"); //codice mezzo + + //recordset sulla tabella dei periodi di sospensione, limitati per CODCF e CODCONT + TISAM_recordset persosp("USE LVPERISOSP\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT"); + persosp.set_var("#CODCF",codcf); + persosp.set_var("#CODCONT",codcont); + + //cache sulla tabella frequenze consegne + const TRectype& frq = cache().get("&FRQ",freq); + //dati recuperati dalla tabella frequenze consegne: + const int maxcons = frq.get_int("I2"); //numero massimo di consegne per mese + + TDate primogiorno = dadata; //primogiorno: primo giorno del periodo selezionato + if (frq.get_bool("B0")) //se devo usare "USA ULTIMA CONSEGNA", primogiorno diventa la data dell'ultima consegna + primogiorno = cerca_ultima_consegna(codcf,coditi,dadata); + + const int ritardo = frq.get_int("I0"); //ritardo di consegna rispetto alla data di inizio calcolo + if (ritardo > 0) //evita anticipi senza senso + primogiorno += ritardo; + + long frequenza = frq.get_long("I1"); //frequenza di consegna + if (frequenza <= 0 || frequenza > 28) //forza una frequenza valida + frequenza = 7; + + TLocalisamfile file_rplan(LF_LVRCONSPLAN); + TRectype& rplan = file_rplan.curr(); + + for (TDate d = primogiorno; d <= adata; d += frequenza) + { + arrotonda_al_giorno(d, ggcons); + if (d < dadata) // Puo' succedere se si utilizza la data di ultima consegna + continue; + if (d > adata) // Inutile generare date fuori range + break; + + //controlla che d sia o meno in un periodo di validità contratto... + if (d < dadatacont) + continue; // Questa data non e' ancora in contratto: provo la prossima + if (adatacont.ok() && d > adatacont) + break; // Questa data e' oltre il contratto: inutile proseguire + + //...e/o in un periodo di stagionalità (se necessario)... + ////la riga va elaborata se il flag di stagionalità è TRUE + ////e se se la data del periodo di stagionalità è coerente + ////e la data in considerazione è compresa tra le date della stagionalità + if (flstag && (!astag.ok() || d < dastag || d > astag)) + continue; + + //...e/o in un periodo di sospensione... + //...per cui c'è da verificare se è da saltare completamente o... + //...se c'è da elaborare ugualmente, ma con una modalità di passaggio differente + TString4 codpersosp; + for (bool ok = persosp.move_first(); ok; ok = persosp.move_next()) { - cur.freeze(); - codplan = rec.get_long(LVCONSPLAN_CODPLAN); + const TDate inisosp = persosp.get("DATAINI").as_date(); + const TDate finsosp = persosp.get("DATAFIN").as_date(); + if (d >= inisosp && d <= finsosp) + { + codpersosp = persosp.get("CODPER").as_string(); + const TString& tpsosp = persosp.get("TPSOSP").as_string(); + const TRectype& sosp = cache().get("&TSP",tpsosp); + modpass = sosp.get_char("S1"); + break; + } } - return found; //restituisco il codice del planning se esite già, altrimento rstituisco zero -}*/ + //se la modalità di passaggio risulta vuota la riga non va elaborata + if (modpass <= ' ') + continue; -//funzione che genera il codplan (prende l'ultimo esistente e lo incrementa di uno) -bool TGenera_planning_app::genera_codplan(long& key) const -{ - long num = 1; - TLocalisamfile tplan(LF_LVCONSPLAN); - if (tplan.last() == NOERR) - num += tplan.get_long(LVCONSPLAN_CODPLAN); - key = num; - return true; + //se ho già raggiunto il numero massimo di consegne per mese... + //...la riga, anche se supera tutti i controlli, non va elaborata + if (maxcons > 0 && conta_consegne_mese(codcf,coditi,d) >= maxcons) + continue; + + //scrivi la chiave + const long codplan = d.date2ansi(); //setta il codplan + rplan.zero(); + rplan.put(LVRCONSPLAN_CODPLAN, codplan); + rplan.put(LVRCONSPLAN_CODRIGA, prossimo_codriga(d)); + + rplan.put(LVRCONSPLAN_DTCONS,d); //setta la data di consegna + rplan.put(LVRCONSPLAN_CODITI,coditi); //setta il codice itinerario + rplan.put(LVRCONSPLAN_ORDFER,ordfer); //setta l'ordine di fermata + rplan.put(LVRCONSPLAN_CODCF,codcf); //setta il codice cliente + rplan.put(LVRCONSPLAN_CODCONT,codcont); //setta il codice contratto + rplan.put(LVRCONSPLAN_GGCONS,ggcons); //setta il giorno di consegna + rplan.put(LVRCONSPLAN_MODPASS,modpass); //setta la modalità di passaggio + rplan.put(LVRCONSPLAN_CODAUT,codaut); //setta il codice autista + rplan.put(LVRCONSPLAN_CODMEZ,codmez); //setta il codice mezzo + rplan.put(LVRCONSPLAN_FREQ,freq); //setta la frequenza di consegna + rplan.put(LVRCONSPLAN_CONSSTD,true); //setta il flag di "consegna standard" + rplan.put(LVRCONSPLAN_PERSOSP,codpersosp); //setta il periodo di sospensione + lv_set_update_info(rplan); //setta utente, data e ora dell'ultimo aggiornamento + + file_rplan.write(); + } } bool TGenera_planning_app::transfer() { const TDate dadata = _msk->get(F_DADATA); const TDate adata = _msk->get(F_ADATA); - const TString8 codcf = _msk->get(F_CODCF); - const TString8 coditi = _msk->get(F_CODITI); - TLocalisamfile tplan(LF_LVCONSPLAN); - TLocalisamfile rplan(LF_LVRCONSPLAN); - TLocalisamfile pplan(LF_LVPASPLAN); - - for (TDate tmp = dadata; tmp <= adata; ++tmp) + TString query = "USE LVPASPLAN"; + if (_msk->get(F_CODCF).full()) { - //long codplan = cerca_planning(dadata,adata); //controllo se un planning per una certa data esiste già + const long codcf = _msk->get_long(F_CODCF); + elimina_planning_cliente(dadata,adata,_msk->get_long(F_CODCF)); + query << " SELECT CODCF=" << codcf; + } + else if (_msk->get(F_CODITI).full()) + { + const long coditi = _msk->get_long(F_CODITI); + elimina_planning_itinerario(dadata,adata,coditi); + query << " SELECT CODITI=" << coditi; + } + else + elimina_planning(dadata,adata); - /*if (!codplan) - {*/ - long key; - int giorno = tmp.wday(); - genera_codplan(key); - long key1 = key; - - - //} + _codriga.destroy(); //azzera il numero delle righe del planning già generati + TISAM_recordset pplan(query); + TProgind pi(pplan.items(), TR("Generazione planning in corso..."), true, true); + for (bool ok = pplan.move_first(); ok; ok = pplan.move_next()) + { + if (!pi.addstatus(1)) + break; + elabora_passaggio(dadata, adata, pplan); } return true; @@ -150,6 +422,6 @@ void TGenera_planning_app::main_loop() int lv2100(int argc, char* argv[]) { TGenera_planning_app app; - app.run(argc, argv, TR("Generazione automatica planning")); + app.run(argc, argv, TR("Generazione planning")); return 0; } diff --git a/lv/lvcondv.h b/lv/lvcondv.h new file mode 100755 index 000000000..9f42f24d4 --- /dev/null +++ b/lv/lvcondv.h @@ -0,0 +1,46 @@ +#ifndef __LVCONDV_H +#define __LVCONDV_H + +#define LVCONDV_CODCONT "CODCONT" +#define LVCONDV_STATUS "STATUS" +#define LVCONDV_CODCF "CODCF" +#define LVCONDV_DATAIN "DATAIN" +#define LVCONDV_DATASC "DATASC" +#define LVCONDV_DTSTAGIN "DTSTAGIN" +#define LVCONDV_DTSTAGSC "DTSTAGSC" +#define LVCONDV_FATTSOSP "FATTSOSP" +#define LVCONDV_STRCONS "STRCONS" +#define LVCONDV_TIPOLIS "TIPOLIS" +#define LVCONDV_STPRZBOL "STPRZBOL" +#define LVCONDV_CONTSPOR "CONTSPOR" +#define LVCONDV_TIPODOC "TIPODOC" +#define LVCONDV_PERFATT "PERFATT" +#define LVCONDV_INPRPER "INPRPER" +#define LVCONDV_FATTPARZ "FATTPARZ" +#define LVCONDV_DOTTMPPRZD "DOTTMPPRZD" +#define LVCONDV_FORFNOCONS "FORFNOCONS" +#define LVCONDV_ADDCAPROT "ADDCAPROT" +#define LVCONDV_FORFGLOB "FORFGLOB" +#define LVCONDV_TIPOCAN "TIPOCAN" +#define LVCONDV_TIPOIMB "TIPOIMB" +#define LVCONDV_SSCONS "SSCONS" +#define LVCONDV_TIPOSTPRZ "TIPOSTPRZ" +#define LVCONDV_DTLASTFATT "DTLASTFATT" +#define LVCONDV_ATTFATTNODT "ATTFATTNODT" +#define LVCONDV_RIFBOLLEFATT "RIFBOLLEFATT" +#define LVCONDV_STDICITURA "STDICITURA" +#define LVCONDV_PROFORME "PROFORME" +#define LVCONDV_CICLAGGIO "CICLAGGIO" +#define LVCONDV_STETIMATI "STETIMATI" +#define LVCONDV_STETITC "STETITC" +#define LVCONDV_STDDTPTC "STDDTPTC" +#define LVCONDV_IMPMINFATT "IMPMINFATT" +#define LVCONDV_PERCNOCONT "PERCNOCONT" +#define LVCONDV_PERCTOLLPES "PERCTOLLPES" +#define LVCONDV_NUMUT "NUMUT" +#define LVCONDV_NUMETI "MUNETI" +#define LVCONDV_RITAUTDTTMP "RITAUTDTTMP" +#define LVCONDV_DTFIXDDT "DTFIXDDT" +#define LVCONDV_COMMENTI "COMMENTI" + +#endif \ No newline at end of file diff --git a/lv/lvpasplan.h b/lv/lvpasplan.h index d19049be9..ab64af600 100755 --- a/lv/lvpasplan.h +++ b/lv/lvpasplan.h @@ -16,5 +16,6 @@ #define LVPASPLAN_UTULAGG "UTULAGG" #define LVPASPLAN_DTULAGG "DTULAGG" #define LVPASPLAN_ORULAGG "ORULAGG" +#define LVPASPLAN_NOTE "NOTE" #endif \ No newline at end of file diff --git a/lv/lvrconsplan.h b/lv/lvrconsplan.h index f41e1d81c..07fad442c 100755 --- a/lv/lvrconsplan.h +++ b/lv/lvrconsplan.h @@ -3,19 +3,26 @@ #define LVRCONSPLAN_CODPLAN "CODPLAN" #define LVRCONSPLAN_CODRIGA "CODRIGA" -#define LVRCONSPLAN_MODPASS "MODPASS" #define LVRCONSPLAN_DTCONS "DTCONS" -#define LVRCONSPLAN_IDCONT "IDCONT" -#define LVRCONSPLAN_CODCF "CODCF" +#define LVRCONSPLAN_CODITI "CODITI" +#define LVRCONSPLAN_ORDFER "ORDFER" +#define LVRCONSPLAN_CODCF "CODCF" +#define LVRCONSPLAN_CODCONT "CODCONT" +#define LVRCONSPLAN_GGCONS "GGCONS" +#define LVRCONSPLAN_MODPASS "MODPASS" +#define LVRCONSPLAN_CODAUT "CODAUT" +#define LVRCONSPLAN_CODMEZ "CODMEZ" #define LVRCONSPLAN_PROVV "PROVV" #define LVRCONSPLAN_ANNO "ANNO" #define LVRCONSPLAN_CODNUM "CODNUM" #define LVRCONSPLAN_NDOC "NDOC" #define LVRCONSPLAN_CODPLANOR "CODPLANOR" -#define LVRCONSPLAN_ORDFER "ORDFER" #define LVRCONSPLAN_FREQ "FREQ" #define LVRCONSPLAN_CONSSTD "CONSSTD" -#define LVRCONSPLAN_CODPERSOSP "CODPERSOSP" -#define LVRCONSPLAN_CODPERSOSPVAR "CODPERSOSPVAR" +#define LVRCONSPLAN_PERSOSP "CODPERSOSP" +#define LVRCONSPLAN_PERSOSPVAR "CODPERSOSPVAR" +#define LVRCONSPLAN_UTULAGG "UTULAGG" +#define LVRCONSPLAN_DTULAGG "DTULAGG" +#define LVRCONSPLAN_ORULAGG "ORULAGG" #endif