Merge remote-tracking branch 'origin/R_10_00' into R_10_00

This commit is contained in:
Mattia Tollari 2019-06-27 15:12:23 +02:00
commit 3d9f58af40
15 changed files with 320 additions and 185 deletions

View File

@ -235,12 +235,15 @@
</SqlCompiler>
<SqlCompiler Include="..\src\fp\sql\fp0106.sql">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</SqlCompiler>
<SqlCompiler Include="..\src\fp\sql\fp0108.sql">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</SqlCompiler>
<SqlCompiler Include="..\src\fp\sql\fp0110.sql">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</SqlCompiler>
</ItemGroup>
<ItemGroup>

View File

@ -3,3 +3,5 @@ cg2fppro.msk
Cambiata icona ricarica fatture su 'Fatture SDI'
Aggiunta importazione percent. e natura iva da ini con f1
Corretta importazione importo totale con ritenute
Corretto calcolo ritenute in maschera fppro

View File

@ -9,79 +9,79 @@ Patch = 846
Versione = 21511200
[cg99]
Kill(0) = batbmsp.msk|x
Kill(1) = bastcve.rep|x
Kill(2) = batbins.msk|x
Kill(3) = bastscc.rep|x
Kill(4) = batbcam.msk|x
Kill(5) = batbpdb.msk|x
Kill(6) = bastver.msk|x
Kill(7) = batbcco.msk|x
Kill(8) = batbesc.msk|x
Kill(9) = batbdpn.msk|x
Kill(10) = bastndo.msk|x
Kill(11) = bastesc.msk|x
Kill(12) = batbndo.msk|x
Kill(0) = bastndo.msk|x
Kill(1) = batblbu.msk|x
Kill(2) = bastzon.msk|x
Kill(3) = bastesc.msk|x
Kill(4) = bastscc.msk|x
Kill(5) = bastvet.msk|x
Kill(6) = bastcve.msk|x
Kill(7) = batbntb.msk|x
Kill(8) = bastndo.rep|x
Kill(9) = batbvet.msk|x
Kill(10) = batbcve.msk|x
Kill(11) = batbndo.msk|x
Kill(12) = bastpor.msk|x
Kill(13) = batbind.msk|x
Kill(14) = bastmsp.msk|x
Kill(15) = bastreg.rep|x
Kill(14) = batbtit.msk|x
Kill(15) = bastntb.rep|x
Kill(16) = batbleg.msk|x
Kill(17) = bastpor.msk|x
Kill(18) = batbpor.msk|x
Kill(19) = batbcfi.msk|x
Kill(17) = bastcco.rep|x
Kill(18) = bastmsp.rep|x
Kill(19) = bastreg.rep|x
Kill(20) = bastcco.msk|x
Kill(21) = bastmsp.rep|x
Kill(22) = batbtit.msk|x
Kill(23) = batbcve.msk|x
Kill(24) = batbivd.msk|x
Kill(25) = batbscc.msk|x
Kill(26) = bastcfi.rep|x
Kill(27) = batbarb.msk|x
Kill(28) = bastver.rep|x
Kill(29) = bastleg.msk|x
Kill(30) = bastzon.rep|x
Kill(31) = bastleg.rep|x
Kill(32) = bastcam.rep|x
Kill(33) = batblia.msk|x
Kill(34) = batbzon.msk|x
Kill(35) = bastvet.rep|x
Kill(21) = bastmsp.msk|x
Kill(22) = bastnot.msk|x
Kill(23) = batbcam.msk|x
Kill(24) = bastpor.rep|x
Kill(25) = batbpdb.msk|x
Kill(26) = batbins.msk|x
Kill(27) = bastscc.rep|x
Kill(28) = bastvet.rep|x
Kill(29) = bastpdb.msk|x
Kill(30) = batbesc.msk|x
Kill(31) = bastleg.msk|x
Kill(32) = bastivd.msk|x
Kill(33) = batbdpn.msk|x
Kill(34) = bastdpn.rep|x
Kill(35) = batbmsp.msk|x
Kill(36) = bastdpn.msk|x
Kill(37) = bastivd.msk|x
Kill(38) = bastarb.rep|x
Kill(39) = bastcam.msk|x
Kill(40) = bastntb.msk|x
Kill(41) = bastivd.rep|x
Kill(42) = bastdpn.rep|x
Kill(43) = bastpdb.msk|x
Kill(44) = batbinl.msk|x
Kill(45) = bastesc.rep|x
Kill(37) = bastcve.rep|x
Kill(38) = bastesc.rep|x
Kill(39) = batbdel.msk|x
Kill(40) = bastver.rep|x
Kill(41) = bastcam.msk|x
Kill(42) = batbreg.msk|x
Kill(43) = bastivd.rep|x
Kill(44) = batbnot.msk|x
Kill(45) = bastntb.msk|x
Kill(46) = bastreg.msk|x
Kill(47) = batbreg.msk|x
Kill(48) = bastzon.msk|x
Kill(49) = bastarb.msk|x
Kill(50) = batblia.msk|x
Kill(51) = cgtbcon.msk|x
Kill(52) = batbnot.msk|x
Kill(53) = batbdel.msk|x
Kill(54) = batbvet.msk|x
Kill(55) = batbtra.msk|x
Kill(47) = batbzon.msk|x
Kill(48) = batbtra.msk|x
Kill(49) = bastcfi.msk|x
Kill(50) = bastarb.rep|x
Kill(51) = bastarb.msk|x
Kill(52) = bastpdb.rep|x
Kill(53) = cgtbcon.msk|x
Kill(54) = batbver.msk|x
Kill(55) = batblia.msk|x
Kill(56) = bastnot.rep|x
Kill(57) = bastpdb.rep|x
Kill(58) = bastscc.msk|x
Kill(59) = bastcco.rep|x
Kill(60) = batbntb.msk|x
Kill(61) = bastvet.msk|x
Kill(62) = batbver.msk|x
Kill(63) = bastcfi.msk|x
Kill(64) = batblbu.msk|x
Kill(65) = bastntb.rep|x
Kill(66) = bastcve.msk|x
Kill(67) = bastndo.rep|x
Kill(68) = bastnot.msk|x
Kill(69) = bastpor.rep|x
Kill(57) = batbinl.msk|x
Kill(58) = bastver.msk|x
Kill(59) = batbcco.msk|x
Kill(60) = bastcam.rep|x
Kill(61) = bastcfi.rep|x
Kill(62) = batbscc.msk|x
Kill(63) = batbcfi.msk|x
Kill(64) = bastzon.rep|x
Kill(65) = batbivd.msk|x
Kill(66) = batbpor.msk|x
Kill(67) = bastleg.rep|x
Kill(68) = batblia.msk|x
Kill(69) = batbarb.msk|x
[cg]
Data = 25-06-2019
Data = 26-06-2019
Descrizione = Contabilita' Generale
Dischi = 1
Moduli = ba

Binary file not shown.

View File

@ -1,3 +1,10 @@
fp0.exe
fp0400a.msk
fp0500a.msk
Aggiunta esportazione percentuale e natura iva per f1
Corretto calcolo ritenute fiscali se piu di una
Aggiunta colonna ritenute fiscali nel monitor passive
Sistemata maschera fp0500 per lo sheet "altri dati gestionali"
Corretta esportazione altri dati gestionali
Corretto controllo tipo documento con tipo causale (TD01 -> FA, TD04 -> NC)

View File

@ -3,11 +3,13 @@ Demo=0
[fp1]
File(0) = fp0.exe|X
Patch = 0844
File(4) = fp0400a.msk|X
File(5) = fp0500a.msk|X
Patch = 844
Versione = 21511200
[fp]
Data = 25-06-2019
Data = 26-06-2019
Descrizione = Fattura Elettronica
Dischi = 1
Moduli = cg,ve

Binary file not shown.

View File

@ -28,7 +28,9 @@ enum
pro_err = -86552,
pro_noerr = 1,
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
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.");
}
@ -1463,10 +1467,43 @@ bool TPrimanota_application::has_tot_doc(TToken_string& fppro_keys)
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 in ingresso, scollegarlo prima dalla precedente registrazione.";
error_box(msg);
return pro_numreg_err;
}
}
return pro_noerr;
}
int TPrimanota_application::write(const TMask& m)
{
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);
if (numreg > _lastreg) _lastreg = numreg; // Aggiorna ultima registrazione libera
@ -1569,10 +1606,19 @@ int TPrimanota_application::write(const TMask& m)
return err;
}
int TPrimanota_application::rewrite(const TMask& 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);
if (err == NOERR)
{
@ -2414,11 +2460,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
if (!has_f1_db(&msk))
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
// Se in modalita' inserimento continuo normalmente o in mod. modifica
@ -2448,8 +2489,9 @@ int TPrimanota_application::save_fppro()
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);
real tot_doc = msk.get_real(F_TOTALE);
const real ritenute = msk.get_real(F_RITFIS);
tot_doc += ritenute;
TToken_string fppro_keys(msk.get(F_PROKEY), ';');
const TString& keyprginvio = fppro_keys.get();
const TString& keyheaderfatt = fppro_keys.get();
@ -2457,35 +2499,25 @@ int TPrimanota_application::save_fppro()
// 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 << " (PZ_DATA = \'" << data_documento.date2ansi() << "\' AND PQ_IMPTOTDOC = \'" << tot_doc << "\' AND PZ_NUMERO = \'" << (!numero_docext.empty() ? numero_docext : numero_doc) << "\') ";
else
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\' AND PZ_NUMERO = \'" << (!numero_docext.empty() ? numero_docext : numero_doc) << "\') ";
TString& query = TPro_msk::query_fppro(keyprginvio, keyheaderfatt, keybodyfatt, where_str);
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);
if(has_f1_db(&msk) && fp_db().sq_items() != 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" <<
"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.");
return pro_notsaved;
}
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.");
save_dbmov(true);
return pro_notsaved;
}
@ -2494,13 +2526,17 @@ int TPrimanota_application::save_fppro()
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 << "\';";
"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;
}

View File

@ -4011,22 +4011,24 @@ bool TPro_msk::load_fppro_mask(TMask* msk, KEY k)
const bool show_all = msk->get_bool(F_SHOWALL);
if (numreg != "0" && !show_all)
continue;
TToken_string& row = sf.row(-1);
TToken_string keys(fp_db().sq_get("PZ_KEYPRGINVIO"), ';');
keys.add(fp_db().sq_get("PZ_KEYHEADERFATT")); keys.add(fp_db().sq_get("PZ_KEYBODYFATT"));
row.add("", 0);
row.add(fp_db().sq_get("P7_TIPODOC"));
row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC")));
row.add(TDate(fp_db().sq_get_date("PZ_DATA")));
row.add(fp_db().sq_get("PQ_IMPTOTDOC"));
row.add(fp_db().sq_get("P7_IMPORTORIT"));
row.add(fppro_db().set_keys(keys).get_ritenute());
row.add(fp_db().sq_get("PZ_NUMERO"));
row.add(fp_db().sq_get("P2_FISCIVAPAESE"));
row.add(fp_db().sq_get("P2_FISCIVACOD"));
row.add(fp_db().sq_get("P2_CODFISCALE"));
row.add(fp_db().sq_get("PZ_TIPOPROT"));
row.add(fp_db().sq_get("PZ_NUMPROT"));
TString fppro_keys;
fppro_keys << fp_db().sq_get("PZ_KEYPRGINVIO") << ";" << fp_db().sq_get("PZ_KEYHEADERFATT") << ";" << fp_db().sq_get("PZ_KEYBODYFATT");
row.add(fppro_keys);
row.add(keys);
}
sf.force_update();
sf.show();
@ -4200,12 +4202,6 @@ void TPro_msk::add_scad(const TDate& date, const real& 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)
{
return query_fppro(codforn, "", "", "", date, "", "", "", true, false);
@ -4240,7 +4236,7 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
}
static TString query;
query.cut(0) << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, P7_IMPORTORIT, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, PZ_NUMPROT, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" <<
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\n" << "JOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
"JOIN PAA0100F\n" << " ON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" <<
"JOIN PAA2700F\n" << "ON P2_KEYPRGINVIO = PQ_KEYPRGINVIO AND P2_KEYHEADERFATT = PQ_KEYHEADERFATT AND P2_KEYBODYFATT = PQ_KEYBODYFATT\n" <<
@ -4276,6 +4272,18 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
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)
{
if (msk->get_bool(F_ENABSEARCH))

View File

@ -227,6 +227,8 @@ protected: // TApplication
// setta variabili prima del controllo has_f1_db
void set_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);
@ -459,11 +461,10 @@ public:
void add_scad(const TDate& date, const real& importo);
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& 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_string();
static void abilita_piva(TMask* msk);
//bool is_fp();
// Carica documenti FPPRO sulla maschera

View File

@ -5,10 +5,10 @@
#include "cg2102.h"
#include "execp.h"
#include "cfven.h"
#include "../fp/fp0400a.h"
#include "reputils.h"
#include "../fp/fplib.h"
#include "causali.h"
#include "clifo.h"
#include "../fp/fplib.h"
//////////////////////////////////////////////////////////
// TFppro
@ -18,9 +18,7 @@ TFppro& fppro_db()
{
static TFppro* fppro = nullptr;
if (fppro == nullptr)
{
fppro = new TFppro();
}
return *fppro;
}
@ -37,14 +35,14 @@ bool TFppro::guess_the_doc(const TLocalisamfile& mov)
"\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" <<
"JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" <<
"JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n";
fp_db().sq_set_exec(query);
_db->sq_set_exec(query);
const keys_s keys = { fp_db().sq_get("KEYPRGINVIO"), fp_db().sq_get("KEYHEADERFATT"), fp_db().sq_get("KEYBODYFATT") };
const TDate data = fp_db().sq_get_date("DATA");
const TString numdoc = fp_db().sq_get("NUMDOC");
const real imptotdoc(fp_db().sq_get("IMPTOTDOC"));
const TString4 statopiva = fp_db().sq_get("STATOPIVA");
const TString piva = fp_db().sq_get("PIVA");
const keys_s keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") };
const TDate data = _db->sq_get_date("DATA");
const TString numdoc = _db->sq_get("NUMDOC");
const real imptotdoc(_db->sq_get("IMPTOTDOC"));
const TString4 statopiva = _db->sq_get("STATOPIVA");
const TString piva = _db->sq_get("PIVA");
// Prendo il fornitore del mov per controllare la p.iva
TLocalisamfile clifo(LF_CLIFO);
@ -78,10 +76,10 @@ int TFppro::get_numreg()
if (!_is_set)
{
if (set_query())
return fp_db().sq_get_int("PZ_NUMREGCONT");
return _db->sq_get_int("PZ_NUMREGCONT");
return -1;
}
return fp_db().sq_get_int("PZ_NUMREGCONT");
return _db->sq_get_int("PZ_NUMREGCONT");
}
int TFppro::get_numreg(TToken_string& keys)
@ -95,31 +93,33 @@ TDate TFppro::get_datareg()
if (!_is_set)
{
if (set_query())
return fp_db().sq_get_date("PZ_DATAREGCONT");
return _db->sq_get_date("PZ_DATAREGCONT");
return TDate();
}
return fp_db().sq_get_date("PZ_DATAREGCONT");
return _db->sq_get_date("PZ_DATAREGCONT");
}
TDate TFppro::get_datareg(TToken_string& keys)
{
if (set_keys(keys))
set_keys(keys);
if (_is_set)
return get_datareg();
return TDate();
}
real TFppro::get_ritenute() const
{
real imp = ZERO;
TString query;
query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" <<
"WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'";
fp_db().sq_set_exec(query);
if(fp_db().sq_items() >= 1)
return fp_db().sq_get_real("IMPORTO");
return ZERO;
_db->sq_set_exec(query, false);
for(bool ok = _db->sq_next(); ok; ok = _db->sq_next())
imp += _db->sq_get_real("IMPORTO");
return imp;
}
bool TFppro::set_keys(TToken_string& keys)
TFppro& TFppro::set_keys(TToken_string& keys)
{
if(keys.items() == 3)
{
@ -127,30 +127,49 @@ bool TFppro::set_keys(TToken_string& keys)
_keys.headerfatt = keys.get(1);
_keys.bodyfatt = keys.get(2);
_is_set = false;
return _keys_setted = true;
_keys_setted = true;
}
return _keys_setted = false;
_keys_setted = false;
return *this;
}
bool TFppro::set_keys(keys_s keys)
TFppro& TFppro::set_keys(keys_s keys)
{
if(*keys.prginvio != 0 && *keys.headerfatt != 0 && *keys.bodyfatt != 0)
{
_keys = keys;
_is_set = false;
return _keys_setted = true;
_keys_setted = true;
}
_is_set = false;
return _keys_setted = false;
_keys_setted = false;
return *this;
}
TDate TFppro::get_data_first_doc()
TDate TFppro::get_data_first_doc() const
{
TString query;
query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" <<
"\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a";
fp_db().sq_set_exec(query);
return fp_db().sq_get_date("DATA");
_db->sq_set_exec(query);
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()
@ -158,18 +177,26 @@ bool TFppro::set_query()
if (_keys_setted)
{
_fppro_query.cut(0) << "SELECT * FROM FPPRO00F " << where_str();
return _is_set = fp_db().sq_set_exec(_fppro_query);
return _is_set = _db->sq_set_exec(_fppro_query);
}
return _is_set = false;
}
const char* TFppro::where_str() const
{
TString str;
str << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'";
static TString str;
str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'";
return str;
}
TFppro::TFppro() : _keys({ "\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false)
{
_db = new SSimple_query();
const bool ok = set_connection(*_db);
// Non utilizzo l'autocommit, viene gestito manualmente
if (ok) _db->sq_set_autocommit(false);
}
//////////////////////////////////////////////////////////
// TProtocollo
//////////////////////////////////////////////////////////
@ -366,4 +393,38 @@ bool TF1_log::show_log()
_log = NULL;
}
return true;
}
bool TFppro::set_connection(SSimple_query& s)
{
bool ok = true;
#ifdef DBG
TString ip = fp_settings().get_db_indirizzo();
if (ip.upper() != "TESTCAMPO2012")
{
if (s.sq_connect("TESTCAMPO2012@campo_fp",
"fp",
"fp",
TSDB_MSSQL) != NOERR)
{
warning_box("Impossibile connettersi al DB esterno");
ok = false;
}
}
else
{
#endif
if (s.sq_connect(
fp_settings().get_db_str_con(),
fp_settings().get_db_user(),
fp_settings().get_db_password(),
TSDB_MSSQL) != NOERR)
{
warning_box("Impossibile connettersi al DB esterno");
ok = false;
}
#ifdef DBG
}
#endif
return ok;
}

View File

@ -2,9 +2,8 @@
#define _F1LIBH_
#include "strings.h"
#include "config.h"
#include "report.h"
#include "reputils.h"
#include "tsdb.h"
#define FILE_CONFIG CONFIG_DITTA
#define FILE_SECTION "f1"
@ -34,6 +33,7 @@ class TFppro : public TObject
const char* bodyfatt;
};
private:
SSimple_query* _db;
keys_s _keys;
bool _guess;
bool _keys_setted;
@ -46,20 +46,26 @@ public:
bool check_reg(TToken_string& keys, int numreg);
// Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e`
bool guess_the_doc(const TLocalisamfile& mov);
// Getters
void get_keys_fppro();
int get_numreg();
int get_numreg(TToken_string& keys);
TDate get_datareg();
TDate get_datareg(TToken_string& keys);
real get_ritenute() const;
bool set_query();
bool set_keys(TToken_string& keys);
bool set_keys(keys_s keys);
TDate get_data_first_doc() const;
TDate get_dataorarioric() const;
int get_numregcont() const;
// Setters
bool set_query();
TFppro& set_keys(TToken_string& keys);
TFppro& set_keys(keys_s keys);
static TDate get_data_first_doc();
TFppro() : _keys({"\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false) { }
TFppro::TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
static bool set_connection(SSimple_query& s);
TFppro();
TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
};
class TProtocollo : TObject

View File

@ -247,6 +247,8 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
const TDate& dataregcont = fp_db().sq_get_date("DATAREGCONT");
const TString& filter_elab = get_fattsel();
const bool is_contab = dataregcont != TDate("20010101");
TToken_string keys("", ';');
keys.add(fp_db().sq_get("KEYPROG")); keys.add(fp_db().sq_get("KEYHEAD")); keys.add(fp_db().sq_get("KEYFATT"));
clifo.zero();
clifo.put(CLI_TIPOCF, 'F');
@ -271,6 +273,7 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
row.add(fp_db().sq_get_date("DATA_RIC"));
row.add(fp_db().sq_get_date("DATA_DOC"));
row.add(fp_db().sq_get("TOT_DOC"));
row.add(fppro_db().set_keys(keys).get_ritenute());
// Decido se mettere o meno il flag
if (forn_code == 0)
@ -301,12 +304,10 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
row.add(paa_codpaese, sf.cid2index(S_STATOPAIV));
row.add(paa_piva);
row.add(paa_codfisc);
row.add(fp_db().sq_get("ATTACHMENT") != "0" ? "" : "X");
row.add(denom);
row.add(TProtocollo(fp_db().sq_get_int("ANNO_PROT"), fp_db().sq_get("TIPO_PROT"), fp_db().sq_get("NUM_PROT")));
TString key_prot; key_prot << fp_db().sq_get("KEYPROG") << ";" << fp_db().sq_get("KEYHEAD") << ";" << fp_db().sq_get("KEYFATT");
row.add(key_prot);
row.add(keys);
}
}
@ -566,10 +567,10 @@ int TPassive_mask::prepara_contab() const
TString codcaus(get_codcaus(row->get(2), row->get(10)));
TString tipodoc(row->get(sf.cid2index(S_TIPODOCSDI)));
if(tipodoc == "TD01" && !check_causale(codcaus, "FA"))
if(tipodoc == "TD01" && !check_causale(codcaus, "FA", true))
if(!yesno_box("Attenzione, per un documento di tipo TD01 e' stata selezionata \nuna causale diversa da Fattura d'Acquisto.\nProcedere lo stesso con l'esportazione?"))
continue;
if(tipodoc == "TD04" && !check_causale(codcaus, "NC"))
if(tipodoc == "TD04" && !check_causale(codcaus, "NC", true))
if(!yesno_box("Attenzione, per un documento di tipo TD04 e' stata selezionata \nuna causale diversa da Nota Credito di Acquisto.\nProcedere lo stesso con l'esportazione?"))
continue;
n_sel++;
@ -599,7 +600,7 @@ int TPassive_mask::prepara_contab() const
real imp = calcola_importo(riva);
totdoc.cut(0) << imp;
}
real rit = TFppro(keys).get_ritenute();
real rit = fppro_db().set_keys(keys).get_ritenute();
if(rit != ZERO)
{
contab_ini.set("TOTDOC", (abs(real(totdoc)) - rit).string());

View File

@ -30,18 +30,19 @@
#define S_DATARIC 105
#define S_DATADOC 106
#define S_TOTDOC 107
#define S_FPPRO 108
#define S_NUMREGCONT 109
#define S_DATAREGCONT 110
#define S_FORNITORE 111
#define S_RAGSOC 112
#define S_STATOPAIV 113
#define S_PARIVA 114
#define S_CODFISC 115
#define S_ATTACH 116
#define S_RAGXML 117
#define S_NPROT 118
#define S_PROKEY 119
#define S_TOTRIT 108
#define S_FPPRO 109
#define S_NUMREGCONT 110
#define S_DATAREGCONT 111
#define S_FORNITORE 112
#define S_RAGSOC 113
#define S_STATOPAIV 114
#define S_PARIVA 115
#define S_CODFISC 116
#define S_ATTACH 117
#define S_RAGXML 118
#define S_NPROT 119
#define S_PROKEY 120
#define F_ERR 301

View File

@ -184,23 +184,24 @@ BEGIN
PROMPT 0 4 ""
ITEM ""
ITEM "Anno"
ITEM "Tipo Doc.\nSDI@6"
ITEM "Numero\nDocumento@18"
ITEM "Tipo Doc.\nSDI@5"
ITEM "Numero\nDocumento@14"
ITEM "Data\nRicezione@8"
ITEM "Data\nDoc.@8"
ITEM "Totale\nDocumento@12"
ITEM "Fornitore\nassociato@7"
ITEM "Num. Registrazione\ncontabile@12"
ITEM "Data Registrazione\ncontabile@12"
ITEM "Fornitore@7"
ITEM "Ragione Sociale@50"
ITEM "Totale\nDocumento@7"
ITEM "Totale\nritenute@6"
ITEM "Fornitore\nassociato@6"
ITEM "Num. Regis.\ncontabile@8"
ITEM "Data Regis.\ncontabile@8"
ITEM "Fornitore@5"
ITEM "Ragione Sociale@40"
ITEM "Stato\nP.IVA@4"
ITEM "Partita IVA@10"
ITEM "Cod. Fiscale@16"
ITEM "Allegati@7"
ITEM "Ragione Sociale (XML)@50"
ITEM "Numero Protocollo (in entrata)\n[anno-tipo prot/progressivo]@22"
ITEM "Chiave Prot.@80"
ITEM "Cod. Fiscale@12"
ITEM "Allegati@6"
ITEM "Ragione Sociale (XML)@40"
ITEM "Numero Protocollo (in entrata)\n[anno-tipo prot/progressivo]@20"
ITEM "Chiave Prot.@40"
END
ENDPAGE
@ -311,6 +312,12 @@ BEGIN
FLAGS "D"
END
NUMBER S_TOTRIT 10 2
BEGIN
PROMPT 1 2 "Totale Ritenute"
FLAGS "D"
END
BOOLEAN S_FPPRO
BEGIN
PROMPT 15 2 "Salvato in FP-PRO"