Patch level : 10.0 patch 208
Files correlati : lv2 - lv0 - lvlib - tracciati record Ricompilazione Demo : [ ] Commento : 0001104: Le date di stagionalità nei passaggi per contratto non devono contenere l'anno Descrizione Spiegazione: La stagionalità si intende già all'interno dell'anno ed è un dato che normalmente si protrae di anno in anno Se lasciato l'anno in queste date, la stagionalità non si potrà riporporre pergli anni successivi. è questo non è corretto. git-svn-id: svn://10.65.10.50/trunk@18003 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
180d418b70
commit
fa2a06601c
@ -1,3 +1,3 @@
|
|||||||
164
|
164
|
||||||
0
|
0
|
||||||
$lvpasplan|0|0|116|0|Tabella passaggi planning per contratto|||
|
$lvpasplan|0|0|120|0|Tabella passaggi planning per contratto|||
|
||||||
|
@ -9,8 +9,8 @@ ORDFERM|2|3|0|Indica l'ordine di fermata dell'autista
|
|||||||
FREQ|1|2|0|Codice per il calcolo delle consegne
|
FREQ|1|2|0|Codice per il calcolo delle consegne
|
||||||
MODPASS|1|1|0|Indica la modalità di passaggio
|
MODPASS|1|1|0|Indica la modalità di passaggio
|
||||||
FLSTAG|8|1|0|Flag che indica se un passaggio è stagionale o meno
|
FLSTAG|8|1|0|Flag che indica se un passaggio è stagionale o meno
|
||||||
DTSTAGIN|5|8|0|Inizio stagionalita'
|
DTSTAGIN|1|10|0|Inizio stagionalita'
|
||||||
DTSTAGSC|5|8|0|Fine stagionalita'
|
DTSTAGSC|1|10|0|Fine stagionalita'
|
||||||
ORARPRV|1|5|0|Ora di arrivo prevista
|
ORARPRV|1|5|0|Ora di arrivo prevista
|
||||||
UTCREAZ|1|16|0|Utente d'inserimento
|
UTCREAZ|1|16|0|Utente d'inserimento
|
||||||
DTCREAZ|5|8|0|Data d'inserimento
|
DTCREAZ|5|8|0|Data d'inserimento
|
||||||
|
@ -189,14 +189,14 @@ BEGIN
|
|||||||
MESSAGE TRUE ENABLE,F_S_DASTAG|ENABLE,F_S_ASTAG
|
MESSAGE TRUE ENABLE,F_S_DASTAG|ENABLE,F_S_ASTAG
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE F_S_DASTAG
|
STRING F_S_DASTAG 10
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 15 4 "Valido dal "
|
PROMPT 15 4 "Valido dal "
|
||||||
FIELD DTSTAGIN
|
FIELD DTSTAGIN
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE F_S_ASTAG
|
STRING F_S_ASTAG 10
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 40 4 " al "
|
PROMPT 40 4 " al "
|
||||||
FIELD DTSTAGSC
|
FIELD DTSTAGSC
|
||||||
|
@ -64,15 +64,16 @@ class TGenera_planning_app : public TSkeleton_application
|
|||||||
protected:
|
protected:
|
||||||
virtual bool create();
|
virtual bool create();
|
||||||
virtual bool destroy();
|
virtual bool destroy();
|
||||||
bool elimina_planning(const TDate& dadata, const TDate& adata) const;
|
bool elimina_planning(const TDate& dadata, const TDate& adata, const bool elimina) const;
|
||||||
bool elimina_planning_itinerario(const TDate& dadata, const TDate& adata, const long& coditi) const;
|
bool elimina_planning_itinerario(const TDate& dadata, const TDate& adata, const long& coditi, const bool elimina) const;
|
||||||
bool elimina_planning_cliente(const TDate& dadata, const TDate& adata, const long& codcf) const;
|
bool elimina_planning_cliente(const TDate& dadata, const TDate& adata, const long& codcf, const bool elimina) const;
|
||||||
bool kill_planning (TISAM_recordset& selrighe) const;
|
bool kill_planning (TISAM_recordset& selrighe) const;
|
||||||
int prossimo_codriga(const TDate& data);
|
int prossimo_codriga(const TDate& data);
|
||||||
TDate cerca_ultima_consegna(long codcf, long codcont, const TDate& data) const;
|
TDate cerca_ultima_consegna(long codcf, long codcont, const TDate& data) const;
|
||||||
int conta_consegne_mese(long codcf, long codcont, const TDate& adata) const;
|
int conta_consegne_mese(long codcf, long codcont, const TDate& adata) const;
|
||||||
void arrotonda_al_giorno(TDate& data, const int ggcons) const;
|
void arrotonda_al_giorno(TDate& data, const int ggcons) const;
|
||||||
void elabora_passaggio(const TDate& dadata, const TDate& adata, const TISAM_recordset& pplan);
|
void elabora_passaggio(const TDate& dadata, const TDate& adata, const TISAM_recordset& pplan);
|
||||||
|
const TDate str2date(const TString& data, int year) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool transfer();
|
bool transfer();
|
||||||
@ -97,13 +98,15 @@ bool TGenera_planning_app::destroy()
|
|||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
//ELIMINA_PLANNING: funzione che estrae dalla tabella dei planning tutte le righe comprese tra le due date indicate
|
//ELIMINA_PLANNING: funzione che 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
|
bool TGenera_planning_app::elimina_planning(const TDate& dadata, const TDate& adata, const bool elimina_manuali) const
|
||||||
{
|
{
|
||||||
//creo il recordset
|
//creo il recordset
|
||||||
TISAM_recordset selrighe("USE LVRCONSPLAN KEY 2\nFROM DTCONS=#DADATA\nTO DTCONS=#ADATA");
|
TString query;
|
||||||
//setto le variabili
|
if (elimina_manuali)
|
||||||
selrighe.set_var("#DADATA",dadata);
|
query << "USE LVRCONSPLAN KEY 2\nFROM DTCONS=" << dadata << "\nTO DTCONS=" << adata;
|
||||||
selrighe.set_var("#ADATA",adata);
|
else
|
||||||
|
query << "USE LVRCONSPLAN KEY 2 SELECT CONSSTD!=\"\"\nFROM DTCONS=" << dadata << "\nTO DTCONS=" << adata;
|
||||||
|
TISAM_recordset selrighe(query);
|
||||||
|
|
||||||
//richiamo la funzione che effettivamente fa la cancellazione delle righe interessate
|
//richiamo la funzione che effettivamente fa la cancellazione delle righe interessate
|
||||||
kill_planning(selrighe);
|
kill_planning(selrighe);
|
||||||
@ -113,7 +116,7 @@ bool TGenera_planning_app::elimina_planning(const TDate& dadata, const TDate& ad
|
|||||||
|
|
||||||
//ELIMINA_PLANNING_ITINERARIO: funzione che estrae dalla tabella dei planning tutte le righe comprese tra...
|
//ELIMINA_PLANNING_ITINERARIO: funzione che estrae dalla tabella dei planning tutte le righe comprese tra...
|
||||||
//...le due date indicate relative ad un itinerario specifico
|
//...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
|
bool TGenera_planning_app::elimina_planning_itinerario(const TDate& dadata, const TDate& adata, const long& coditi, const bool elimina_manuali) const
|
||||||
{
|
{
|
||||||
TString4 itinerario;
|
TString4 itinerario;
|
||||||
itinerario.format("%03d",coditi);
|
itinerario.format("%03d",coditi);
|
||||||
@ -132,7 +135,7 @@ bool TGenera_planning_app::elimina_planning_itinerario(const TDate& dadata, cons
|
|||||||
|
|
||||||
//ELIMINA_PLANNING_CLIENTE: funzione che estrae dalla tabella dei planning tutte le righe comprese tra
|
//ELIMINA_PLANNING_CLIENTE: funzione che estrae dalla tabella dei planning tutte le righe comprese tra
|
||||||
//...le due date indicate relative ad un cliente specifico
|
//...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
|
bool TGenera_planning_app::elimina_planning_cliente(const TDate& dadata, const TDate& adata, const long& codcf, const bool elimina_manuali) const
|
||||||
{
|
{
|
||||||
//creo il recordset
|
//creo il recordset
|
||||||
TISAM_recordset selrighe("USE LVRCONSPLAN KEY 2\nSELECT CODCF=#CODCF\nFROM DTCONS=#DADATA\nTO DTCONS=#ADATA");
|
TISAM_recordset selrighe("USE LVRCONSPLAN KEY 2\nSELECT CODCF=#CODCF\nFROM DTCONS=#DADATA\nTO DTCONS=#ADATA");
|
||||||
@ -237,6 +240,21 @@ void TGenera_planning_app::arrotonda_al_giorno(TDate& data, const int ggcons) co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//STR2DATE: converte una stringa in una data o non inizilizzata o sicuramente valida
|
||||||
|
const TDate TGenera_planning_app::str2date(const TString& data, int year) const
|
||||||
|
{
|
||||||
|
TDate date;
|
||||||
|
|
||||||
|
const int g = atoi(data.left(2));
|
||||||
|
const int m = atoi(data.mid(3,2));
|
||||||
|
const int a = data.len() < 10 ? year : atoi(data.right(4));
|
||||||
|
|
||||||
|
if (m >= 1 && m <= 12 && a > 2000 && g >= 1 && g <= date.last_day(m,a))
|
||||||
|
date = TDate(g,m,a);
|
||||||
|
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
//ELABORA_PASSAGGIO: questa funzione effettivamente genera il passaggio e lo salva nella tabella
|
//ELABORA_PASSAGGIO: questa funzione effettivamente genera il passaggio e lo salva nella tabella
|
||||||
void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& adata, const TISAM_recordset& pplan)
|
void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& adata, const TISAM_recordset& pplan)
|
||||||
{
|
{
|
||||||
@ -249,8 +267,10 @@ void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& a
|
|||||||
const int ordfer = pplan.get(LVPASPLAN_ORDFERM).as_int(); //ordine di fermata
|
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
|
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
|
char modpass = pplan.get(LVPASPLAN_MODPASS).as_string()[0]; //modalità di passaggio
|
||||||
const TDate dastag = pplan.get(LVPASPLAN_DTSTAGIN).as_date(); //data di inizio del periodo di stagionalità
|
|
||||||
const TDate astag = pplan.get(LVPASPLAN_DTSTAGSC).as_date(); //data di fine del periodo di stagionalità
|
//recupero la data di inizio e fine stagionalità
|
||||||
|
const TString16 strdastag = pplan.get(LVPASPLAN_DTSTAGIN).as_string();
|
||||||
|
const TString16 strastag = pplan.get(LVPASPLAN_DTSTAGSC).as_string();
|
||||||
|
|
||||||
//cache sulle testate dei contratti, selezionati per CODCF e CODCONT
|
//cache sulle testate dei contratti, selezionati per CODCF e CODCONT
|
||||||
TToken_string keycont;
|
TToken_string keycont;
|
||||||
@ -317,12 +337,18 @@ void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& a
|
|||||||
if(lv_is_holiday(d))
|
if(lv_is_holiday(d))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//...e/o in un periodo di stagionalità (se necessario)...
|
//...e/o in un periodo distagionalità (se necessario)...
|
||||||
////la riga va elaborata se il flag di stagionalità è TRUE
|
////la riga va elaborata se il flag di stagionalità è TRUE
|
||||||
////e se se la data del periodo di stagionalità è coerente
|
////e se se la data del periodo di stagionalità è coerente
|
||||||
////e la data in considerazione è compresa tra le date della stagionalità
|
////e la data in considerazione è compresa tra le date della stagionalità
|
||||||
if (flstag && (!astag.ok() || d < dastag || d > astag))
|
if (flstag && strdastag.full() && strastag.full())
|
||||||
continue;
|
{
|
||||||
|
const TDate dastag = str2date(strdastag,d.year());
|
||||||
|
const TDate astag = str2date(strastag,d.year());
|
||||||
|
|
||||||
|
if (!astag.ok() || d < dastag || d > astag)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
//...e/o in un periodo di sospensione...
|
//...e/o in un periodo di sospensione...
|
||||||
//...per cui c'è da verificare se è da saltare completamente o...
|
//...per cui c'è da verificare se è da saltare completamente o...
|
||||||
@ -388,7 +414,10 @@ bool TGenera_planning_app::transfer()
|
|||||||
if (_msk->get(F_CODCF).full())
|
if (_msk->get(F_CODCF).full())
|
||||||
{
|
{
|
||||||
const long codcf = _msk->get_long(F_CODCF);
|
const long codcf = _msk->get_long(F_CODCF);
|
||||||
elimina_planning_cliente(dadata,adata,_msk->get_long(F_CODCF));
|
if (yesno_box(TR("Si desidera cancellare i giri modificati manualmente?")))
|
||||||
|
elimina_planning_cliente(dadata,adata,codcf,true);
|
||||||
|
else
|
||||||
|
elimina_planning_cliente(dadata,adata,codcf,false);
|
||||||
query << " SELECT CODCF=" << codcf;
|
query << " SELECT CODCF=" << codcf;
|
||||||
}
|
}
|
||||||
else if (_msk->get(F_CODITI).full())
|
else if (_msk->get(F_CODITI).full())
|
||||||
@ -396,12 +425,17 @@ bool TGenera_planning_app::transfer()
|
|||||||
const long coditi = _msk->get_long(F_CODITI);
|
const long coditi = _msk->get_long(F_CODITI);
|
||||||
TString4 itinerario;
|
TString4 itinerario;
|
||||||
itinerario.format("%03d",coditi);
|
itinerario.format("%03d",coditi);
|
||||||
elimina_planning_itinerario(dadata,adata,coditi);
|
if (yesno_box(TR("Si desidera cancellare i giri modificati manualmente?")))
|
||||||
|
elimina_planning_itinerario(dadata,adata,coditi,true);
|
||||||
|
else
|
||||||
|
elimina_planning_itinerario(dadata,adata,coditi,false);
|
||||||
query << " SELECT CODITI=" << itinerario;
|
query << " SELECT CODITI=" << itinerario;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
elimina_planning(dadata,adata);
|
if (yesno_box(TR("Si desidera cancellare i giri modificati manualmente?")))
|
||||||
|
elimina_planning(dadata,adata,true);
|
||||||
|
else
|
||||||
|
elimina_planning(dadata,adata,false);
|
||||||
_codriga.destroy(); //azzera il numero delle righe del planning già generati
|
_codriga.destroy(); //azzera il numero delle righe del planning già generati
|
||||||
|
|
||||||
TISAM_recordset pplan(query);
|
TISAM_recordset pplan(query);
|
||||||
|
@ -41,13 +41,13 @@ bool lv_is_holiday(const TDate& data)
|
|||||||
cal = new TString(366);
|
cal = new TString(366);
|
||||||
calendari.add(key,cal);
|
calendari.add(key,cal);
|
||||||
*cal = ini.get("CAL", "lv", anno);
|
*cal = ini.get("CAL", "lv", anno);
|
||||||
cal->left_just(366);
|
cal->left_just(366,'-');
|
||||||
}
|
}
|
||||||
|
|
||||||
const TDate primo(1,1,anno);
|
const TDate primo(1,1,anno);
|
||||||
const long index = data - primo;
|
const long index = data - primo;
|
||||||
|
|
||||||
return (*cal)[index] != 'X';
|
return (*cal)[index] == 'X';
|
||||||
}
|
}
|
||||||
|
|
||||||
//funzione che restituisce un codice contratto valido dato cliente, indirizzo di spedizione e data
|
//funzione che restituisce un codice contratto valido dato cliente, indirizzo di spedizione e data
|
||||||
|
Loading…
x
Reference in New Issue
Block a user