Merge branch 'R_10_00' of http://10.65.20.33/sirio/CAMPO/campo into R_10_00
This commit is contained in:
commit
2a0e4a537c
17
lib/.gitignore
vendored
Normal file
17
lib/.gitignore
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/*.pdb
|
||||||
|
/*.exp
|
||||||
|
/*.bsc
|
||||||
|
/AgaLib.lib
|
||||||
|
/cb6.lib
|
||||||
|
/gfm.lib
|
||||||
|
/pdflib.lib
|
||||||
|
/vedoc.lib
|
||||||
|
/vedocext.lib
|
||||||
|
/xi.lib
|
||||||
|
/xvaga.lib
|
||||||
|
/xvapp.lib
|
||||||
|
/ServerLib.lib
|
||||||
|
/Uno.lib
|
||||||
|
/hlw32_mc.lib
|
||||||
|
/pdflibwrap.lib
|
||||||
|
/xid.lib
|
BIN
lib/AgaLib.lib
BIN
lib/AgaLib.lib
Binary file not shown.
Binary file not shown.
BIN
lib/Uno.lib
BIN
lib/Uno.lib
Binary file not shown.
BIN
lib/cb6.exp
BIN
lib/cb6.exp
Binary file not shown.
BIN
lib/cb6.lib
BIN
lib/cb6.lib
Binary file not shown.
BIN
lib/gfm.exp
BIN
lib/gfm.exp
Binary file not shown.
BIN
lib/gfm.lib
BIN
lib/gfm.lib
Binary file not shown.
BIN
lib/hlw32_mc.lib
BIN
lib/hlw32_mc.lib
Binary file not shown.
BIN
lib/pdflib.exp
BIN
lib/pdflib.exp
Binary file not shown.
BIN
lib/pdflib.lib
BIN
lib/pdflib.lib
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/vedoc.lib
BIN
lib/vedoc.lib
Binary file not shown.
BIN
lib/vedocext.lib
BIN
lib/vedocext.lib
Binary file not shown.
BIN
lib/xi.bsc
BIN
lib/xi.bsc
Binary file not shown.
BIN
lib/xi.exp
BIN
lib/xi.exp
Binary file not shown.
BIN
lib/xi.lib
BIN
lib/xi.lib
Binary file not shown.
BIN
lib/xid.exp
BIN
lib/xid.exp
Binary file not shown.
BIN
lib/xid.lib
BIN
lib/xid.lib
Binary file not shown.
BIN
lib/xvaga.bsc
BIN
lib/xvaga.bsc
Binary file not shown.
BIN
lib/xvaga.exp
BIN
lib/xvaga.exp
Binary file not shown.
BIN
lib/xvaga.lib
BIN
lib/xvaga.lib
Binary file not shown.
BIN
lib/xvapp.lib
BIN
lib/xvapp.lib
Binary file not shown.
@ -28,7 +28,9 @@ enum
|
|||||||
pro_err = -86552,
|
pro_err = -86552,
|
||||||
pro_noerr = 1,
|
pro_noerr = 1,
|
||||||
pro_notsaved = 0,
|
pro_notsaved = 0,
|
||||||
pro_nofp = -1
|
pro_nofp = -1,
|
||||||
|
pro_dataric_err = -2,
|
||||||
|
pro_numreg_err = -3
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -1449,7 +1451,9 @@ void TPrimanota_application::write_fppro()
|
|||||||
{
|
{
|
||||||
// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
|
// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
|
||||||
if (save_fppro() > 0 && !save_dbmov())
|
if (save_fppro() > 0 && !save_dbmov())
|
||||||
message_box(TString("ATTENZIONE:") << " non è stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n" <<
|
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.");
|
"Movimento registrato senza collegamento ai documenti in ingresso.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1463,10 +1467,44 @@ bool TPrimanota_application::has_tot_doc(TToken_string& fppro_keys)
|
|||||||
return tot.full() && real(tot) != 0;
|
return tot.full() && real(tot) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TPrimanota_application::controlli_f1(const TMask& m)
|
||||||
|
{
|
||||||
|
if (m.find_by_id(F_PROKEY) != NULL && m.get(F_PROKEY).full() && has_f1_db((TMask*)&m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS)))
|
||||||
|
{
|
||||||
|
TToken_string keys(m.get(F_PROKEY), ';');
|
||||||
|
const TDate dataoraric = fppro_db().set_keys(keys).get_dataorarioric();
|
||||||
|
// Devo controllare che la data operazione sia maggiore della data ric
|
||||||
|
const TDate data_operazione(m.get(F_DATAREG));
|
||||||
|
if (data_operazione < dataoraric)
|
||||||
|
return pro_dataric_err;
|
||||||
|
const int numreg = fppro_db().set_keys(keys).get_numregcont();
|
||||||
|
if (numreg != 0)
|
||||||
|
{
|
||||||
|
const TDate data_documento(m.get(F_DATADOC));
|
||||||
|
TString msg; msg << "Attenzione il documento " << data_documento.year() << " / " << m.get(F_NUMDOCEXT) <<
|
||||||
|
" appena registrato e' gia' stato inserito con la registrazione numero " << numreg <<
|
||||||
|
"\nSe si vuole registrare questo documento elettronico, scollegarlo prima dalla precedente registrazione.";
|
||||||
|
error_box(msg);
|
||||||
|
return pro_numreg_err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//app().curr_mask().set(FS_RECALC, "");
|
||||||
|
return pro_noerr;
|
||||||
|
}
|
||||||
|
|
||||||
int TPrimanota_application::write(const TMask& m)
|
int TPrimanota_application::write(const TMask& m)
|
||||||
{
|
{
|
||||||
static int lasterr = NOERR;
|
static int lasterr = NOERR;
|
||||||
|
|
||||||
|
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.");
|
||||||
|
case pro_numreg_err:
|
||||||
|
return _isnowarning;
|
||||||
|
default: case pro_noerr: break;
|
||||||
|
}
|
||||||
|
|
||||||
const long numreg = m.get_long(F_NUMREG);
|
const long numreg = m.get_long(F_NUMREG);
|
||||||
if (numreg > _lastreg) _lastreg = numreg; // Aggiorna ultima registrazione libera
|
if (numreg > _lastreg) _lastreg = numreg; // Aggiorna ultima registrazione libera
|
||||||
|
|
||||||
@ -1569,10 +1607,19 @@ int TPrimanota_application::write(const TMask& m)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int TPrimanota_application::rewrite(const TMask& m)
|
int TPrimanota_application::rewrite(const TMask& m)
|
||||||
{
|
{
|
||||||
mask2rel(m);
|
mask2rel(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.");
|
||||||
|
case pro_numreg_err:
|
||||||
|
return _isnowarning;
|
||||||
|
default: case pro_noerr: break;
|
||||||
|
}
|
||||||
|
|
||||||
const int err = _rel->rewrite(true);
|
const int err = _rel->rewrite(true);
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
{
|
{
|
||||||
@ -2275,6 +2322,7 @@ void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query)
|
|||||||
//msk.set(F_TOTALE, calcola_imp());
|
//msk.set(F_TOTALE, calcola_imp());
|
||||||
msk.set(F_COLFPPRO, "X");
|
msk.set(F_COLFPPRO, "X");
|
||||||
msk.set(FS_RECALC, "");
|
msk.set(FS_RECALC, "");
|
||||||
|
set_scad_f1(msk);
|
||||||
}
|
}
|
||||||
if (_f1_liq && msk.find_by_id(F_DIFFERITA) != NULL)
|
if (_f1_liq && msk.find_by_id(F_DIFFERITA) != NULL)
|
||||||
{
|
{
|
||||||
@ -2285,6 +2333,30 @@ void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TPrimanota_application::set_scad_f1(TMask& m)
|
||||||
|
{
|
||||||
|
const TString& cp = m.get(F_CODPAG);
|
||||||
|
const TString& dt = m.get(F_DATADOC);
|
||||||
|
set_pagamento(cp, dt);
|
||||||
|
set_totale_pagamento(false);
|
||||||
|
|
||||||
|
TPagamento& pag = pagamento();
|
||||||
|
if (m.field(FS_RECALC).enabled())
|
||||||
|
{
|
||||||
|
m.set(FS_RDIFFER, "1");
|
||||||
|
m.set(FS_NAMEPAG, pag.name());
|
||||||
|
m.set(FS_TIPOPR, pag.desc_tpr());
|
||||||
|
m.set(FS_MCOMM, pag.mese_commerciale() ? "X" : "");
|
||||||
|
m.set(FS_RECALC, "");
|
||||||
|
m.set(FS_NRATE, pag.n_rate());
|
||||||
|
}
|
||||||
|
pag.set_rate_auto();
|
||||||
|
TSheet_field& ps = m.sfield(FS_RATESHEET);
|
||||||
|
pag.set_sheet(ps); // prepara lo sheet
|
||||||
|
set_banche(m);
|
||||||
|
_pag_rows = ps.rows_array(); // copia sheet
|
||||||
|
}
|
||||||
|
|
||||||
bool TPrimanota_application::save(bool check_dirty)
|
bool TPrimanota_application::save(bool check_dirty)
|
||||||
{
|
{
|
||||||
if (_swap_mask == true)
|
if (_swap_mask == true)
|
||||||
@ -2414,11 +2486,6 @@ int TPrimanota_application::save_fppro()
|
|||||||
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
|
// 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))
|
if (!has_f1_db(&msk))
|
||||||
return pro_nofp;
|
return pro_nofp;
|
||||||
if (!fp_db().sq_is_connect())
|
|
||||||
{
|
|
||||||
message_box("Attenzione connesione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata.");
|
|
||||||
return pro_nofp;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Anzitutto guardo la modalita' in cui sono
|
// Anzitutto guardo la modalita' in cui sono
|
||||||
// Se in modalita' inserimento continuo normalmente o in mod. modifica
|
// Se in modalita' inserimento continuo normalmente o in mod. modifica
|
||||||
@ -2448,9 +2515,8 @@ int TPrimanota_application::save_fppro()
|
|||||||
const TDate data_operazione(msk.get(F_DATAREG));
|
const TDate data_operazione(msk.get(F_DATAREG));
|
||||||
const TDate data_documento(msk.get(F_DATADOC));
|
const TDate data_documento(msk.get(F_DATADOC));
|
||||||
const TString& numero_docext = msk.get(F_NUMDOCEXT);
|
const TString& numero_docext = msk.get(F_NUMDOCEXT);
|
||||||
const TString& numero_doc = msk.get(F_NUMDOC);
|
|
||||||
real tot_doc = msk.get_real(F_TOTALE);
|
real tot_doc = msk.get_real(F_TOTALE);
|
||||||
real ritenute = msk.get_real(F_RITFIS);
|
const real ritenute = msk.get_real(F_RITFIS);
|
||||||
tot_doc += ritenute;
|
tot_doc += ritenute;
|
||||||
TToken_string fppro_keys(msk.get(F_PROKEY), ';');
|
TToken_string fppro_keys(msk.get(F_PROKEY), ';');
|
||||||
const TString& keyprginvio = fppro_keys.get();
|
const TString& keyprginvio = fppro_keys.get();
|
||||||
@ -2459,35 +2525,25 @@ int TPrimanota_application::save_fppro()
|
|||||||
|
|
||||||
// Controllo che i dati corrispondano a quelli nella fattura in ingresso
|
// Controllo che i dati corrispondano a quelli nella fattura in ingresso
|
||||||
TString where_str;
|
TString where_str;
|
||||||
|
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\'";
|
||||||
if (has_tot_doc(fppro_keys))
|
if (has_tot_doc(fppro_keys))
|
||||||
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\' AND PQ_IMPTOTDOC = \'" << tot_doc << "\' AND PZ_NUMERO = \'" << (!numero_docext.empty() ? numero_docext : numero_doc) << "\') ";
|
where_str << " AND PQ_IMPTOTDOC = \'" << tot_doc << "\'";
|
||||||
else
|
if(!numero_docext.empty())
|
||||||
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\' AND PZ_NUMERO = \'" << (!numero_docext.empty() ? numero_docext : numero_doc) << "\') ";
|
where_str << " AND PZ_NUMERO = \'" << numero_docext << "\'";
|
||||||
TString& query = TPro_msk::query_fppro(keyprginvio, keyheaderfatt, keybodyfatt, where_str);
|
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);
|
fp_db().sq_set_exec(query);
|
||||||
if(has_f1_db(&msk) && fp_db().sq_items() != 1)
|
if(has_f1_db(&msk) && fp_db().sq_items() != 1)
|
||||||
{
|
{
|
||||||
warning_box(TString("Attenzione, ") << "al movimento non è stato abbinato nessun documento elettronico.\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" <<
|
"Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n" <<
|
||||||
"all'identificazione del fornitore tramite il monitor fatture passive.\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.");
|
"In caso di documento escluso dalla fatturazione elettronica ignorate questo messaggio.");
|
||||||
return pro_notsaved;
|
save_dbmov(true);
|
||||||
}
|
|
||||||
const int numreg = fp_db().sq_get_int("PZ_NUMREGCONT");
|
|
||||||
if (numreg != 0)
|
|
||||||
{
|
|
||||||
TString msg; msg << "Attenzione il documento " << data_documento.year() << " / " << numero_doc <<
|
|
||||||
" appena registrato e' gia' stato inserito con la registrazione numero " << numreg <<
|
|
||||||
"\nControllare e nel caso provvedere a correggere l'associazione del movimento ai documenti in ingresso.";
|
|
||||||
warning_box(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Devo controllare che la data operazione sia maggiore della data ric
|
|
||||||
const TDate dataoraric = fp_db().sq_get_date("P1_DATAORARIC");
|
|
||||||
if(data_operazione < dataoraric)
|
|
||||||
{
|
|
||||||
error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
|
|
||||||
return pro_notsaved;
|
return pro_notsaved;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2496,13 +2552,17 @@ int TPrimanota_application::save_fppro()
|
|||||||
|
|
||||||
TString update_query;
|
TString update_query;
|
||||||
update_query << "UPDATE FPPRO00F\n" <<
|
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" <<
|
"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 << "\';";
|
"WHERE PZ_KEYPRGINVIO = \'" << keyprginvio << "\' AND PZ_KEYHEADERFATT = \'" << keyheaderfatt << "\' AND PZ_KEYBODYFATT = \'" << keybodyfatt << "\';";
|
||||||
|
|
||||||
fp_db().sq_set_exec(update_query);
|
fp_db().sq_set_exec(update_query);
|
||||||
const bool saved = fp_db().sq_commit();
|
const bool saved = fp_db().sq_commit();
|
||||||
if (!saved)
|
if (!saved)
|
||||||
|
{
|
||||||
error_box("Attenzione non è stato possibile registrare la fattura nel database.");
|
error_box("Attenzione non è stato possibile registrare la fattura nel database.");
|
||||||
|
save_dbmov(true);
|
||||||
|
}
|
||||||
return saved? pro_noerr : pro_notsaved;
|
return saved? pro_noerr : pro_notsaved;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1760,7 +1760,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
|
|||||||
real pimponibile(pag.imponibile(inv));
|
real pimponibile(pag.imponibile(inv));
|
||||||
pimponibile.round(pag.round(inv));
|
pimponibile.round(pag.round(inv));
|
||||||
|
|
||||||
if (pimposta != imposta || pimponibile != imponibile)
|
if ((pimposta != imposta || pimponibile != imponibile) && !a.has_f1_db(&m))
|
||||||
a.set_scadenze(m); // Ricalcola rate
|
a.set_scadenze(m); // Ricalcola rate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3847,7 +3847,7 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::set_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||||
{
|
{
|
||||||
TSheet_field& sf = cg_msk.sfield(F_SHEETIVA);
|
TSheet_field& sf = cg_msk.sfield(F_SHEETIVA);
|
||||||
const vector<TPro_msk::riga_iva_s>& righe = msk->get_righeiva();
|
const vector<TPro_msk::riga_iva_s>& righe = msk->get_righeiva();
|
||||||
@ -3867,22 +3867,28 @@ void TPrimanota_application::set_righe_iva_f1(TMask& cg_msk, const shared_ptr<TP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||||
bool TPrimanota_application::set_scadenze_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
|
||||||
{
|
{
|
||||||
TSheet_field& sf = cg_msk.sfield(FS_RATESHEET);
|
TSheet_field& sf = cg_msk.sfield(FS_RATESHEET);
|
||||||
|
int items = sf.items();
|
||||||
const vector<TPro_msk::scadenza_s>& righe = msk->get_scadenze();
|
const vector<TPro_msk::scadenza_s>& righe = msk->get_scadenze();
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (auto it = righe.begin(); it != righe.end(); ++it, ++i)
|
for (auto it = righe.begin(); it != righe.end(); ++it, ++i)
|
||||||
{
|
{
|
||||||
TToken_string& row = sf.row(i);
|
TToken_string& row = app().pags().row(i);
|
||||||
|
|
||||||
|
if(i >= items)
|
||||||
|
pag_notify(sf, i, K_CTRL+K_INS);
|
||||||
|
|
||||||
|
pag_notify(sf, i, K_SPACE);
|
||||||
row.add(it->data, cid2index(101));
|
row.add(it->data, cid2index(101));
|
||||||
row.add(it->importo, cid2index(102));
|
row.add(it->importo, cid2index(102));
|
||||||
|
pag_notify(sf, i, K_ENTER);
|
||||||
}
|
}
|
||||||
return !righe.empty();
|
return !righe.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::set_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||||
{
|
{
|
||||||
TLocalisamfile clifo(LF_CLIFO);
|
TLocalisamfile clifo(LF_CLIFO);
|
||||||
clifo.setkey(5);
|
clifo.setkey(5);
|
||||||
@ -3913,6 +3919,7 @@ void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk
|
|||||||
{
|
{
|
||||||
totale -= rit;
|
totale -= rit;
|
||||||
cg_msk.set(F_RITFIS, rit);
|
cg_msk.set(F_RITFIS, rit);
|
||||||
|
app().add_cgs_ritenute('F');
|
||||||
}
|
}
|
||||||
cg_msk.set(F_TOTALE, totale);
|
cg_msk.set(F_TOTALE, totale);
|
||||||
}
|
}
|
||||||
@ -3923,11 +3930,12 @@ void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPr
|
|||||||
cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7));
|
cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7));
|
||||||
cg_msk.set(F_DATADOC, msk->get_datadoc());
|
cg_msk.set(F_DATADOC, msk->get_datadoc());
|
||||||
if (!cg_msk.get(F_CODCLIFOR).full() && msk->get_numdoc().full())
|
if (!cg_msk.get(F_CODCLIFOR).full() && msk->get_numdoc().full())
|
||||||
set_clifo(cg_msk, msk);
|
write_clifo(cg_msk, msk);
|
||||||
set_righe_iva_f1(cg_msk, msk);
|
write_righe_iva_f1(cg_msk, msk);
|
||||||
set_totale(cg_msk, msk);
|
set_totale(cg_msk, msk);
|
||||||
if (set_scadenze_f1(cg_msk, msk))
|
cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE);
|
||||||
cg_msk.set(FS_RECALC, "");
|
if(write_scad_f1(cg_msk, msk))
|
||||||
|
app().set_scad_f1(cg_msk);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
||||||
@ -3950,7 +3958,11 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
|||||||
// Riporto dati FPPRO su maschera Prima Nota (solo se hai F1)
|
// Riporto dati FPPRO su maschera Prima Nota (solo se hai F1)
|
||||||
// Se non hai F1 collego senza riportarti i dati (solo le chiavi db)
|
// Se non hai F1 collego senza riportarti i dati (solo le chiavi db)
|
||||||
if (msk->should_bring_back())
|
if (msk->should_bring_back())
|
||||||
|
{
|
||||||
riporta_dati_f1(cg_msk, msk);
|
riporta_dati_f1(cg_msk, msk);
|
||||||
|
//TConfig ini("cg2CONTAB0001.ini");
|
||||||
|
//app().ini2mask(ini, cg_msk, false);
|
||||||
|
}
|
||||||
cg_msk.set(F_PROKEY, msk->get_fpprokeys());
|
cg_msk.set(F_PROKEY, msk->get_fpprokeys());
|
||||||
is_collegato(cg_msk.field(F_COLFPPRO));
|
is_collegato(cg_msk.field(F_COLFPPRO));
|
||||||
cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA));
|
cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA));
|
||||||
@ -4029,8 +4041,6 @@ bool TPro_msk::load_fppro_mask(TMask* msk, KEY k)
|
|||||||
row.add(fp_db().sq_get("PZ_TIPOPROT"));
|
row.add(fp_db().sq_get("PZ_TIPOPROT"));
|
||||||
row.add(fp_db().sq_get("PZ_NUMPROT"));
|
row.add(fp_db().sq_get("PZ_NUMPROT"));
|
||||||
row.add(keys);
|
row.add(keys);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
sf.force_update();
|
sf.force_update();
|
||||||
sf.show();
|
sf.show();
|
||||||
@ -4204,12 +4214,6 @@ void TPro_msk::add_scad(const TDate& date, const real& importo)
|
|||||||
_scadenze.insert(_scadenze.end(), { date, importo });
|
_scadenze.insert(_scadenze.end(), { date, importo });
|
||||||
}
|
}
|
||||||
|
|
||||||
TString& TPro_msk::query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt,
|
|
||||||
const TString& where_str)
|
|
||||||
{
|
|
||||||
return query_fppro("", "", "", where_str, "", keyprginvio, keyheaderfatt, keybodyfatt, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
TString& TPro_msk::query_fppro(const TString& codforn, const TString& date)
|
TString& TPro_msk::query_fppro(const TString& codforn, const TString& date)
|
||||||
{
|
{
|
||||||
return query_fppro(codforn, "", "", "", date, "", "", "", true, false);
|
return query_fppro(codforn, "", "", "", date, "", "", "", true, false);
|
||||||
@ -4271,15 +4275,30 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
|
|||||||
{
|
{
|
||||||
query << " PZ_DATA = '" << TDate(date).date2ansi() << "' ";
|
query << " PZ_DATA = '" << TDate(date).date2ansi() << "' ";
|
||||||
if (order)
|
if (order)
|
||||||
query << "\nORDER BY P1_DATAORARIC ASC";
|
query << "\nORDER BY P1_DATAORARIC ASC, PZ_TIPOPROT ASC, PZ_NUMPROT ASC";
|
||||||
query << ";";
|
query << ";";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
query.cut(0) << query.left(query.len() - 6);
|
query.cut(0) << query.left(query.len() - 6);
|
||||||
|
query << "\nORDER BY P1_DATAORARIC ASC, PZ_TIPOPROT ASC, PZ_NUMPROT ASC;";
|
||||||
|
}
|
||||||
|
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TString& TPro_msk::query_string()
|
||||||
|
{
|
||||||
|
static TString query;
|
||||||
|
query.cut(0) << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " <<
|
||||||
|
"PZ_NUMPROT, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" <<
|
||||||
|
"FROM PAA0200F \nJOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
|
||||||
|
"JOIN PAA0100F \nON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" <<
|
||||||
|
"JOIN PAA2700F \nON P2_KEYPRGINVIO = PQ_KEYPRGINVIO AND P2_KEYHEADERFATT = PQ_KEYHEADERFATT AND P2_KEYBODYFATT = PQ_KEYBODYFATT\n" <<
|
||||||
|
"JOIN PAA0700F \nON P7_KEYPRGINVIO = PQ_KEYPRGINVIO AND P7_KEYHEADERFATT = PQ_KEYHEADERFATT AND P7_KEYBODYFATT = PQ_KEYBODYFATT\n";
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
void TPro_msk::abilita_piva(TMask* msk)
|
void TPro_msk::abilita_piva(TMask* msk)
|
||||||
{
|
{
|
||||||
if (msk->get_bool(F_ENABSEARCH))
|
if (msk->get_bool(F_ENABSEARCH))
|
||||||
|
@ -185,9 +185,9 @@ class TPrimanota_application : public TRelation_application
|
|||||||
|
|
||||||
static bool quadratura_handler(TMask_field& f, KEY k); // Bottone quadratura per ATS
|
static bool quadratura_handler(TMask_field& f, KEY k); // Bottone quadratura per ATS
|
||||||
|
|
||||||
static void set_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
static void write_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
static bool set_scadenze_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
static bool write_scad_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
static void set_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
static void write_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
static void set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
static void set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
static void riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
static void riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||||
// Handlers per aggancio FPPRO
|
// Handlers per aggancio FPPRO
|
||||||
@ -210,6 +210,7 @@ protected: // TApplication
|
|||||||
virtual void print();
|
virtual void print();
|
||||||
void dump_rec(TConfig & ini, const TRectype & rec, int row = 0, int pref = 0);
|
void dump_rec(TConfig & ini, const TRectype & rec, int row = 0, int pref = 0);
|
||||||
void dump_fatt(TConfig& ini, TPartita & game, int rigafatt, int pref = 0);
|
void dump_fatt(TConfig& ini, TPartita & game, int rigafatt, int pref = 0);
|
||||||
|
void set_scad_f1(TMask& m);
|
||||||
virtual void ini2mask(TConfig& ini, TMask& msk, bool query);
|
virtual void ini2mask(TConfig& ini, TMask& msk, bool query);
|
||||||
virtual void mask2ini(const TMask& msk, TConfig& ini);
|
virtual void mask2ini(const TMask& msk, TConfig& ini);
|
||||||
|
|
||||||
@ -227,6 +228,8 @@ protected: // TApplication
|
|||||||
// setta variabili prima del controllo has_f1_db
|
// setta variabili prima del controllo has_f1_db
|
||||||
void set_has_f1_db(TMask* m);
|
void set_has_f1_db(TMask* m);
|
||||||
bool has_f1_db(TMask* m);
|
bool has_f1_db(TMask* m);
|
||||||
|
// Controlli prima di write e rewrite
|
||||||
|
int controlli_f1(const TMask& m);
|
||||||
|
|
||||||
virtual bool save(bool check_dirty);
|
virtual bool save(bool check_dirty);
|
||||||
|
|
||||||
@ -459,11 +462,10 @@ public:
|
|||||||
void add_scad(const TDate& date, const real& importo);
|
void add_scad(const TDate& date, const real& importo);
|
||||||
bool should_bring_back() const { return _riporta; }
|
bool should_bring_back() const { return _riporta; }
|
||||||
|
|
||||||
|
|
||||||
static TString& query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, const TString& where_str);
|
|
||||||
static TString& query_fppro(const TString& codforn, const TString& date);
|
static TString& query_fppro(const TString& codforn, const TString& date);
|
||||||
static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date);
|
static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date);
|
||||||
static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false);
|
static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false);
|
||||||
|
static TString& query_string();
|
||||||
static void abilita_piva(TMask* msk);
|
static void abilita_piva(TMask* msk);
|
||||||
//bool is_fp();
|
//bool is_fp();
|
||||||
// Carica documenti FPPRO sulla maschera
|
// Carica documenti FPPRO sulla maschera
|
||||||
|
@ -91,18 +91,18 @@ SPREADSHEET F_SHEETFPPROS 0 15
|
|||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 0 8 ""
|
PROMPT 0 8 ""
|
||||||
ITEM " "
|
ITEM " "
|
||||||
ITEM "Tipo Doc@7"
|
ITEM "Tipo Doc@5"
|
||||||
ITEM "Data Ricezione"
|
ITEM "Data\nRicezione@8"
|
||||||
ITEM "Data Doc."
|
ITEM "Data\nDoc.@8"
|
||||||
ITEM "Importo Totale"
|
ITEM "Totale\nDocumento@7"
|
||||||
ITEM "Ritenute d'acconto"
|
ITEM "Ritenute\nfiscali@6"
|
||||||
ITEM "Numero"
|
ITEM "Numero@14"
|
||||||
ITEM "Paese"
|
ITEM "Paese@4"
|
||||||
ITEM "P. IVA"
|
ITEM "P. IVA@10"
|
||||||
ITEM "Cod. Fiscale"
|
ITEM "Cod. Fiscale@14"
|
||||||
ITEM "Tipo Protocollo\nin ingresso"
|
ITEM "Tipo Protocollo\nin ingresso@10"
|
||||||
ITEM "Progressivo di ingresso"
|
ITEM "Progressivo\ndi ingresso@10"
|
||||||
ITEM "Chiave FPPRO@80"
|
ITEM "Chiave FPPRO@40"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_NUMEROI 20
|
STRING F_NUMEROI 20
|
||||||
|
@ -155,6 +155,23 @@ TDate TFppro::get_data_first_doc() const
|
|||||||
return _db->sq_get_date("DATA");
|
return _db->sq_get_date("DATA");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TDate TFppro::get_dataorarioric() const
|
||||||
|
{
|
||||||
|
TString query;
|
||||||
|
query << "SELECT P1_DATAORARIC \nFROM PAA0100F \n" <<
|
||||||
|
"WHERE P1_KEYPRGINVIO = '" << _keys.prginvio << "' AND P1_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P1_KEYBODYFATT = '" << _keys.bodyfatt << "'";
|
||||||
|
_db->sq_set_exec(query);
|
||||||
|
return _db->sq_get_date("P1_DATAORARIC");
|
||||||
|
}
|
||||||
|
|
||||||
|
int TFppro::get_numregcont() const
|
||||||
|
{
|
||||||
|
TString query;
|
||||||
|
query << "SELECT PZ_NUMREGCONT FROM FPPRO00F\n" << where_str();
|
||||||
|
_db->sq_set_exec(query);
|
||||||
|
return _db->sq_get_int("PZ_NUMREGCONT");
|
||||||
|
}
|
||||||
|
|
||||||
bool TFppro::set_query()
|
bool TFppro::set_query()
|
||||||
{
|
{
|
||||||
if (_keys_setted)
|
if (_keys_setted)
|
||||||
@ -167,8 +184,8 @@ bool TFppro::set_query()
|
|||||||
|
|
||||||
const char* TFppro::where_str() const
|
const char* TFppro::where_str() const
|
||||||
{
|
{
|
||||||
TString str;
|
static TString str;
|
||||||
str << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'";
|
str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'";
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,11 +54,14 @@ public:
|
|||||||
TDate get_datareg(TToken_string& keys);
|
TDate get_datareg(TToken_string& keys);
|
||||||
real get_ritenute() const;
|
real get_ritenute() const;
|
||||||
TDate get_data_first_doc() const;
|
TDate get_data_first_doc() const;
|
||||||
|
TDate get_dataorarioric() const;
|
||||||
|
int get_numregcont() const;
|
||||||
// Setters
|
// Setters
|
||||||
bool set_query();
|
bool set_query();
|
||||||
TFppro& set_keys(TToken_string& keys);
|
TFppro& set_keys(TToken_string& keys);
|
||||||
TFppro& set_keys(keys_s keys);
|
TFppro& set_keys(keys_s keys);
|
||||||
|
|
||||||
|
|
||||||
static bool set_connection(SSimple_query& s);
|
static bool set_connection(SSimple_query& s);
|
||||||
|
|
||||||
TFppro();
|
TFppro();
|
||||||
|
@ -743,14 +743,13 @@ bool TDoc2Paf::create()
|
|||||||
{
|
{
|
||||||
open_files(LF_TAB, LF_TABCOM, LF_TABMOD, LF_ANAG,
|
open_files(LF_TAB, LF_TABCOM, LF_TABMOD, LF_ANAG,
|
||||||
LF_CLIFO, LF_CFVEN, LF_CFBAN, LF_NDITTE,
|
LF_CLIFO, LF_CFVEN, LF_CFBAN, LF_NDITTE,
|
||||||
LF_DOC, LF_RIGHEDOC, 0);
|
LF_DOC, LF_RIGHEDOC, LF_CODCORR, LF_ANAMAG, 0);
|
||||||
|
|
||||||
TRectype cfven(LF_CFVEN);
|
const TRectype cfven(LF_CFVEN);
|
||||||
if (cfven.length(CFV_PADESTIN) != 7) // Nuova lunghezza per privati
|
if (cfven.length(CFV_PADESTIN) != 7) // Nuova lunghezza per privati
|
||||||
return error_box(TR("Database non convertito per fatturazione F.P."));
|
return error_box(TR("Database non convertito per fatturazione F.P."));
|
||||||
|
|
||||||
return check_tables() && TSkeleton_application::create();
|
return check_tables() && TSkeleton_application::create();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TDoc2Paf::destroy()
|
bool TDoc2Paf::destroy()
|
||||||
|
@ -388,7 +388,8 @@ private:
|
|||||||
enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq, and, or };
|
enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq, and, or };
|
||||||
|
|
||||||
// Etrattori
|
// Etrattori
|
||||||
static void extract_info(const TString& expr, TString& tabella, TString& campo, TToken_string* search);
|
static void extract_info(const TString& expr, TString& tabella, TString& campo);
|
||||||
|
static void extract_info(const TString& expr, TString& tabella, TString& campo, TToken_string& search, int& key);
|
||||||
static bool calc_table(const TString& tabella, int& file);
|
static bool calc_table(const TString& tabella, int& file);
|
||||||
static void split_condition(const TString& cond, TString& cond_sx, TString& cond_dx, TFP_operator& symb);
|
static void split_condition(const TString& cond, TString& cond_sx, TString& cond_dx, TFP_operator& symb);
|
||||||
static TVariant& get_value(const TRectype& rec, const TString& campo);
|
static TVariant& get_value(const TRectype& rec, const TString& campo);
|
||||||
|
@ -51,6 +51,7 @@ bool set_connection(SSimple_query& s)
|
|||||||
#endif
|
#endif
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSimple_query& fp_db()
|
SSimple_query& fp_db()
|
||||||
{
|
{
|
||||||
static SSimple_query* db = nullptr;
|
static SSimple_query* db = nullptr;
|
||||||
@ -63,6 +64,7 @@ SSimple_query& fp_db()
|
|||||||
}
|
}
|
||||||
return *db;
|
return *db;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool run_fp_psw_mask()
|
bool run_fp_psw_mask()
|
||||||
{
|
{
|
||||||
static TMask* m;
|
static TMask* m;
|
||||||
|
@ -255,8 +255,6 @@ TFP_custom_cache::TFP_custom_cache()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* TFP_expression
|
* TFP_expression
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
@ -364,7 +362,7 @@ bool TFP_expression::check_condition(const TString& cond, TRiga_documento& rdoc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TFP_expression::extract_info(const TString& expr, TString& tabella, TString& campo, TToken_string* search)
|
void TFP_expression::extract_info(const TString& expr, TString& tabella, TString& campo)
|
||||||
{
|
{
|
||||||
// Prendo la stringa pulita della parte sinistra
|
// Prendo la stringa pulita della parte sinistra
|
||||||
TString clean_expr = expr.mid(expr.find('(') + 1);
|
TString clean_expr = expr.mid(expr.find('(') + 1);
|
||||||
@ -377,13 +375,38 @@ void TFP_expression::extract_info(const TString& expr, TString& tabella, TString
|
|||||||
// Trimmare sempre come se non sapessi fare altro nella vita
|
// Trimmare sempre come se non sapessi fare altro nella vita
|
||||||
tabella.cut(0) << info.remove(0); tabella.trim();
|
tabella.cut(0) << info.remove(0); tabella.trim();
|
||||||
campo.cut(0) << info.remove(0); campo.trim();
|
campo.cut(0) << info.remove(0); campo.trim();
|
||||||
if (search != nullptr)
|
|
||||||
{
|
|
||||||
// Prendo il resto
|
|
||||||
search->cut(0) << info;
|
|
||||||
search->trim();
|
|
||||||
search->restart();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TFP_expression::extract_info(const TString& expr, TString& tabella, TString& campo, TToken_string& search, int& key)
|
||||||
|
{
|
||||||
|
// Prendo la stringa pulita della parte sinistra
|
||||||
|
TString clean_expr = expr.mid(expr.find('(') + 1);
|
||||||
|
// Tolgo eventuali spazi ai lati
|
||||||
|
clean_expr.trim();
|
||||||
|
// Tolgo la virgola finale
|
||||||
|
clean_expr.rtrim(1);
|
||||||
|
TToken_string info(clean_expr, ',');
|
||||||
|
|
||||||
|
// Trimmare sempre come se non sapessi fare altro nella vita
|
||||||
|
tabella.cut(0) << info.remove(0); tabella.trim();
|
||||||
|
if(tabella.contains('.'))
|
||||||
|
{
|
||||||
|
TToken_string app(tabella, '.');
|
||||||
|
tabella = app.get();
|
||||||
|
key = atoi(app.get());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
key = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
campo.cut(0) << info.remove(0); campo.trim();
|
||||||
|
|
||||||
|
// Prendo il resto e lo devolvo nella ricerca
|
||||||
|
search.cut(0) << info;
|
||||||
|
search.trim();
|
||||||
|
search.restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TFP_expression::calc_table(const TString& tabella, int& file)
|
bool TFP_expression::calc_table(const TString& tabella, int& file)
|
||||||
@ -549,17 +572,26 @@ TVariant& TFP_expression::parse_var(const TString& str)
|
|||||||
TVariant& TFP_expression::parse_read(const TString& str, TRiga_documento& rdoc)
|
TVariant& TFP_expression::parse_read(const TString& str, TRiga_documento& rdoc)
|
||||||
{
|
{
|
||||||
TString tabella, campo;
|
TString tabella, campo;
|
||||||
extract_info(str, tabella, campo, nullptr);
|
extract_info(str, tabella, campo);
|
||||||
return do_read(tabella, campo, rdoc);
|
return do_read(tabella, campo, rdoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
TVariant& TFP_expression::do_read(const TString& tabella, const TString& campo, TRiga_documento& rdoc)
|
TVariant& TFP_expression::do_read(const TString& tabella, const TString& campo, TRiga_documento& rdoc)
|
||||||
{
|
{
|
||||||
|
const TDocumento& doc = rdoc.doc();
|
||||||
// Prima di tutto controllo se è una delle tabelle multitracciato che supporto
|
// Prima di tutto controllo se è una delle tabelle multitracciato che supporto
|
||||||
if(tabella == "%TIP")
|
if(tabella == "%TIP")
|
||||||
{
|
{
|
||||||
return get_value(rdoc.doc().tipo(), campo);
|
return get_value(doc.tipo(), campo);
|
||||||
|
}
|
||||||
|
if(tabella == "%NUM")
|
||||||
|
{
|
||||||
|
return get_value(doc.codice_numerazione(), campo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(tabella == "%CPG")
|
||||||
|
{
|
||||||
|
return get_value(cache().get("%CPG", doc.get(DOC_CODPAG)), campo);
|
||||||
}
|
}
|
||||||
|
|
||||||
int file;
|
int file;
|
||||||
@ -568,17 +600,19 @@ TVariant& TFP_expression::do_read(const TString& tabella, const TString& campo,
|
|||||||
switch (file)
|
switch (file)
|
||||||
{
|
{
|
||||||
case LF_DOC:
|
case LF_DOC:
|
||||||
return get_value(rdoc.doc(), campo);
|
return get_value(doc, campo);
|
||||||
case LF_RIGHEDOC:
|
case LF_RIGHEDOC:
|
||||||
return get_value(rdoc, campo);
|
return get_value(rdoc, campo);
|
||||||
case LF_CLIFO:
|
case LF_CLIFO:
|
||||||
return get_value(rdoc.doc().clifor(), campo);
|
return get_value(doc.clifor(), campo);
|
||||||
case LF_CFVEN:
|
case LF_CFVEN:
|
||||||
return get_value(rdoc.doc().clifor().vendite(), campo);
|
return get_value(doc.clifor().vendite(), campo);
|
||||||
case LF_LETINT:
|
case LF_LETINT:
|
||||||
return get_value(rdoc.doc().clifor().lettera(), campo);
|
return get_value(doc.clifor().lettera(), campo);
|
||||||
case LF_ANAMAG:
|
case LF_ANAMAG:
|
||||||
return get_value(rdoc.articolo(), campo);
|
return get_value(rdoc.articolo(), campo);
|
||||||
|
case LF_CODCORR:
|
||||||
|
return get_value(cache().get(LF_CODCORR, rdoc.articolo().codice()), campo);
|
||||||
default:
|
default:
|
||||||
static TVariant null_var(EMPTY_STRING);
|
static TVariant null_var(EMPTY_STRING);
|
||||||
return null_var;
|
return null_var;
|
||||||
@ -588,10 +622,10 @@ TVariant& TFP_expression::do_read(const TString& tabella, const TString& campo,
|
|||||||
TVariant& TFP_expression::parse_search(const TString& str, TRiga_documento& rdoc)
|
TVariant& TFP_expression::parse_search(const TString& str, TRiga_documento& rdoc)
|
||||||
{
|
{
|
||||||
TString tabella, campo;
|
TString tabella, campo;
|
||||||
TToken_string input_search, search;
|
TToken_string input_search("", ';'), search;
|
||||||
int file;
|
int file, key;
|
||||||
|
|
||||||
extract_info(str, tabella, campo, &input_search);
|
extract_info(str, tabella, campo, input_search, key);
|
||||||
const bool multi_table = calc_table(tabella, file);
|
const bool multi_table = calc_table(tabella, file);
|
||||||
|
|
||||||
// Parso ogni singolo token della ricerca
|
// Parso ogni singolo token della ricerca
|
||||||
@ -602,10 +636,10 @@ TVariant& TFP_expression::parse_search(const TString& str, TRiga_documento& rdoc
|
|||||||
|
|
||||||
if (multi_table)
|
if (multi_table)
|
||||||
{
|
{
|
||||||
return get_value(cache().get(tabella, search), campo);
|
return get_value(cache().get(tabella, search, key), campo);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return get_value(cache().get(file, search), campo);
|
return get_value(cache().get(file, search, key), campo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -957,13 +957,42 @@ int TDB_cache::build_table_key(const char* table, const char* key, TToken_string
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TRectype& TDB_cache::get(const char* table, const char* key)
|
const TRectype& TDB_cache::get(const int file, const char* key_tok, const int key)
|
||||||
|
{
|
||||||
|
// Prendo la vecchia chiave
|
||||||
|
const int old_key = rec_cache(file).key_number();
|
||||||
|
// Setto la nuova chiave
|
||||||
|
rec_cache(file).set_key(key);
|
||||||
|
// Poi chiamo la get normale
|
||||||
|
const TRectype& app = get(file, key_tok);
|
||||||
|
// Ripristino la vecchia chiave per mantenere la compatibilità con i metodi vecchi
|
||||||
|
// non vorrei rischiare che altre applicazioni si basano sulla chiave vecchia
|
||||||
|
rec_cache(file).set_key(old_key);
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TRectype& TDB_cache::get(const char* table, const char* key_tok)
|
||||||
{
|
{
|
||||||
TToken_string tabkey;
|
TToken_string tabkey;
|
||||||
const int file = build_table_key(table, key, tabkey);
|
const int file = build_table_key(table, key_tok, tabkey);
|
||||||
return rec_cache(table).get(tabkey);
|
return rec_cache(table).get(tabkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const TRectype& TDB_cache::get(const char* table, const char* key_tok, const int key)
|
||||||
|
{
|
||||||
|
TToken_string tabkey;
|
||||||
|
const int file = build_table_key(table, key_tok, tabkey);
|
||||||
|
|
||||||
|
// Per il giro della vecchia chiave guardare get(const int, const char*, const int)
|
||||||
|
const int old_key = rec_cache(file).key_number();
|
||||||
|
rec_cache(table).set_key(key);
|
||||||
|
const TRectype& app = rec_cache(table).get(tabkey);
|
||||||
|
|
||||||
|
rec_cache(file).set_key(old_key);
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const TRectype& TDB_cache::get(const TRectype& curr)
|
const TRectype& TDB_cache::get(const TRectype& curr)
|
||||||
{
|
{
|
||||||
const int num = curr.num(); // Numero logico del file (o tabella)
|
const int num = curr.num(); // Numero logico del file (o tabella)
|
||||||
|
@ -184,6 +184,7 @@ public:
|
|||||||
int io_result();
|
int io_result();
|
||||||
const int key_number() const
|
const int key_number() const
|
||||||
{ return _key; }
|
{ return _key; }
|
||||||
|
void set_key(const int key) { _key = key; }
|
||||||
|
|
||||||
bool already_loaded(const char* code) const;
|
bool already_loaded(const char* code) const;
|
||||||
bool already_loaded(long code) const;
|
bool already_loaded(long code) const;
|
||||||
@ -263,9 +264,11 @@ public:
|
|||||||
void flush(int file) { rec_cache(file).flush(); }
|
void flush(int file) { rec_cache(file).flush(); }
|
||||||
void discard(int file);
|
void discard(int file);
|
||||||
|
|
||||||
|
const TRectype& get(int file, const char* key_tok, const int key);
|
||||||
const TRectype& get(int file, const char* key_tok) { return rec_cache(file).get(key_tok); }
|
const TRectype& get(int file, const char* key_tok) { return rec_cache(file).get(key_tok); }
|
||||||
const TRectype& get(int file, long key) { return rec_cache(file).get(key); }
|
const TRectype& get(int file, long key) { return rec_cache(file).get(key); }
|
||||||
const TRectype& get(const char* table, const char* key_tok);
|
const TRectype& get(const char* table, const char* key_tok);
|
||||||
|
const TRectype& get(const char* table, const char* key_tok, const int key);
|
||||||
const TRectype& get(const TRectype& key);
|
const TRectype& get(const TRectype& key);
|
||||||
const TRectype& get_rec(int file, char c, long n);
|
const TRectype& get_rec(int file, char c, long n);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user