Patch level : 12.0 808
Files correlati : cg2.exe, fp0.exe Commento : - Corretto salvataggio movimenti spostato in write/rewrite - Tolto controllo se F8: inutile basta avere fp e f1 - Corretto flag registrazione collegata a fppro quando apro da monito passive - Cambiato messaggio in registrazione quando si modifica una registrazione gia' collegata a fppro - Aggiunto controllo data inizio fatturazione nell'handler di DATAREG - Corretto salvataggio data inizio fatturazione: salvava un booleano invece della data (?!)
This commit is contained in:
parent
91df0c01a1
commit
a266e781dd
@ -1255,7 +1255,6 @@ int TPrimanota_application::read(TMask& m)
|
||||
return _rel->status();
|
||||
}
|
||||
|
||||
|
||||
// Trasferisce i dati da maschera a movimento di prima nota
|
||||
void TPrimanota_application::mask2rel(const TMask& m)
|
||||
{
|
||||
@ -1446,6 +1445,13 @@ void TPrimanota_application::check_saldi()
|
||||
}
|
||||
}
|
||||
|
||||
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" <<
|
||||
"Movimento registrato senza collegamento ai documenti in ingresso.");
|
||||
}
|
||||
|
||||
int TPrimanota_application::write(const TMask& m)
|
||||
{
|
||||
@ -1470,6 +1476,8 @@ int TPrimanota_application::write(const TMask& m)
|
||||
const int err = _rel->write(true);
|
||||
if (err == NOERR)
|
||||
{
|
||||
write_fppro();
|
||||
|
||||
_saldi.registra();
|
||||
check_saldi();
|
||||
|
||||
@ -1558,6 +1566,8 @@ int TPrimanota_application::rewrite(const TMask& m)
|
||||
const int err = _rel->rewrite(true);
|
||||
if (err == NOERR)
|
||||
{
|
||||
write_fppro();
|
||||
|
||||
_saldi.registra();
|
||||
check_saldi();
|
||||
|
||||
@ -1602,10 +1612,10 @@ void TPrimanota_application::clean_fppro()
|
||||
TMask& msk = curr_mask();
|
||||
const KEY last_key = msk.last_key();
|
||||
|
||||
// Controlli: solo in mod modifica; che abbia fp (no F8); che non sono in salvataggio
|
||||
// Controlli: solo in mod modifica; che abbia fp-f1 (no F8); che non sono in salvataggio
|
||||
if (_mode != MODE_MOD
|
||||
|| !has_f1_db(&msk)
|
||||
|| last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS)
|
||||
|| last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT)
|
||||
return;
|
||||
|
||||
const TString& numreg = msk.get(F_NUMREG);
|
||||
@ -1624,7 +1634,7 @@ void TPrimanota_application::set_has_f1_db(TMask* m)
|
||||
if (m->find_by_id(F_DATAREG) != NULL && !m->get(F_DATAREG).empty())
|
||||
{
|
||||
if (TDate(m->get(F_DATAREG)) >= TDate(fp_settings().get_data_start_fatt()))
|
||||
_isfp = has_module(F1AUT) && !fp_settings().get_db_indirizzo().empty() && !fp_settings().is_f8();
|
||||
_isfp = has_module(F1AUT) && !fp_settings().get_db_indirizzo().empty();
|
||||
else
|
||||
_isfp = false;
|
||||
_is_set_fpcheck = true;
|
||||
@ -2254,7 +2264,10 @@ void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query)
|
||||
}
|
||||
}
|
||||
if (_f1_ini && msk.find_by_id(FS_RECALC) != NULL)
|
||||
{
|
||||
msk.set(F_COLFPPRO, "X");
|
||||
msk.set(FS_RECALC, "");
|
||||
}
|
||||
if (_f1_liq && msk.find_by_id(F_DIFFERITA) != NULL)
|
||||
{
|
||||
TDate datadoc(msk.get(F_DATADOC)); datadoc.set_day(1);
|
||||
@ -2271,18 +2284,8 @@ bool TPrimanota_application::save(bool check_dirty)
|
||||
_swap_mask = false;
|
||||
return true;
|
||||
}
|
||||
const int fp_code = save_fppro();
|
||||
const bool saved = TRelation_application::save(check_dirty);
|
||||
|
||||
// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
|
||||
if (saved)
|
||||
{
|
||||
if(fp_code > 0 && !save_dbmov())
|
||||
message_box(TString("ATTENZIONE:") << " non è stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n" <<
|
||||
"Movimento registrato senza collegamento ai documenti in ingresso.");
|
||||
}
|
||||
|
||||
return saved;
|
||||
return TRelation_application::save(check_dirty);
|
||||
}
|
||||
|
||||
void TPrimanota_application::dump_rec(TConfig & ini, const TRectype & rec, int row, int pref)
|
||||
@ -2410,48 +2413,36 @@ int TPrimanota_application::save_fppro()
|
||||
}
|
||||
|
||||
// Anzitutto guardo la modalita' in cui sono
|
||||
// Se in modalita' inserimento continuo normalmente
|
||||
if (_mode != MODE_INS)
|
||||
// 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 && _mode == MODE_MOD)
|
||||
{
|
||||
// Se in modalita' modifica e sto salvando
|
||||
// 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_MOD && last == K_SAVE)
|
||||
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)
|
||||
{
|
||||
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(); // Svuoto riferimento doc ingresso sul mov
|
||||
}
|
||||
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
|
||||
}
|
||||
// In altre modalita' esco senza fare nulla sul db
|
||||
else return pro_notsaved;
|
||||
}
|
||||
else return pro_notsaved; // In altre modalita' esco senza fare nulla sul db
|
||||
|
||||
// Controllo che sto registrando un documento FA Fattura di Acquisto o NC Acquisto
|
||||
if (!check_causale(msk.get(F_CODCAUS)))
|
||||
return pro_notsaved;
|
||||
if (last != K_SAVE) { // Se sto uscendo avvertimento di non salvataggio e salto
|
||||
message_box("La registrazione del movimento non verrà salvata sul database.");
|
||||
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);
|
||||
const TString& numero_doc = msk.get(F_NUMDOC);
|
||||
const TString& codforn = msk.get(F_CODCLIFOR);
|
||||
const TString& stato_piva = msk.get(F_STATOPAIV);
|
||||
const TString& piva = msk.get(F_PIVA);
|
||||
const TString& tot_doc = msk.get(F_TOTALE);
|
||||
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();
|
||||
const TDate data_operazione(msk.get(F_DATAREG));
|
||||
const TDate data_documento(msk.get(F_DATADOC));
|
||||
const TString& numero_docext = msk.get(F_NUMDOCEXT);
|
||||
const TString& numero_doc = msk.get(F_NUMDOC);
|
||||
const TString& tot_doc = msk.get(F_TOTALE);
|
||||
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();
|
||||
|
||||
TString where_str;
|
||||
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\' AND PQ_IMPTOTDOC = \'" << tot_doc << "\' AND PZ_NUMERO = \'" << (!numero_docext.empty() ? numero_docext : numero_doc) << "\') ";
|
||||
@ -2461,17 +2452,21 @@ int TPrimanota_application::save_fppro()
|
||||
const int n = fp_db().sq_items();
|
||||
if (n != 1)
|
||||
{
|
||||
warning_box(TString("Attenzione, ") << "al movimento non è stato abbinato nessun documento elettronico.\n" <<
|
||||
"Per consentire una corretta archiviazione sostitutiva si consiglia di non confermare la registrazione e di procedere\n" <<
|
||||
"all'identificazione del fornitore tramite il monitor fatture passive.\n" <<
|
||||
warning_box(TString("Attenzione, ") << "al movimento non è stato abbinato nessun documento elettronico.\n" <<
|
||||
"Per consentire una corretta archiviazione sostitutiva si consiglia di non confermare la registrazione e di procedere\n" <<
|
||||
"all'identificazione del fornitore tramite il monitor fatture passive.\n" <<
|
||||
"In caso di documento escluso dalla fatturazione elettronica ignorate questo messaggio.");
|
||||
return pro_notsaved;
|
||||
}
|
||||
const int numreg = fp_db().sq_get_int("PZ_NUMREGCONT");
|
||||
if (numreg != 0)
|
||||
{
|
||||
error_box(TString("Il documento ") << data_documento.year() << " / " << numero_doc << " è già stato inserito con la registrazione numero " << numreg << "\nSalvataggio su protocollo in ingresso impossibile.");
|
||||
return pro_notsaved;
|
||||
const bool key = noyes_box(
|
||||
TString("Il documento ") << data_documento.year() << " / " << numero_doc <<
|
||||
" è già stato inserito con la registrazione numero " << numreg <<
|
||||
"\nSi desidera continuare comunque?");
|
||||
if(!key)
|
||||
return pro_notsaved;
|
||||
}
|
||||
|
||||
// Devo controllare che la data operazione sia maggiore della data ric
|
||||
@ -2497,7 +2492,7 @@ int TPrimanota_application::save_fppro()
|
||||
return saved? pro_noerr : pro_notsaved;
|
||||
}
|
||||
|
||||
bool TPrimanota_application::save_dbmov() const
|
||||
bool TPrimanota_application::save_dbmov(bool clean) const
|
||||
{
|
||||
const TMask& msk = curr_mask();
|
||||
const TString& numreg = msk.get(H_NUMREG);
|
||||
@ -2508,7 +2503,7 @@ bool TPrimanota_application::save_dbmov() const
|
||||
bool ok = mov.read() == NOERR;
|
||||
if (ok)
|
||||
{
|
||||
mov.put(MOV_KEYFPPRO, keyfppro);
|
||||
mov.put(MOV_KEYFPPRO, !clean ? keyfppro : "");
|
||||
ok = mov.rewrite() == NOERR;
|
||||
}
|
||||
return ok;
|
||||
|
@ -2262,10 +2262,13 @@ bool TPrimanota_application::caus_query_handler(TMask_field& f, KEY key)
|
||||
|
||||
void TPrimanota_application::check_fppro_fields(TMask& m)
|
||||
{
|
||||
if (!check_causale(m.get(F_CODCAUS)) || !app().has_f1_db(&m))
|
||||
const bool after_data = TDate(m.get(F_DATAREG)) >= TDate(fp_settings().get_data_start_fatt());
|
||||
if (!check_causale(m.get(F_CODCAUS)) || !app().has_f1_db(&m) || !after_data)
|
||||
{
|
||||
if(m.find_by_id(DLG_LINK) != NULL)
|
||||
m.disable(DLG_LINK);
|
||||
if (m.find_by_id(F_COLFPPRO) != NULL)
|
||||
m.hide(F_COLFPPRO);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3977,7 +3980,7 @@ bool TPro_msk::fppro_ok_handler(TMask_field& f, KEY k)
|
||||
sf.force_update();
|
||||
if(!ok)
|
||||
message_box("Nessun documento selezionato.");
|
||||
msk.stop_run(20334);
|
||||
msk.stop_run(K_QUIT);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -208,21 +208,26 @@ protected: // TApplication
|
||||
virtual void mask2ini(const TMask& msk, TConfig& ini);
|
||||
|
||||
// Metodi per aggancio FPPRO (solo su operazioni di Fattura di Acquisto)
|
||||
|
||||
// Metodo chiamato dalla write e rewrite per salvare su db fatt.
|
||||
void write_fppro();
|
||||
// Salvo dati fornitore e registrazione contabile sul db FPPRO
|
||||
int save_fppro();
|
||||
// Salva sul movimento il riferimento al documento in FPPRO
|
||||
bool save_dbmov() const;
|
||||
// Salva sul movimento il riferimento al documento in FPPRO (keys)
|
||||
bool save_dbmov(bool clean = false) const;
|
||||
// Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete)
|
||||
void clean_fppro();
|
||||
// setta variabili prima del controllo has_f1_db
|
||||
void set_has_f1_db(TMask* m);
|
||||
bool has_f1_db(TMask* m);
|
||||
|
||||
virtual bool save(bool check_dirty);
|
||||
|
||||
bool get_mask_swap_file(TFilename& name) const;
|
||||
bool force_mask_swap(const TCausale& old_caus, const TCausale& new_caus);
|
||||
|
||||
protected: // TRelation_application
|
||||
void check_f1_ini();
|
||||
void check_f1_ini(); // setto variabili se ho f1 o liq nei parametri (ini da fp)
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
virtual bool changing_mask(int mode);
|
||||
|
@ -249,7 +249,7 @@ void TFP_settings::set_no_export_pronto(const bool no_export_pronto) const
|
||||
|
||||
void TFP_settings::set_data_start_fatt(const char* date) const
|
||||
{
|
||||
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_DATASTARTFATT, date);
|
||||
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_DATASTARTFATT, date);
|
||||
}
|
||||
|
||||
void TFP_settings::remove_para_ini(int idx)
|
||||
|
Loading…
x
Reference in New Issue
Block a user