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:
luca83 2008-11-10 11:59:43 +00:00
parent c95352428e
commit 3e23894419
2 changed files with 73 additions and 24 deletions

View File

@ -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

View File

@ -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;