Patch level : 12.0 960

Files correlati     : cg2.exe
Commento            : F1: aggiunta forzatura collegamento a fppro in salvataggio
This commit is contained in:
Simone Palacino 2020-05-04 10:49:21 +02:00
parent 68f425810c
commit 22904d14e3

View File

@ -1489,8 +1489,7 @@ void TPrimanota_application::write_fppro()
// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
if (save_fppro() > 0 && !save_dbmov())
message_box(
TString("ATTENZIONE:") <<
" non è stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n" <<
"ATTENZIONE: non e' stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n"
"Movimento registrato senza collegamento ai documenti in ingresso.");
}
@ -1578,7 +1577,7 @@ int TPrimanota_application::write(const TMask& m)
switch (controlli_f1(m)) // Solo con F1
{
case pro_dataric_err:
error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
error_box("Attenzione non e' possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
case pro_numreg_err:
return _isnowarning;
default: case pro_noerr: break;
@ -1709,7 +1708,7 @@ int TPrimanota_application::rewrite(const TMask& m)
switch (controlli_f1(m)) // Solo con F1
{
case pro_dataric_err:
error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
error_box("Attenzione non e' possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
case pro_numreg_err:
return _isnowarning;
default: case pro_noerr: break;
@ -2452,6 +2451,7 @@ void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query)
msk.set(FS_RECALC, "");
set_scad_f1(msk);
}
}
if (_f1_liq && msk.find_by_id(F_DIFFERITA) != nullptr)
{
@ -2636,63 +2636,62 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
int TPrimanota_application::save_fppro()
{
TMask& msk = curr_mask();
const KEY last = msk.last_key();
TMask& msk = curr_mask();
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
if (!has_f1_db(&msk))
return pro_nofp;
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
if (!has_f1_db(&msk))
return pro_nofp;
// Anzitutto guardo la modalita' in cui sono
// Se in modalita' inserimento continuo normalmente o in mod. modifica
// Guardo se quel documento corrisponde a un doc in FPPRO
// Lancio messaggio di avvertimento pulisco su db e proseguo col salvataggio del documento modificato
if (_mode != MODE_INS)
{
if(_mode == MODE_MOD)
{
TString query;
query << "SELECT COUNT(*) AS COUNT FROM FPPRO00F WHERE PZ_NUMREGCONT = '" << msk.get(F_NUMREG) << "'";
fp_db().sq_set_exec(query);
if (fp_db().sq_get_int("COUNT") != 0)
{
message_box(TString("Attenzione!") << " E' stato modificato un movimento già collegato a un documento in ingresso.");
clean_fppro(); // Pulisco db
save_dbmov(true); // Svuoto riferimento doc ingresso sul mov e proseguo col regolare salvataggio
}
}
else return pro_notsaved; // In altre modalita' esco senza fare nulla sul db
}
// Controllo che sto registrando un documento d'acquisto
if (!check_causale(msk.get(F_CODCAUS)))
return pro_notsaved;
const TDate data_operazione(msk.get(F_DATAREG));
const TDate data_documento(msk.get(F_DATADOC));
const TString& numero_docext = msk.get(F_NUMDOCEXT);
real tot_doc = msk.get_real(F_TOTALE);
const real ritfis = msk.get_real(F_RITFIS);
const real ritsoc = msk.get_real(F_RITSOC);
tot_doc = tot_doc + ritfis + ritsoc;
TToken_string fppro_keys(msk.get(F_PROKEY), ';');
const TString& keyprginvio = fppro_keys.get();
const TString& keyheaderfatt = fppro_keys.get();
const TString& keybodyfatt = fppro_keys.get();
// Anzitutto guardo la modalita' in cui sono
// Se in modalita' inserimento continuo normalmente o in mod. modifica
// Guardo se quel documento corrisponde a un doc in FPPRO
// Lancio messaggio di avvertimento pulisco su db e proseguo col salvataggio del documento modificato
if (_mode != MODE_INS)
{
if(_mode == MODE_MOD)
{
TString query;
query << "SELECT COUNT(*) AS COUNT FROM FPPRO00F WHERE PZ_NUMREGCONT = '" << msk.get(F_NUMREG) << "'";
fp_db().sq_set_exec(query);
if (fp_db().sq_get_int("COUNT") != 0)
{
message_box("Attenzione! E' stato modificato un movimento gia' collegato a un documento in ingresso.");
clean_fppro(); // Pulisco db
save_dbmov(true); // Svuoto riferimento doc ingresso sul mov e proseguo col regolare salvataggio
}
}
else return pro_notsaved; // In altre modalita' esco senza fare nulla sul db
}
// Controllo che sto registrando un documento d'acquisto
if (!check_causale(msk.get(F_CODCAUS)))
return pro_notsaved;
const TDate data_operazione(msk.get(F_DATAREG));
const TDate data_documento(msk.get(F_DATADOC));
const TString& numero_docext = msk.get(F_NUMDOCEXT);
real tot_doc = msk.get_real(F_TOTALE);
const real ritfis = msk.get_real(F_RITFIS);
const real ritsoc = msk.get_real(F_RITSOC);
tot_doc = tot_doc + ritfis + ritsoc;
TToken_string fppro_keys(msk.get(F_PROKEY), ';');
const TString& keyprginvio = fppro_keys.get();
const TString& keyheaderfatt = fppro_keys.get();
const TString& keybodyfatt = fppro_keys.get();
// Controllo che i dati corrispondano a quelli nella fattura in ingresso
TString where_str;
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\'";
if (has_tot_doc(fppro_keys))
where_str << " AND PQ_IMPTOTDOC = \'" << tot_doc << "\'";
if(!numero_docext.empty())
where_str << " AND PZ_NUMERO = \'" << numero_docext << "\'";
where_str << ") ";
TString& query = TPro_msk::query_string();
query << "WHERE PZ_KEYPRGINVIO = '" << keyprginvio << "' AND PZ_KEYHEADERFATT = '" << keyheaderfatt << "' AND PZ_KEYBODYFATT = '" << keybodyfatt << "'";
query << " AND " << where_str;
fp_db().sq_set_exec(query);
// Controllo che i dati corrispondano a quelli nella fattura in ingresso
TString where_str;
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\'";
if (has_tot_doc(fppro_keys))
where_str << " AND PQ_IMPTOTDOC = \'" << tot_doc << "\'";
if(!numero_docext.empty())
where_str << " AND PZ_NUMERO = \'" << numero_docext << "\'";
where_str << ") ";
TString& query = TPro_msk::query_string();
query << "WHERE PZ_KEYPRGINVIO = '" << keyprginvio << "' AND PZ_KEYHEADERFATT = '" << keyheaderfatt << "' AND PZ_KEYBODYFATT = '" << keybodyfatt << "'";
query << " AND " << where_str;
fp_db().sq_set_exec(query);
int items = fp_db().sq_items();
if(items != 1 && has_tot_doc(fppro_keys)) // Controllo se e' sbagliato solo il segno dell'importo
{
@ -2705,34 +2704,38 @@ int TPrimanota_application::save_fppro()
items = fp_db().sq_items();
}
if(has_f1_db(&msk) && items != 1)
{
warning_box(TString("Attenzione, ") << "al movimento non è stato abbinato nessun documento elettronico.\n" <<
"Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n" <<
"all'inserimento dei dati riportati sulla fattura per la corretta identificazione del documento in entrata.\n" <<
"Se possibile utilizzare il 'Riporta documento' o la contabilizzazione dal monitor delle fatture passive per evitare errori.\n"
"In caso di documento escluso dalla fatturazione elettronica ignorate questo messaggio.");
save_dbmov(true);
return pro_notsaved;
}
if(has_f1_db(&msk) && items != 1)
{
const bool forza = noyes_box("Attenzione, al movimento non e' stato abbinato nessun documento elettronico.\n"
"Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n"
"all'inserimento dei dati riportati sulla fattura per la corretta identificazione del documento in entrata.\n"
"Se possibile utilizzare il 'Riporta documento' o la contabilizzazione dal monitor delle fatture passive per evitare errori.\n\n"
"Forzare il collegamento al documento elettronico?\n"
"In caso di documento escluso dalla fatturazione elettronica rispondere 'No'.\n");
if (!forza)
{
save_dbmov(true);
return pro_notsaved;
}
}
const int numregcont = msk.get_int(F_NUMREG);
const int clifor = msk.get_int(F_CODCLIFOR);
const int numregcont = msk.get_int(F_NUMREG);
const int clifor = msk.get_int(F_CODCLIFOR);
TString update_query;
update_query << "UPDATE FPPRO00F\n" <<
"SET PZ_TIPOCF = 'F', PZ_CLIFOR = \'" << clifor << "\', PZ_DATACONT = \'" << TDate(TODAY).date2ansi() << "\', " <<
"PZ_NUMREGCONT = \'" << numregcont << "\', PZ_DATAREGCONT = \'" << data_operazione.date2ansi() << "\'\n" <<
"WHERE PZ_KEYPRGINVIO = \'" << keyprginvio << "\' AND PZ_KEYHEADERFATT = \'" << keyheaderfatt << "\' AND PZ_KEYBODYFATT = \'" << keybodyfatt << "\';";
TString update_query;
update_query << "UPDATE FPPRO00F\n" <<
"SET PZ_TIPOCF = 'F', PZ_CLIFOR = '" << clifor << "', PZ_DATACONT = '" << TDate(TODAY).date2ansi() << "', " <<
"PZ_NUMREGCONT = '" << numregcont << "', PZ_DATAREGCONT = '" << data_operazione.date2ansi() << "'\n" <<
"WHERE PZ_KEYPRGINVIO = '" << keyprginvio << "' AND PZ_KEYHEADERFATT = '" << keyheaderfatt << "' AND PZ_KEYBODYFATT = '" << keybodyfatt << "';";
fp_db().sq_set_exec(update_query);
const bool saved = fp_db().sq_commit();
if (!saved)
{
error_box("Attenzione non è stato possibile registrare la fattura nel database.");
save_dbmov(true);
}
return saved? pro_noerr : pro_notsaved;
fp_db().sq_set_exec(update_query);
const bool saved = fp_db().sq_commit();
if (!saved)
{
error_box("Attenzione non e' stato possibile registrare la fattura nel database.");
save_dbmov(true);
}
return saved? pro_noerr : pro_notsaved;
}
bool TPrimanota_application::save_dbmov(bool clean) const