From fd378c9686ee5b2dd115cef3d8d6e33964f789bd Mon Sep 17 00:00:00 2001 From: luca <luca@c028cbd2-c16b-5b4b-a496-9718f37d4682> Date: Fri, 29 Aug 2008 08:51:51 +0000 Subject: [PATCH] Patch level :10.0 lavanderina Files correlati : Ricompilazione Demo : [ ] Commento :allineamento lavori al 29 agosto git-svn-id: svn://10.65.10.50/trunk@17133 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/f166.dir | 2 +- lv/f166.trr | 65 +++++-- lv/lv0600.cpp | 2 +- lv/lv2.cpp | 2 + lv/lv2.h | 1 + lv/lv2100.cpp | 19 +-- lv/lv2100a.h | 3 - lv/lv2100a.uml | 37 +--- lv/lv2200.cpp | 441 ++++++++++++++++++++++++++++++++++++++++++++++++ lv/lv2200a.h | 31 ++++ lv/lv2200a.uml | 350 ++++++++++++++++++++++++++++++++++++++ lv/lvconsplan.h | 14 -- lv/lvtbiti.uml | 2 +- 13 files changed, 890 insertions(+), 79 deletions(-) create mode 100755 lv/lv2200.cpp create mode 100755 lv/lv2200a.h create mode 100755 lv/lv2200a.uml delete mode 100755 lv/lvconsplan.h diff --git a/lv/f166.dir b/lv/f166.dir index 04435c3d9..9f6c68483 100755 --- a/lv/f166.dir +++ b/lv/f166.dir @@ -1,3 +1,3 @@ 166 0 -$lvconsplan|0|0|57|0|Planning consegne||| +$lvclifogiac|0|0|702|0|Giacenze per cliente||| diff --git a/lv/f166.trr b/lv/f166.trr index 7b3ffa619..cc80f3b50 100755 --- a/lv/f166.trr +++ b/lv/f166.trr @@ -1,14 +1,55 @@ 166 -9 -CODPLAN|3|6|0|Codice del planning -DTCONS|5|8|0|Data consegna -GGCONS|2|1|0|Giorno consegna -CODAUT|1|2|0|Autista -CODMEZ|1|2|0|Mezzo -CODITI|2|3|0|Codice itinerario -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 +50 +TIPOCF|1|1|0|Tipo <C>liente <F>ornitore +CODCF|3|6|0|Codice Cliente Fornitore +INDSPED|2|3|0|Codice indirizzo di spedizione +CODMAG|1|5|0|Codice magazzino e deposito +CODART|1|20|0|Codice articolo +LIVELLO|1|15|0|Livello di magazzino +NRIGA|2|3|0|-numero riga per sheet anagrafica- +ANNOES|1|4|0|Codice esercizio +DATARIF|5|8|0|Data di riferimento +UBICAZ|1|12|0|Codice ubicazione +RIM|4|15|5|Rimanenze iniziali +VALRIM|4|18|3|Valore rimanenze iniziali +ACQ|4|15|5|Acquistato +VALACQ|4|18|3|Valore acquistato +ENT|4|15|5|Entrato +VALENT|4|18|3|Valore entrato +VEN|4|15|5|Venduto +VALVEN|4|18|3|Valore venduto +USC|4|15|5|Uscito +VALUSC|4|18|3|Valore uscito +GIAC|4|15|5|Giacenza +ORDF|4|15|5|Ordinato fornitori +VALORDF|4|18|3|Valore ordinato fornitori +ORDC|4|15|5|Ordinato clienti +VALORDC|4|18|3|Valore ordinato clienti +INCL|4|15|5|In conto lavorazione +ACL|4|15|5|A conto lavorazione +PRODCOMP|4|15|5|Componenti in produzione +PRODFIN|4|15|5|Assemblati in produzione +NLABEL|4|10|0|Numero etichette da stampare +NDIST|4|15|5|Distinte da scaricare +SCARTI|4|15|5|Scarti +VALSCARTI|4|15|5|Valore scarti +LIVRIOR|4|15|3|Livello di riordino +LOTTORIOR|4|15|3|Lotto minimo di riordino +LOTTOIRIOR|4|15|3|Lotto incrementale di riordino +GIORNIRIOR|4|5|1|Numero di giorni di riordino +SCORTAMIN|4|15|5|Scorta minima +USER1|4|15|5|campo definito dall'utente +USERVAL1|4|18|3|valore +USER2|4|15|5|campo definito dall'utente +USERVAL2|4|18|3|valore +USER3|4|15|5|campo definito dall'utente +USERVAL3|4|18|3|valore +USER4|4|15|5|campo definito dall'utente +USERVAL4|4|18|3|valore +USER5|4|15|5|campo definito dall'utente +USERVAL5|4|18|3|valore +USER6|4|15|5|campo definito dall'utente +USERVAL6|4|18|3|valore 2 -CODPLAN| -DTCONS+CODPLAN|X \ No newline at end of file +TIPOCF+CODCF+INDSPED+ANNOES+CODART+NRIGA| +TIPOCF+CODCF+INDSPED+ANNOES+CODMAG+CODART+LIVELLO|X diff --git a/lv/lv0600.cpp b/lv/lv0600.cpp index e00ef14a1..89486a381 100755 --- a/lv/lv0600.cpp +++ b/lv/lv0600.cpp @@ -85,7 +85,7 @@ int TPeriodi_sosp::controlli(const TMask& mask) bool TPeriodi_sosp::user_create() { - _rel = new TRelation(LF_LVTIPISOSP); + _rel = new TRelation(LF_LVPERISOSP); _mask = new TPeriodi_sosp_mask; return true; } diff --git a/lv/lv2.cpp b/lv/lv2.cpp index 9d213eecc..37f4cacd2 100755 --- a/lv/lv2.cpp +++ b/lv/lv2.cpp @@ -7,6 +7,8 @@ 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 + case 1: lv2200(argc, argv); break; //manipolazione e stampa del planning default: lv2100(argc, argv); break; //generazione automatica del planning } return 0; diff --git a/lv/lv2.h b/lv/lv2.h index 8d818faa0..0f93b1470 100755 --- a/lv/lv2.h +++ b/lv/lv2.h @@ -2,5 +2,6 @@ #define __LV2_H int lv2100(int argc, char* argv[]); +int lv2200(int argc, char* argv[]); #endif // __LV2_H \ No newline at end of file diff --git a/lv/lv2100.cpp b/lv/lv2100.cpp index eb9abffbf..04363bc37 100755 --- a/lv/lv2100.cpp +++ b/lv/lv2100.cpp @@ -46,23 +46,6 @@ bool TGenera_planning_mask::on_field_event(TOperable_field& o, TField_event e, l } return true; } -/* -///////////////////////////////////////////////////////////// -// TGenera_planning recordset -///////////////////////////////////////////////////////////// - -class TGenera_planning_recordset : public TCSV_recordset -{ -public: - TEsporta_ps0713_recordset(); -}; - - -TGenera_planning_recordset::TEsporta_ps0713_recordset() - : TCSV_recordset("CSV(\"\t\")") -{ -} -*/ /////////////////////////////////////////////////////////// // TGenera_planning applicazione @@ -273,7 +256,7 @@ void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& a if (dadatacont > adata || (adatacont.ok() && adatacont < dadata)) return; // Inutile proseguire - //cache sulla tabella frequenze consegne + //cache sulla tabella frequenze consegne TString8 keycoditi; keycoditi << coditi; const TRectype& iti = cache().get("&ITI",keycoditi); diff --git a/lv/lv2100a.h b/lv/lv2100a.h index ee8411922..e86d4ee6e 100755 --- a/lv/lv2100a.h +++ b/lv/lv2100a.h @@ -1,8 +1,5 @@ // generazione automatica planning // definizione campi per maschera lv2100a - -#define F_CODDITTA 101 -#define F_RAGSOC 102 #define F_DADATA 103 #define F_ADATA 104 #define F_CODITI 105 diff --git a/lv/lv2100a.uml b/lv/lv2100a.uml index fa4ad69a7..c7eeea61f 100755 --- a/lv/lv2100a.uml +++ b/lv/lv2100a.uml @@ -4,51 +4,30 @@ TOOLBAR "" 0 0 0 2 #include <elabar.h> ENDPAGE -PAGE "Generazione planning" -1 -1 78 20 - -GROUPBOX DLG_NULL 76 3 -BEGIN - PROMPT 1 1 "@bDitta corrente" -END - -NUMBER F_CODDITTA 5 -BEGIN - PROMPT 2 2 "Codice " - FLAGS "FD" - USE LF_NDITTE - INPUT CODDITTA F_CODDITTA - OUTPUT F_RAGSOC RAGSOC - CHECKTYPE REQUIRED -END - -STRING F_RAGSOC 50 -BEGIN - PROMPT 23 2 "" - FLAGS "D" -END +PAGE "Generazione planning" -1 -1 76 20 GROUPBOX DLG_NULL 76 5 BEGIN - PROMPT 1 4 "@bDati per la generazione del planning" + PROMPT 1 1 "@bDati per la generazione del planning" END DATE F_DADATA BEGIN - PROMPT 2 5 "Genera il planning dal " + PROMPT 2 2 "Genera il planning dal " FIELD DADATA CHECKTYPE REQUIRED END DATE F_ADATA BEGIN - PROMPT 45 5 "al " + PROMPT 45 2 "al " FIELD ADATA CHECKTYPE REQUIRED END STRING F_CODITI 3 BEGIN - PROMPT 2 6 "Itinerario " + PROMPT 2 3 "Itinerario " FLAGS "UZ" USE &ITI INPUT CODTAB F_CODITI @@ -60,7 +39,7 @@ END STRING F_DESCRITI 50 BEGIN - PROMPT 23 6 "" + PROMPT 23 3 "" USE &ITI KEY 2 INPUT S0 F_DESCRITI DISPLAY "Descrizione@50" S0 @@ -70,7 +49,7 @@ END NUMBER F_CODCF 6 BEGIN - PROMPT 2 7 "Cliente " + PROMPT 2 4 "Cliente " FLAGS "U" USE LF_CLIFO KEY 1 INPUT TIPOCF "C" @@ -83,7 +62,7 @@ END STRING F_RAGSOCCLI 50 BEGIN - PROMPT 23 7 "" + PROMPT 23 4 "" USE LF_CLIFO KEY 2 INPUT TIPOCF "C" INPUT RAGSOC F_RAGSOCCLI diff --git a/lv/lv2200.cpp b/lv/lv2200.cpp new file mode 100755 index 000000000..2059fe3a8 --- /dev/null +++ b/lv/lv2200.cpp @@ -0,0 +1,441 @@ +#include <applicat.h> +#include <automask.h> +#include <progind.h> +#include <recarray.h> +#include <recset.h> +#include <relation.h> + +#include "lvlib.h" + +#include "lvrconsplan.h" +#include "lvpasplan.h" + +#include "lv2.h" +#include "lv2200a.h" + +/////////////////////////////////////////////////////////// +// TGestione_planning maschera +/////////////////////////////////////////////////////////// + +class TGestione_planning_mask : public TAutomask +{ + TToken_string _rigaoriginale; + +private: + void fill_sheet(); + bool changed(TToken_string& oldrow, TToken_string& newrow, short id); + int codice_riga(const TDate& data); + void aggiorna_plan(); + bool cancella_riga(); + void nuova_riga(); + + +public: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + TGestione_planning_mask (const char* name) : TAutomask(name) {} +}; + +//questa funzione si occupa di riempire lo sheet dinamicamente in base ai parametri che l'utente decide +void TGestione_planning_mask::fill_sheet() +{ + if (field(F_DADATA).empty() || field(F_ADATA).empty()) + return; + + TString query = "USE LVRCONSPLAN KEY 2"; + const long coditi = get_long(F_CODITI); + const long codcli = get_long(F_CODCF); + if (coditi || codcli) + { + query << " SELECT "; + if (codcli > 0) + query << "(CODCF=" << codcli << ')'; + if (coditi > 0) + { + if (codcli > 0) + query << "&&"; + query << "(CODITI=" << coditi << ')'; + } + } + query << "\n"; + query << "FROM DTCONS=" << get(F_DADATA) << "\n"; + query << "TO DTCONS=" << get(F_ADATA) << "\n"; + + TISAM_recordset plan(query); + + TProgind pi(plan.items(), TR("Elaborazione dati planning in corso..."), true, true); + + TSheet_field& sheet = sfield(F_PLAN); + TMask& sheetmask = sheet.sheet_mask(); + TRelation& rel = *plan.cursor()->relation(); //accesso al file delle righe + + sheet.destroy(); + + for (bool ok = plan.move_first(); ok; ok = plan.move_next()) + { + if (!pi.addstatus(1)) + break; + + TToken_string& row = sheet.row(-1); //crea una nuova riga dello sheet + + //scandisco nella maschera tutti i campi che hanno un field + FOR_EACH_MASK_FIELD(sheetmask,i,f) + { + const TFieldref* fr = f->field(); //leggo il valore dalla relation + if (fr != NULL) + row.add(fr->read(rel),sheet.cid2index(f->dlg())); //metto il valore letto nella posizione corretta nella TToken_string + } + sheet.check_row(sheet.items()-1); //fa fare alla maschera la decodifica dei codici e aggiorna la TToken_string + } + sheet.force_update(); +} + +//funzione che confronta due due campi di una TToken_string e restitusce true se sono diversi +bool TGestione_planning_mask::changed(TToken_string& oldrow, TToken_string& newrow, short id) +{ + const TSheet_field& sheet = sfield(F_PLAN); + const int i = sheet.cid2index(id); + const TFixed_string oldval(oldrow.get(i)); + const TFixed_string newval(newrow.get(i)); + return oldval != newval; +} + +//questa funzione trova il primo codiceriga libero per un certo codplan +int TGestione_planning_mask::codice_riga(const TDate& data) +{ + const long codplan = data.date2ansi(); + + //per ora memorizzo zero + int ptriga = 0; + + //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(codplan)); + if (rplan.move_last()) + ptriga = rplan.get(LVRCONSPLAN_CODRIGA).as_int(); + + ptriga++; //incremento il codriga interessato + + return ptriga; +} + +//questa funzione gestisce l'aggiornamanto dinamico dello sheet +void TGestione_planning_mask::aggiorna_plan() +{ + //bool che indicano se effettivamente devo fare una rewrite dei dati... + //...se ho modificato un autista e/o un mezzo, questo va modificato su tutte... + //...le righe di quel planning + bool dorewrite = false; + bool updatecar = false; + + //variabili che mi premettono di lavorare sullo sheet + TSheet_field& sheet = sfield(F_PLAN); + TToken_string rigamodificata = sheet.row(sheet.selected()); //metto in una stringa la riga che sto analizzando + + //instanzio un isam file sulla tabella dei planning + TLocalisamfile rplan(LF_LVRCONSPLAN); + + //creo il codplan + const int posdata = sheet.cid2index(F_S_DATA); + TDate data = _rigaoriginale.get(posdata); + long codplan = data.date2ansi(); + const long codplanor = codplan ; + + //creo il codriga + const int posriga = sheet.cid2index(F_S_RIGA); + int codriga = _rigaoriginale.get_int(posriga); + + //se esiste almeno una riga per quel planning, leggo il record corrispondente + if (codriga > 0) + { + rplan.zero(); + rplan.put(LVRCONSPLAN_CODPLAN,codplanor); + rplan.put(LVRCONSPLAN_CODRIGA,codriga); + rplan.read(); + } + + //se ho modificato la data di una riga esistente, o se se ho creata una nuova, allora + if (changed(_rigaoriginale,rigamodificata,F_S_DATA) || codriga <= 0) + { + //se esiste almeno una riga, elimino quella che voglio modifcare + if (codriga > 0) + rplan.remove(); + + //creo i nuovi codplan e codriga + data = rigamodificata.get(posdata); + codplan = data.date2ansi(); + codriga = codice_riga(data); + + //creo la nuova riga + rplan.zero(); + rplan.put(LVRCONSPLAN_CODPLAN,codplan); + rplan.put(LVRCONSPLAN_CODRIGA,codriga); + rplan.put(LVRCONSPLAN_CODPLANOR,codplanor); + + //scrivo la nuova riga + rplan.write(); + + //modifico anche la TToken_string cos� da evitare errori al momento della rewrite + rigamodificata.add(data,posdata); + rigamodificata.add(codriga,posriga); + + dorewrite = true; + } + + //se viene modificato un periodo di sospensione e/o una modalit� di passaggio... + //...e/o un codice itinerario su una riga, devo fare la rewrite di quella riga + //ATTENZIONE: la modifica di un itinerario implica anche la modifica di autista e mezzo... + //...mettendo quelli previsti per il nuovo itinerario + if (changed(_rigaoriginale,rigamodificata,F_S_PERSOSPVAR) || changed(_rigaoriginale,rigamodificata,F_S_MODPASS) || changed(_rigaoriginale,rigamodificata,F_S_ITI)) + dorewrite = true; + + //se viene modificato un autista e/o un mezzo devo fare la rewrite di quella riga... + //... e riaggiornare anche tutte le righe di quell'itinerario in quella data con i nuovi parametri + if (changed(_rigaoriginale,rigamodificata,F_S_CODAUT) || changed(_rigaoriginale,rigamodificata,F_S_CODMEZ)) + dorewrite = updatecar = true; + + //se devo fare una rewrite: + if (dorewrite) + { + TMask& m = sheet.sheet_mask(); + //per ogni campo della maschera che ha un field, ci scrivo dentro il nuovo valore + FOR_EACH_MASK_FIELD(m,i,f) + { + const TFieldref* rf = f->field(); + if (rf != NULL) + { + const char* val = rigamodificata.get(sheet.cid2index(f->dlg())); + rf->write(val,rplan.curr()); + } + } + rplan.curr().zero(LVRCONSPLAN_CONSSTD); + lv_set_update_info(rplan.curr()); + rplan.rewrite(); + } + + //se ho modificato autista e/o mezzo, allora: + if (updatecar) + { + //recupero dai dati modificati i nuovi valori di autista e mezzo + const int codaut = rigamodificata.get_int(sheet.cid2index(F_S_CODAUT)); + const TString8 codmez= rigamodificata.get(sheet.cid2index(F_S_CODMEZ)); + //recupero il codice itinerario su cui sto facendo la modifica + const long coditi = rigamodificata.get_long(sheet.cid2index(F_S_ITI)); + + //instanzio un recordset sui planning, filtrando sui coditi + TISAM_recordset recrplan("USE LVRCONSPLAN SELECT CODITI=#CODITI\nFROM CODPLAN=#CODPLAN\nTO CODPLAN=#CODPLAN"); + recrplan.set_var("#CODPLAN",codplan); + recrplan.set_var("#CODITI",coditi); + + TRectype& rec = recrplan.cursor()->curr(); + + for (bool ok = recrplan.move_first(); ok; ok = recrplan.move_next()) + { + //cambio autisyta e mezzo + rec.put(LVRCONSPLAN_CODAUT,codaut); + rec.put(LVRCONSPLAN_CODMEZ,codmez); + rec.zero(LVRCONSPLAN_CONSSTD); + lv_set_update_info(rec); + //faccio l'effettiva rewrite + rec.rewrite(rplan); + } + } +} + +//questa funzione elimina una riga dal planning +bool TGestione_planning_mask::cancella_riga() +{ + int err=NOERR; + //variabile che mi permette di lavorare sullo sheet + TSheet_field& sheet = sfield(F_PLAN); + + //instanzio un isam file sulla tabella dei planning + TLocalisamfile rplan(LF_LVRCONSPLAN); + + //creo il codplan + const int posdata = sheet.cid2index(F_S_DATA); + TDate data = _rigaoriginale.get(posdata); + long codplan = data.date2ansi(); + + //creo il codriga + const int posriga = sheet.cid2index(F_S_RIGA); + int codriga = _rigaoriginale.get_int(posriga); + + //se esiste almeno una riga per quel planning, leggo il record corrispondente + if (codriga > 0) + { + rplan.zero(); + rplan.put(LVRCONSPLAN_CODPLAN,codplan); + rplan.put(LVRCONSPLAN_CODRIGA,codriga); + err = rplan.remove(); + } + return err == NOERR; +} + +//questa funzione genera una nuova riga di planning e propone sullo sheet i campi che pu� riempire +void TGestione_planning_mask::nuova_riga() +{ + TSheet_field& sheet = sfield(F_PLAN); + TToken_string& rigamodificata = sheet.row(sheet.selected()); + + rigamodificata.add(get_date(F_DADATA),sheet.cid2index(F_S_DATA)); + + if (!field(F_CODCF).empty()) + { + rigamodificata.add(get_long(F_CODCF),sheet.cid2index(F_S_CODCF)); + rigamodificata.add(get(F_RAGSOCCLI),sheet.cid2index(F_S_RAGSOCCLI)); + } + + if (!field(F_CODITI).empty()) + rigamodificata.add(get_long(F_CODITI),sheet.cid2index(F_S_ITI)); + + sheet.check_row(sheet.selected()); //fa fare alla maschera la decodifica dei codici e aggiorna la TToken_string + + return; +} + +//questa funzione gestisce i vari eenti che si verificano sui campi della maschera +bool TGestione_planning_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + //se quiesti campi vengono riempiti, allora riempi lo sheet opportunamante + case F_DADATA: + case F_ADATA: + case F_CODITI: + case F_CODCF: + if (e == fe_modify) + { + fill_sheet(); + } + break; + //analisi delle operazioni sullo sheet + case F_PLAN: + switch (e) + { + case se_query_modify: //se viene selezionata una riga, la salvo in una variabile globale + { + TSheet_field& sheet = (TSheet_field&)o; + _rigaoriginale = sheet.row(sheet.selected()); + } + break; + case se_notify_modify: //se avviene una modifica, aggiorna il planning e lo sheet + aggiorna_plan(); + fill_sheet(); + break; + case se_notify_del: //se viene eliminata una riga dallo sheet, cancellala anche dal file + cancella_riga(); + break; + case se_query_add: //se si decide di fare una modifica sullo sheet, ma i campi data della testata sono vuoti, rifiutati + if (field(F_DADATA).empty()) + return false; + break; + case se_notify_add: //se si aggiunge una riga nuova allo sheet, svuota la var globale e aggiungi la riga anche al file + _rigaoriginale = ""; + nuova_riga(); + break; + default: break; + } + break; + //quando riempio il campo data dello sheet, decodifica il giorno di consegna + case F_S_DATA: + if (e == fe_modify || e == fe_init) + { + const TDate dtcons = o.get(); + const TString16 ggcons = itow(dtcons.wday()); + o.mask().set(F_S_GIORNO,ggcons); + } + break; + //quando riempio il campo itinerario dell sheet, recupero i dati di autista e mezzo da &ITI + case F_S_ITI: + if (e == fe_modify && !o.empty()) + { + TMask& msk = o.mask(); + + const TRectype& iti = cache().get("&ITI",o.get()); + if (!iti.empty()) + { + + const bool riganuova = msk.get_int(F_S_RIGA) <= 0; + if (riganuova || msk.field(F_S_CODAUT).empty()) + msk.set(F_S_CODAUT,iti.get("S1")); + if (riganuova || msk.field(F_S_CODMEZ).empty()) + msk.set(F_S_CODMEZ,iti.get("S2")); + } + } + break; + //quando riempio il campo cliente sullo sheet controllo se posso proporre dei dati di default sul planning + case F_S_CODCF: + if (e == fe_modify && !o.empty()) + { + TMask& msk = o.mask(); //maschera di sheet + + TLocalisamfile pplan(LF_LVPASPLAN); + + pplan.put(LVPASPLAN_CODCF,msk.get(F_S_CODCF)); + pplan.put(LVPASPLAN_CODCONT,msk.get(F_S_CODCONT)); + pplan.put(LVPASPLAN_GGCONS,msk.get_date(F_S_DATA).wday()); + + int err = pplan.read(_isgteq); + + //se trovo dei dati validi sulla tabella LF_LVPASPLAN, riempio tutti i campi che riesco,... + //...utilizzando anche la tabella &ITI + if (err == NOERR) + { + msk.set(F_S_ITI,pplan.get_int(LVPASPLAN_CODITI),true); + msk.set(F_S_ORDFER,pplan.get_int(LVPASPLAN_ORDFERM)); + msk.set(F_S_MODPASS,pplan.get_char(LVPASPLAN_MODPASS)); + } + } + break; + default: break; + } + return true; +} + +/////////////////////////////////////////////////////////// +// TGestione_planning applicazione +/////////////////////////////////////////////////////////// + +class TGestione_planning_app : public TSkeleton_application +{ + + TGestione_planning_mask* _msk; + +protected: + virtual bool create(); + virtual bool destroy(); + +public: + bool transfer(); + virtual void main_loop(); +}; + +bool TGestione_planning_app::create() +{ + _msk = new TGestione_planning_mask("lv2200a"); + + return TSkeleton_application::create(); +} + +bool TGestione_planning_app::destroy() +{ + delete _msk; + return TApplication::destroy(); +} + +bool TGestione_planning_app::transfer() +{ + return true; +} +void TGestione_planning_app::main_loop() +{ + while (_msk->run() == K_ENTER) + transfer(); +} + +int lv2200(int argc, char* argv[]) +{ + TGestione_planning_app app; + app.run(argc, argv, TR("Gestione planning")); + return 0; +} diff --git a/lv/lv2200a.h b/lv/lv2200a.h new file mode 100755 index 000000000..421bb51d6 --- /dev/null +++ b/lv/lv2200a.h @@ -0,0 +1,31 @@ +// modifica manuale planning +// definizione campi per maschera lv2200a + +#define F_DADATA 201 +#define F_ADATA 202 +#define F_CODITI 203 +#define F_DESCRITI 204 +#define F_CODCF 205 +#define F_RAGSOCCLI 206 +#define F_PLAN 207 +//campi dello sheet +#define F_S_BOLLA 100 +#define F_S_DATA 101 +#define F_S_GIORNO 102 +#define F_S_ITI 103 +#define F_S_ORDFER 104 +#define F_S_MODPASS 105 +#define F_S_CODCONT 106 +#define F_S_CODCF 107 +#define F_S_RAGSOCCLI 108 +#define F_S_CODAUT 109 +#define F_S_DESAUT 998 +#define F_S_CODMEZ 110 +#define F_S_DESMEZ 999 +#define F_S_ANNO 111 +#define F_S_CODNUM 112 +#define F_S_NDOC 113 +#define F_S_PASSTD 114 +#define F_S_PERSOSP 115 +#define F_S_PERSOSPVAR 116 +#define F_S_RIGA 117 \ No newline at end of file diff --git a/lv/lv2200a.uml b/lv/lv2200a.uml new file mode 100755 index 000000000..5c237f4de --- /dev/null +++ b/lv/lv2200a.uml @@ -0,0 +1,350 @@ +#include "lv2200a.h" + +TOOLBAR "" 0 0 0 2 +#include <elabar.h> +ENDPAGE + +PAGE "Visualizzazione e modifica planning" -1 -1 76 20 + +GROUPBOX DLG_NULL 76 5 +BEGIN + PROMPT 1 1 "@bDati del planning" +END + +DATE F_DADATA +BEGIN + PROMPT 2 2 "Visualizza il planning dal " + FIELD DADATA + CHECKTYPE REQUIRED +END + +DATE F_ADATA +BEGIN + PROMPT 45 2 "al " + FIELD ADATA + CHECKTYPE REQUIRED +END + +STRING F_CODITI 3 +BEGIN + PROMPT 2 3 "Itinerario " + FLAGS "UZ" + USE &ITI + INPUT CODTAB F_CODITI + DISPLAY "Codice " CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODITI CODTAB + OUTPUT F_DESCRITI S0 +END + +STRING F_DESCRITI 50 +BEGIN + PROMPT 23 3 "" + USE &ITI KEY 2 + INPUT S0 F_DESCRITI + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice " CODTAB + COPY OUTPUT F_CODITI +END + +NUMBER F_CODCF 6 +BEGIN + PROMPT 2 4 "Cliente " + FLAGS "U" + USE LF_CLIFO KEY 1 + INPUT TIPOCF "C" + INPUT CODCF F_CODCF + DISPLAY "Codice " CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_CODCF CODCF + OUTPUT F_RAGSOCCLI RAGSOC + CHECKTYPE NORMAL +END + +STRING F_RAGSOCCLI 50 +BEGIN + PROMPT 23 4 "" + USE LF_CLIFO KEY 2 + INPUT TIPOCF "C" + INPUT RAGSOC F_RAGSOCCLI + DISPLAY "Ragione sociale@50" RAGSOC + DISPLAY "Codice " CODCF + COPY OUTPUT F_CODCF + CHECKTYPE NORMAL +END + +SPREADSHEET F_PLAN +BEGIN + PROMPT 0 6 "Planning" + ITEM "Data" + ITEM "Giorno" + ITEM "Itinerario" + ITEM "Or. fermata" + ITEM "Mod. pass." + ITEM "Contratto" + ITEM "Codice\nCliente@6" + ITEM "Ragione sociale@50" + ITEM "Autista" + ITEM "Mezzo" + ITEM "Tipo\ndoc." + ITEM "Numero\ndoc." + ITEM "Consegna\nstandard" + ITEM "Per.\nsosp." + ITEM "Per.\nsosp. var." + ITEM "Num.\nriga@5" +END + +ENDPAGE +ENDMASK + +PAGE "Planning" -1 -1 78 20 + +GROUPBOX DLG_NULL 76 4 +BEGIN + PROMPT 1 1 "@bDati planning" +END + +DATE F_S_DATA +BEGIN + PROMPT 2 2 "Data " + FIELD DTCONS + CHECKTYPE REQUIRED +END + +STRING F_S_GIORNO 10 +BEGIN + PROMPT 20 2 "Giorno " + FLAG "D" +END + +NUMBER F_S_ITI 3 +BEGIN + PROMPT 40 2 "Itinerario " + FLAGS "Z" + FIELD CODITI + USE &ITI + INPUT CODTAB F_S_ITI + DISPLAY "Codice " CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_S_ITI CODTAB + CHECKTYPE REQUIRED +END + +NUMBER F_S_RIGA 5 +BEGIN + PROMPT 60 2 "Riga " + FLAGS "DG" + MESSAGE EMPTY ENABLE,F_S_CODCONT + MESSAGE DISABLE,F_S_CODCONT + FIELD CODRIGA +END + +NUMBER F_S_ORDFER 3 +BEGIN + FLAGS "DU" + PROMPT 2 3 "Ordine di fermata " + FIELD ORDFER + CHECKTYPE REQUIRED +END + +LIST F_S_MODPASS 10 +BEGIN + PROMPT 25 3 "Modalit� di passaggio " + ITEM "C|Consegna" + ITEM "R|Ritiro" + ITEM "E|Entrambi" + FIELD MODPASS +END + + +GROUPBOX DLG_NULL 76 4 +BEGIN + PROMPT 1 5 "@bDati cliente" +END + +NUMBER F_S_CODCONT 6 +BEGIN + PROMPT 2 6 "Contratto " + FLAGS "DU" + USE LF_LVCONDV + JOIN LF_CLIFO INTO TIPOCF="C" CODCF=CODCF + INPUT CODCONT F_S_CODCONT + INPUT CODCF F_S_CODCF + DISPLAY "Codice@6" CODCONT + DISPLAY "Cliente@50" LF_CLIFO->RAGSOC + DISPLAY "Codice Cliente" CODCF + OUTPUT F_S_CODCONT CODCONT + OUTPUT F_S_CODCF CODCF + OUTPUT F_S_RAGSOCCLI LF_CLIFO->RAGSOC + FIELD CODCONT +END + +NUMBER F_S_CODCF 6 +BEGIN + PROMPT 2 7 "Cliente " + FLAGS "DUG" + FIELD CODCF + USE LF_CLIFO KEY 1 + INPUT TIPOCF "C" + INPUT CODCF F_S_CODCF + DISPLAY "Codice " F_S_SCODCF + DISPLAY "Ragione sociale@50" F_S_RAGSOC + OUTPUT F_S_CODCF CODCF + OUTPUT F_S_RAGSOCCLI RAGSOC + CHECKTYPE REQUIRED +END + +STRING F_S_RAGSOCCLI 50 +BEGIN + PROMPT 22 7 "" + FLAGS "D" +END + +GROUPBOX DLG_NULL 76 4 +BEGIN + PROMPT 1 9 "@bDettagli trasporto" +END + +STRING F_S_CODAUT 6 +BEGIN + PROMPT 2 10 "Autista " + FLAGS "UZ" + USE &AUT + INPUT CODTAB F_S_CODAUT + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_S_CODAUT CODTAB + OUTPUT F_S_DESAUT S0 + CHECKTYPE REQUIRED + FIELD CODAUT +END + +STRING F_S_DESAUT 50 +BEGIN + PROMPT 22 10 "" + USE &AUT KEY 2 + INPUT S0 F_S_DESAUT + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_S_CODAUT + CHECKTYPE REQUIRED +END + +STRING F_S_CODMEZ 8 +BEGIN + PROMPT 2 11 "Targa " + FLAGS "U" + USE &MEZ + INPUT CODTAB F_S_CODMEZ + DISPLAY "Codice@8" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_S_CODMEZ CODTAB + OUTPUT F_S_DESMEZ S0 + FIELD CODMEZ + CHECKTYPE REQUIRED +END + +STRING F_S_DESMEZ 50 +BEGIN + PROMPT 22 11 "" + USE &MEZ KEY 2 + INPUT S0 F_S_DESMEZ + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice@8" CODTAB + COPY OUTPUT F_S_CODMEZ + CHECKTYPE REQUIRED +END + +GROUPBOX DLG_NULL 20 5 +BEGIN + PROMPT 56 13 "@bDati bolla associata" +END + +NUMBER F_S_ANNO 4 +BEGIN + PROMPT 57 14 "Anno doc. " + FIELD ANNO + FLAG "D" +END + +STRING F_S_CODNUM 4 +BEGIN + PROMPT 57 15 "Documento " + FIELD CODNUM + FLAG "D" +END + +NUMBER F_S_NDOC 7 +BEGIN + PROMPT 57 16 "Numero " + FIELD NDOC + FLAG "DG" + MESSAGE EMPTY DISABLE,F_S_BOLLA + MESSAGE ENABLE,F_S_BOLLA +END + +GROUPBOX DLG_NULL 53 5 +BEGIN + PROMPT 1 13 "@bDettagli planning" +END + +BOOLEAN F_S_PASSTD +BEGIN + PROMPT 2 14 "Consegna standard " + FIELD CONSSTD + FLAG "D" +END + +NUMBER F_S_PERSOSP 2 +BEGIN + PROMPT 2 15 "Periodo di sospensione " + FIELD PERSOSP + FLAG "D" +END + +NUMBER F_S_PERSOSPVAR 2 +BEGIN + PROMPT 2 16 "Periodo di sospensione variato " + FIELD PERSOSPVAR + USE LF_LVPERISOSP + INPUT CODCF F_S_CODCF SELECT + INPUT CODCONT F_S_CODCONT SELECT + INPUT CODPER F_S_PERSOSPVAR + DISPLAY "Codice @6" CODPER + DISPLAY "Da @10" DATAINI + DISPLAY "a @10" DATAFIN + OUTPUT F_S_PERSOSPVAR CODPER + CHECKTYPE NORMAL +END + +ENDPAGE + +TOOLBAR "" 0 0 0 2 + +BUTTON DLG_OK 2 2 +BEGIN + PROMPT 1 1 "" +END + +BUTTON DLG_DELREC 2 2 +BEGIN + PROMPT 2 1 "Elimina" + MESSAGE EXIT,K_DEL + PICTURE BMP_DELREC +END + +BUTTON DLG_USER 2 2 +BEGIN + PROMPT 3 1 "Bolla" + PICTURE BMP_LINK +END + +BUTTON DLG_CANCEL 2 2 +BEGIN + PROMPT 4 1 "" +END + + + +ENDPAGE +ENDMASK \ No newline at end of file diff --git a/lv/lvconsplan.h b/lv/lvconsplan.h deleted file mode 100755 index 162c8e108..000000000 --- a/lv/lvconsplan.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef __LVCONSPLAN_H -#define __LVCONSPLAN_H - -#define LVCONSPLAN_CODPLAN "CODPLAN" -#define LVCONSPLAN_DTCONS "DTCONS" -#define LVCONSPLAN_GGCONS "GGCONS" -#define LVCONSPLAN_CODAUT "CODAUT" -#define LVCONSPLAN_CODMEZ "CODMEZ" -#define LVCONSPLAN_CODITI "CODITI" -#define LVCONSPLAN_UTCREAZ "UTULAGG" -#define LVCONSPLAN_DTULAGG "DTULAGG" -#define LVCONSPLAN_ORULAGG "ORULAGG" - -#endif \ No newline at end of file diff --git a/lv/lvtbiti.uml b/lv/lvtbiti.uml index 2a74c1d6b..dc14135f9 100755 --- a/lv/lvtbiti.uml +++ b/lv/lvtbiti.uml @@ -14,7 +14,7 @@ END STRING F_COD_ITINERARIO 3 BEGIN PROMPT 2 2 "Itinerario " - FLAGS "U" + FLAGS "ZU" USE &ITI INPUT CODTAB F_COD_ITINERARIO DISPLAY "Codice" CODTAB