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
|
||||
CODPLAN+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);
|
||||
bool cancella_riga();
|
||||
void nuova_riga();
|
||||
bool richiesta_modifica();
|
||||
|
||||
|
||||
public:
|
||||
@ -185,45 +186,49 @@ void TGestione_planning_mask::aggiorna_plan()
|
||||
//instanzio un isam file sulla tabella dei planning
|
||||
TLocalisamfile rplan(LF_LVRCONSPLAN);
|
||||
|
||||
//creo il codplan
|
||||
//calcolo il codplan originale
|
||||
const int posdata = sheet.cid2index(F_S_DATA);
|
||||
TDate data = _rigaoriginale.get(posdata);
|
||||
long codplan = data.date2ansi();
|
||||
const long codplanor = codplan;
|
||||
const TDate dataor = _rigaoriginale.get(posdata);
|
||||
const long codplanor = dataor.date2ansi();
|
||||
|
||||
//creo il codriga
|
||||
//calcolo il codriga originale
|
||||
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
|
||||
if (codriga > 0)
|
||||
if (codrigaor > 0)
|
||||
{
|
||||
rplan.zero();
|
||||
rplan.put(LVRCONSPLAN_CODPLAN,codplanor);
|
||||
rplan.put(LVRCONSPLAN_CODRIGA,codriga);
|
||||
rplan.put(LVRCONSPLAN_CODRIGA,codrigaor);
|
||||
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)
|
||||
if (changed(_rigaoriginale,rigamodificata,F_S_DATA) || codrigaor <= 0)
|
||||
{
|
||||
//se esiste almeno una riga, elimino quella che voglio modifcare
|
||||
if (codriga > 0)
|
||||
//se esiste una riga sul file, la rimuovo
|
||||
if (codrigaor > 0 && rplan.status() == NOERR)
|
||||
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);
|
||||
rplan.put(LVRCONSPLAN_DTCONS,data);
|
||||
rplan.put(LVRCONSPLAN_CODPLANOR,codplanor);
|
||||
|
||||
int err = rplan.write();
|
||||
|
||||
//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
|
||||
rigamodificata.add(data,posdata);
|
||||
@ -261,12 +266,12 @@ void TGestione_planning_mask::aggiorna_plan()
|
||||
}
|
||||
rplan.curr().zero(LVRCONSPLAN_CONSSTD);
|
||||
lv_set_update_info(rplan.curr());
|
||||
rplan.rewrite();
|
||||
if (rplan.rewrite() != NOERR)
|
||||
warning_box (TR("Errore di scrittura."));
|
||||
|
||||
if (updatecar)
|
||||
rewrite_all(rigamodificata, data, codplan);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void TGestione_planning_mask::rewrite_all(TToken_string& rigamodificata, TDate& data, long codplan)
|
||||
@ -365,6 +370,42 @@ void TGestione_planning_mask::nuova_riga()
|
||||
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
|
||||
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;
|
||||
case se_notify_modify: //se avviene una modifica, aggiorna il planning e lo sheet
|
||||
aggiorna_plan();
|
||||
fill_sheet();
|
||||
break;
|
||||
if (!richiesta_modifica())
|
||||
{
|
||||
fill_sheet();
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
aggiorna_plan();
|
||||
fill_sheet();
|
||||
break;
|
||||
}
|
||||
case se_notify_del: //se viene eliminata una riga dallo sheet, cancellala anche dal file
|
||||
cancella_riga();
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user