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
This commit is contained in:
parent
8f71fa564f
commit
fd378c9686
@ -1,3 +1,3 @@
|
||||
166
|
||||
0
|
||||
$lvconsplan|0|0|57|0|Planning consegne|||
|
||||
$lvclifogiac|0|0|702|0|Giacenze per cliente|||
|
||||
|
65
lv/f166.trr
65
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
|
||||
TIPOCF+CODCF+INDSPED+ANNOES+CODART+NRIGA|
|
||||
TIPOCF+CODCF+INDSPED+ANNOES+CODMAG+CODART+LIVELLO|X
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
1
lv/lv2.h
1
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
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
441
lv/lv2200.cpp
Executable file
441
lv/lv2200.cpp
Executable file
@ -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;
|
||||
}
|
31
lv/lv2200a.h
Executable file
31
lv/lv2200a.h
Executable file
@ -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
|
350
lv/lv2200a.uml
Executable file
350
lv/lv2200a.uml
Executable file
@ -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
|
@ -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
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user