Patch level : 10.0
Files correlati : Ricompilazione Demo : [ ] Commento : 0000952: Chiave duplicata in gestione manuale giri - Aggiunto controllo di esistenza della riga modificata; verrà generata una riga nuova SOLO se l'utente effettivamente lo desidera git-svn-id: svn://10.65.10.50/trunk@17582 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
c95352428e
commit
3e23894419
@ -26,4 +26,4 @@ ORULAGG|10|6|0|Ora dell'ultimo aggiornamento
|
|||||||
3
|
3
|
||||||
CODPLAN+CODRIGA|
|
CODPLAN+CODRIGA|
|
||||||
DTCONS+CODITI+ORDFER+CODRIGA|
|
DTCONS+CODITI+ORDFER+CODRIGA|
|
||||||
CODCF+CODCONT+DTCONS|
|
CODCF+CODCONT+DTCONS|X
|
||||||
|
@ -31,6 +31,7 @@ private:
|
|||||||
void rewrite_all(TToken_string& rigamodificata, TDate& data, long codplan);
|
void rewrite_all(TToken_string& rigamodificata, TDate& data, long codplan);
|
||||||
bool cancella_riga();
|
bool cancella_riga();
|
||||||
void nuova_riga();
|
void nuova_riga();
|
||||||
|
bool richiesta_modifica();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -185,45 +186,49 @@ void TGestione_planning_mask::aggiorna_plan()
|
|||||||
//instanzio un isam file sulla tabella dei planning
|
//instanzio un isam file sulla tabella dei planning
|
||||||
TLocalisamfile rplan(LF_LVRCONSPLAN);
|
TLocalisamfile rplan(LF_LVRCONSPLAN);
|
||||||
|
|
||||||
//creo il codplan
|
//calcolo il codplan originale
|
||||||
const int posdata = sheet.cid2index(F_S_DATA);
|
const int posdata = sheet.cid2index(F_S_DATA);
|
||||||
TDate data = _rigaoriginale.get(posdata);
|
const TDate dataor = _rigaoriginale.get(posdata);
|
||||||
long codplan = data.date2ansi();
|
const long codplanor = dataor.date2ansi();
|
||||||
const long codplanor = codplan;
|
|
||||||
|
|
||||||
//creo il codriga
|
//calcolo il codriga originale
|
||||||
const int posriga = sheet.cid2index(F_S_RIGA);
|
const int posriga = sheet.cid2index(F_S_RIGA);
|
||||||
int codriga = _rigaoriginale.get_int(posriga);
|
const int codrigaor = _rigaoriginale.get_int(posriga);
|
||||||
|
|
||||||
|
//creo i nuovi codplan e codriga
|
||||||
|
TDate data = rigamodificata.get(posdata);
|
||||||
|
const long codplan = data.date2ansi();
|
||||||
|
const int codriga = codice_riga(data);
|
||||||
|
|
||||||
//se esiste almeno una riga per quel planning, leggo il record corrispondente
|
//se esiste almeno una riga per quel planning, leggo il record corrispondente
|
||||||
if (codriga > 0)
|
if (codrigaor > 0)
|
||||||
{
|
{
|
||||||
rplan.zero();
|
rplan.zero();
|
||||||
rplan.put(LVRCONSPLAN_CODPLAN,codplanor);
|
rplan.put(LVRCONSPLAN_CODPLAN,codplanor);
|
||||||
rplan.put(LVRCONSPLAN_CODRIGA,codriga);
|
rplan.put(LVRCONSPLAN_CODRIGA,codrigaor);
|
||||||
rplan.read();
|
rplan.read();
|
||||||
}
|
}
|
||||||
|
|
||||||
//se ho modificato la data di una riga esistente, o se se ho creata una nuova, allora
|
//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)
|
if (changed(_rigaoriginale,rigamodificata,F_S_DATA) || codrigaor <= 0)
|
||||||
{
|
{
|
||||||
//se esiste almeno una riga, elimino quella che voglio modifcare
|
//se esiste una riga sul file, la rimuovo
|
||||||
if (codriga > 0)
|
if (codrigaor > 0 && rplan.status() == NOERR)
|
||||||
rplan.remove();
|
rplan.remove();
|
||||||
|
|
||||||
//creo i nuovi codplan e codriga
|
|
||||||
data = rigamodificata.get(posdata);
|
|
||||||
codplan = data.date2ansi();
|
|
||||||
codriga = codice_riga(data);
|
|
||||||
|
|
||||||
//creo la nuova riga
|
//creo la nuova riga
|
||||||
rplan.zero();
|
rplan.zero();
|
||||||
rplan.put(LVRCONSPLAN_CODPLAN,codplan);
|
rplan.put(LVRCONSPLAN_CODPLAN,codplan);
|
||||||
rplan.put(LVRCONSPLAN_CODRIGA,codriga);
|
rplan.put(LVRCONSPLAN_CODRIGA,codriga);
|
||||||
|
rplan.put(LVRCONSPLAN_DTCONS,data);
|
||||||
rplan.put(LVRCONSPLAN_CODPLANOR,codplanor);
|
rplan.put(LVRCONSPLAN_CODPLANOR,codplanor);
|
||||||
|
|
||||||
|
int err = rplan.write();
|
||||||
|
|
||||||
//scrivo la nuova riga
|
//scrivo la nuova riga
|
||||||
rplan.write();
|
if (err != NOERR)
|
||||||
|
warning_box (FR("Errore di scrittura. Errore %d"), err);
|
||||||
|
|
||||||
|
|
||||||
//modifico anche la TToken_string così da evitare errori al momento della rewrite
|
//modifico anche la TToken_string così da evitare errori al momento della rewrite
|
||||||
rigamodificata.add(data,posdata);
|
rigamodificata.add(data,posdata);
|
||||||
@ -261,12 +266,12 @@ void TGestione_planning_mask::aggiorna_plan()
|
|||||||
}
|
}
|
||||||
rplan.curr().zero(LVRCONSPLAN_CONSSTD);
|
rplan.curr().zero(LVRCONSPLAN_CONSSTD);
|
||||||
lv_set_update_info(rplan.curr());
|
lv_set_update_info(rplan.curr());
|
||||||
rplan.rewrite();
|
if (rplan.rewrite() != NOERR)
|
||||||
|
warning_box (TR("Errore di scrittura."));
|
||||||
|
|
||||||
if (updatecar)
|
if (updatecar)
|
||||||
rewrite_all(rigamodificata, data, codplan);
|
rewrite_all(rigamodificata, data, codplan);
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TGestione_planning_mask::rewrite_all(TToken_string& rigamodificata, TDate& data, long codplan)
|
void TGestione_planning_mask::rewrite_all(TToken_string& rigamodificata, TDate& data, long codplan)
|
||||||
@ -365,6 +370,42 @@ void TGestione_planning_mask::nuova_riga()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//questa funzione controlla se la modifica del record richiesta comporta la sovrascrittura con un altro
|
||||||
|
bool TGestione_planning_mask::richiesta_modifica()
|
||||||
|
{
|
||||||
|
//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
|
||||||
|
|
||||||
|
//estraggo i dati di interesse dalla riga che ho modificato
|
||||||
|
int pos = sheet.cid2index(F_S_DATA);
|
||||||
|
const TDate data = rigamodificata.get(pos);
|
||||||
|
const long codplan = data.date2ansi();
|
||||||
|
|
||||||
|
pos = sheet.cid2index(F_S_ITI);
|
||||||
|
const TString4 itinerario = rigamodificata.get(pos);
|
||||||
|
|
||||||
|
pos = sheet.cid2index(F_S_CODCF);
|
||||||
|
const long cliente = rigamodificata.get_long(pos);
|
||||||
|
|
||||||
|
pos = sheet.cid2index(F_S_CODCONT);
|
||||||
|
const long contratto = rigamodificata.get_long(pos);
|
||||||
|
|
||||||
|
//instanzio un isam file sulla tabella dei planning
|
||||||
|
TLocalisamfile rplan(LF_LVRCONSPLAN);
|
||||||
|
rplan.setkey(3);
|
||||||
|
//leggo il record (se esiste)
|
||||||
|
rplan.put(LVRCONSPLAN_CODCF,cliente);
|
||||||
|
rplan.put(LVRCONSPLAN_CODCONT,contratto);
|
||||||
|
rplan.put(LVRCONSPLAN_DTCONS,data);
|
||||||
|
rplan.put(LVRCONSPLAN_CODITI,itinerario);
|
||||||
|
|
||||||
|
if (rplan.read() == NOERR)
|
||||||
|
return yesno_box(FR("La consegna così modificata corrisponde\nad una consegna già esistente.\nSi desidera duplicare la consegna?"));
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//questa funzione gestisce i vari eenti che si verificano sui campi della maschera
|
//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)
|
bool TGestione_planning_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
{
|
{
|
||||||
@ -398,9 +439,17 @@ bool TGestione_planning_mask::on_field_event(TOperable_field& o, TField_event e,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case se_notify_modify: //se avviene una modifica, aggiorna il planning e lo sheet
|
case se_notify_modify: //se avviene una modifica, aggiorna il planning e lo sheet
|
||||||
|
if (!richiesta_modifica())
|
||||||
|
{
|
||||||
|
fill_sheet();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
aggiorna_plan();
|
aggiorna_plan();
|
||||||
fill_sheet();
|
fill_sheet();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case se_notify_del: //se viene eliminata una riga dallo sheet, cancellala anche dal file
|
case se_notify_del: //se viene eliminata una riga dallo sheet, cancellala anche dal file
|
||||||
cancella_riga();
|
cancella_riga();
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user