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

This commit is contained in:
Mattia Tollari 2019-06-25 11:51:51 +02:00
commit aea092103f
27 changed files with 638 additions and 93 deletions

14
cd/test/ba0834.txt Normal file
View File

@ -0,0 +1,14 @@
recdesc\f175.dir
recdesc\f178.dir
recdesc\f177.trr
recdesc\f177.dir
recdesc\f176.trr
recdesc\f179.trr
recdesc\f176.dir
recdesc\f179.dir
recdesc\f175.trr
recdesc\f178.trr
recdesc\f20.trr
recdesc\f20.dir
Aggiornamento tracciati per personalizzazioni FP

49
cd/test/ba0834a.ini Normal file
View File

@ -0,0 +1,49 @@
[Main]
Demo=0
[ba1]
Edit_4 = ba3 -0
Edit_5 = ba3 -0
Edit_6 = ba4 -1
File(225) = recdesc\f175.dir|X
File(226) = recdesc\f175.trr|X
File(227) = recdesc\f176.dir|X
File(228) = recdesc\f176.trr|X
File(229) = recdesc\f177.dir|X
File(230) = recdesc\f177.trr|X
File(231) = recdesc\f178.dir|X
File(232) = recdesc\f178.trr|X
File(233) = recdesc\f179.dir|X
File(234) = recdesc\f179.trr|X
Patch = 834
Versione = 21511200
[ba2]
File(380) = recdesc\f20.dir|X
File(381) = recdesc\f20.trr|X
Patch = 834
Versione = 21511200
[ba99]
Kill(0) = wxmsw240.dll|x
Kill(1) = batbsce.txt|x
Kill(2) = bastfsc.rep|x
Kill(3) = bastfsc.msk|x
Kill(4) = bastcms.msk|x
Kill(5) = bastcms.rep|x
Kill(6) = bastuue.rep|x
Kill(7) = bastuue.msk|x
[ba]
Data = 24-06-2019
Descrizione = Base
Dischi = 1
Moduli = sy
OEM =
Patch = 0834
PostProcess = bainst -0 BA
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ba0834a1.zip Normal file

Binary file not shown.

4
cd/test/cg0834.txt Normal file
View File

@ -0,0 +1,4 @@
cg0.exe
cg0200a.msk
Aggiornamento anagrafica clienti per personalizzazioni FP

98
cd/test/cg0834a.ini Normal file
View File

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

BIN
cd/test/cg0834a1.zip Normal file

Binary file not shown.

6
cd/test/cg0838.txt Normal file
View File

@ -0,0 +1,6 @@
cg2.exe
cg2fppro.msk
Aggiunta ritenuta da acconto da F1
Corretto importo totale con ritenuta
Aggiunto bottone in maschera fppro per solo collegamento senza riporto dati

95
cd/test/cg0838a.ini Normal file
View File

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

BIN
cd/test/cg0838a1.zip Normal file

Binary file not shown.

7
cd/test/fp0834.txt Normal file
View File

@ -0,0 +1,7 @@
fp0.exe
fp0500a.msk
fpmenu.men
sql\fp0\fp0110.sql
sql\fp0\fp0108.sql
Implementazione personalizzazioni FP + aggiornamento esportazione

23
cd/test/fp0834a.ini Normal file
View File

@ -0,0 +1,23 @@
[Main]
Demo=0
[fp1]
File(0) = fp0.exe|X
File(5) = fp0500a.msk|X
File(10) = fpmenu.men|X
File(11) = sql\fp0\fp0110.sql|X
File(12) = sql\fp0\fp0108.sql|X
Patch = 834
Versione = 21511200
[fp]
Data = 24-06-2019
Descrizione = Fattura Elettronica
Dischi = 1
Moduli = cg,ve
OEM =
Patch = 834
PostProcess =
PreProcess =
Versione = 21511200

BIN
cd/test/fp0834a1.zip Normal file

Binary file not shown.

4
cd/test/fp0836.txt Normal file
View File

@ -0,0 +1,4 @@
fp0.exe
Esportazione da f1-fp delle ritenute di acconto
Correzione se importo e' nullo

19
cd/test/fp0836a.ini Normal file
View File

@ -0,0 +1,19 @@
[Main]
Demo=0
[fp1]
File(0) = fp0.exe|X
Patch = 0836
Versione = 21511200
[fp]
Data = 25-06-2019
Descrizione = Fattura Elettronica
Dischi = 1
Moduli = cg,ve
OEM =
Patch = 836
PostProcess =
PreProcess =
Versione = 21511200

BIN
cd/test/fp0836a1.zip Normal file

Binary file not shown.

4
cd/test/ve0834.txt Normal file
View File

@ -0,0 +1,4 @@
ve0.exe
vetbtip.msk
Aggiornamento tipo documento per personalizzazioni FP

130
cd/test/ve0834a.ini Normal file
View File

@ -0,0 +1,130 @@
[Main]
Demo=0
[ve1]
File(0) = ve0.exe|X
File(225) = vetbtip.msk|X
Patch = 834
Versione = 21511200
[ve99]
Kill(0) = batbimb.msk|x
Kill(1) = batbacr.msk|x
Kill(2) = eftbbnp.msk|x
Kill(3) = bastgmc.rep|x
Kill(4) = bastabe.msk|x
Kill(5) = bastbnp.msk|x
Kill(6) = bastfrd.rep|x
Kill(7) = bastcra.rep|x
Kill(8) = ve7701a.ini|x
Kill(9) = bastgcg.rep|x
Kill(10) = batbstd.msk|x
Kill(11) = batbfca.msk|x
Kill(12) = batbnum.msk|x
Kill(13) = bastfrm.msk|x
Kill(14) = batbfsa.msk|x
Kill(15) = batbgsa.msk|x
Kill(16) = bastfrm.rep|x
Kill(17) = ve7400conf.ini|x
Kill(18) = bastgca.rep|x
Kill(19) = batbbnp.msk|x
Kill(20) = bastctr.rep|x
Kill(21) = batbprv.msk|x
Kill(22) = batbtri.msk|x
Kill(23) = batbcau.msk|x
Kill(24) = basteld.rep|x
Kill(25) = ve7700a.msk|x
Kill(26) = batbgca.msk|x
Kill(27) = efstbnp.rep|x
Kill(28) = ve7200a.msk|x
Kill(29) = basttip.rep|x
Kill(30) = bastcra.msk|x
Kill(31) = bastasf.rep|x
Kill(32) = bastcau.rep|x
Kill(33) = ve7500a.msk|x
Kill(34) = basttag.rep|x
Kill(35) = bastfrr.msk|x
Kill(36) = bastspp.msk|x
Kill(37) = bastums.rep|x
Kill(38) = batbabe.msk|x
Kill(39) = batbprs.msk|x
Kill(40) = batbgmc.msk|x
Kill(41) = bastgca.msk|x
Kill(42) = batbcaa.msk|x
Kill(43) = bastrfa.rep|x
Kill(44) = bastimb.rep|x
Kill(45) = ve7100a.msk|x
Kill(46) = basttri.rep|x
Kill(47) = basteld.msk|x
Kill(48) = batbtip.msk|x
Kill(49) = ve7.exe|x
Kill(50) = bastcau.msk|x
Kill(51) = bastrfc.rep|x
Kill(52) = batbrfc.msk|x
Kill(53) = bastubi.rep|x
Kill(54) = ve7300a.frm|x
Kill(55) = bastgmc.msk|x
Kill(56) = bastabe.rep|x
Kill(57) = batbfid.msk|x
Kill(58) = batbctr.msk|x
Kill(59) = bastums.msk|x
Kill(60) = bastasf.msk|x
Kill(61) = bastfrr.rep|x
Kill(62) = ve7600a.msk|x
Kill(63) = batbspp.msk|x
Kill(64) = batbtag.msk|x
Kill(65) = ve7300a.msk|x
Kill(66) = bastgcg.msk|x
Kill(67) = bastubi.msk|x
Kill(68) = bastnum.rep|x
Kill(69) = bastrfa.msk|x
Kill(70) = batbgcg.msk|x
Kill(71) = ve7400a.ini|x
Kill(72) = bastcaa.msk|x
Kill(73) = batbasf.msk|x
Kill(74) = bastfca.rep|x
Kill(75) = batbmre.msk|x
Kill(76) = baststd.msk|x
Kill(77) = batbspt.msk|x
Kill(78) = batbrfa.msk|x
Kill(79) = bastprs.msk|x
Kill(80) = bastimb.msk|x
Kill(81) = bastrfc.msk|x
Kill(82) = batbpro.msk|x
Kill(83) = bastctr.msk|x
Kill(84) = basttag.msk|x
Kill(85) = batbfrr.msk|x
Kill(86) = batbubi.msk|x
Kill(87) = ve7200a.frm|x
Kill(88) = batbfrd.msk|x
Kill(89) = bastfca.msk|x
Kill(90) = batbfrm.msk|x
Kill(91) = batbcra.msk|x
Kill(92) = bastnum.msk|x
Kill(93) = basttri.msk|x
Kill(94) = batbums.msk|x
Kill(95) = batbeld.msk|x
Kill(96) = efstbnp.msk|x
Kill(97) = bastcaa.rep|x
Kill(98) = bastspp.rep|x
Kill(99) = batbcld.msk|x
Kill(100) = bastfrd.msk|x
Kill(101) = ve7400a.msk|x
Kill(102) = bastbnp.rep|x
Kill(103) = baststd.rep|x
Kill(104) = basttip.msk|x
Kill(105) = bastprs.rep|x
[ve]
Data = 11-06-2019
Descrizione = Vendite
Dischi = 1
Moduli = ba,cg9,pr9,mg9,sv9,in9,ef9
OEM =
Patch = 834
PostProcess = bainst -0 VE
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ve0834a1.zip Normal file

Binary file not shown.

View File

@ -2268,7 +2268,7 @@ void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query)
} }
if (_f1_ini && msk.find_by_id(FS_RECALC) != NULL) if (_f1_ini && msk.find_by_id(FS_RECALC) != NULL)
{ {
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, "");
load_perc_nat(msk, ini); load_perc_nat(msk, ini);

View File

@ -222,12 +222,13 @@
#define F_DATAORARICS 103 #define F_DATAORARICS 103
#define F_DATAS 104 #define F_DATAS 104
#define F_IMPTOTDOCS 105 #define F_IMPTOTDOCS 105
#define F_NUMEROS 106 #define F_RITENUTE 106
#define F_FISCIVAPAESES 107 #define F_NUMEROS 107
#define F_FISCIVACODS 108 #define F_FISCIVAPAESES 108
#define F_CODFISCALES 109 #define F_FISCIVACODS 109
#define F_TIPOPROTS 110 #define F_CODFISCALES 110
#define F_PROGRESSS 111 #define F_TIPOPROTS 111
#define F_KEYFPPROS 112 #define F_PROGRESSS 112
#define F_KEYFPPROS 113
#endif #endif

View File

@ -3009,7 +3009,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
const bool ic = ixc->active() && (alleg < 5 || alleg == 7) && paiv.full() && !m.get_bool(F_LIQDIFF); const bool ic = ixc->active() && (alleg < 5 || alleg == 7) && paiv.full() && !m.get_bool(F_LIQDIFF);
ixc->set(ic ? "X" : ""); ixc->set(ic ? "X" : "");
} }
if(m.get(F_PROKEY).empty()) if(m.get(F_PROKEY).empty() && app().has_module(F1AUT))
fppro_mask(f, key); fppro_mask(f, key);
} }
} }
@ -3906,16 +3906,15 @@ void TPrimanota_application::set_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>
void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk) void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
{ {
real totale = msk->get_totdoc(); real totale = msk->get_totdoc();
if(totale == 0) if(totale == ZERO)
totale = app().calcola_imp();
const real rit = msk->get_ritenute();
if(rit != ZERO)
{ {
const vector<TPro_msk::riga_iva_s>& righe = msk->get_righeiva(); totale -= rit;
for(auto it = righe.begin(); it != righe.end(); ++it) cg_msk.set(F_RITFIS, rit);
{
totale += it->imponibile;
totale += it->imposta;
}
} }
cg_msk.set(F_TOTALE, abs(totale)); cg_msk.set(F_TOTALE, totale);
} }
void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk) void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
@ -3923,7 +3922,7 @@ void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPr
cg_msk.set(F_NUMDOCEXT, msk->get_numdoc()); cg_msk.set(F_NUMDOCEXT, msk->get_numdoc());
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()) if (!cg_msk.get(F_CODCLIFOR).full() && msk->get_numdoc().full())
set_clifo(cg_msk, msk); set_clifo(cg_msk, msk);
set_righe_iva_f1(cg_msk, msk); set_righe_iva_f1(cg_msk, msk);
set_totale(cg_msk, msk); set_totale(cg_msk, msk);
@ -3950,7 +3949,7 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
msk->run(); msk->run();
// 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(app().has_f1_db(&cg_msk)) if(msk->should_bring_back())
riporta_dati_f1(cg_msk, msk); riporta_dati_f1(cg_msk, msk);
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));
@ -4018,6 +4017,7 @@ bool TPro_msk::load_fppro_mask(TMask* msk, KEY k)
row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC"))); row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC")));
row.add(TDate(fp_db().sq_get_date("PZ_DATA"))); row.add(TDate(fp_db().sq_get_date("PZ_DATA")));
row.add(fp_db().sq_get("PQ_IMPTOTDOC")); row.add(fp_db().sq_get("PQ_IMPTOTDOC"));
row.add(fp_db().sq_get("P7_IMPORTORIT"));
row.add(fp_db().sq_get("PZ_NUMERO")); row.add(fp_db().sq_get("PZ_NUMERO"));
row.add(fp_db().sq_get("P2_FISCIVAPAESE")); row.add(fp_db().sq_get("P2_FISCIVAPAESE"));
row.add(fp_db().sq_get("P2_FISCIVACOD")); row.add(fp_db().sq_get("P2_FISCIVACOD"));
@ -4040,7 +4040,7 @@ bool TPro_msk::fppro_handler(TMask_field& f, KEY k)
return load; return load;
} }
bool TPro_msk::fppro_ok_handler(TMask_field& f, KEY k) bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
{ {
if (k != 32) if (k != 32)
return true; return true;
@ -4049,17 +4049,19 @@ bool TPro_msk::fppro_ok_handler(TMask_field& f, KEY k)
//return true; //return true;
bool ok = false; bool ok = false;
TSheet_field& sf = msk.sfield(F_SHEETFPPROS); TSheet_field& sf = msk.sfield(F_SHEETFPPROS);
bool loaded = false;
FOR_EACH_SHEET_ROW(sf, nr, row) FOR_EACH_SHEET_ROW(sf, nr, row)
{ {
if(!loaded && *row->get(0) == 'X') if(*row->get(0) == 'X')
{ {
//TProtocollo protocollo(TDate(row->get(2)).year(), row->get(9), row->get(10)); //TProtocollo protocollo(TDate(row->get(2)).year(), row->get(9), row->get(10));
app()._pro_mask->set_doc(row->get(cid2index(F_NUMEROS)), row->get(cid2index(F_DATAS)), app()._pro_mask->set_doc(row->get(cid2index(F_NUMEROS)), row->get(cid2index(F_DATAS)),
row->get(cid2index(F_IMPTOTDOCS)), "", row->get(cid2index(F_KEYFPPROS)), row->get(cid2index(F_IMPTOTDOCS)), row->get(cid2index(F_RITENUTE)), "", row->get(cid2index(F_KEYFPPROS)),
row->get(cid2index(F_FISCIVACODS))); row->get(cid2index(F_FISCIVACODS)));
loaded = true; if (f.dlg() == DLG_OK)
app()._pro_mask->_riporta = true;
else
app()._pro_mask->_riporta = false;
ok = true; ok = true;
break; break;
} }
@ -4073,13 +4075,18 @@ bool TPro_msk::fppro_ok_handler(TMask_field& f, KEY k)
return true; return true;
} }
bool TPro_msk::collega_handler(TMask_field& f, KEY k)
{
return riporta_handler(f, k);
}
bool TPro_msk::piva_handler(TMask_field& f, KEY k) bool TPro_msk::piva_handler(TMask_field& f, KEY k)
{ {
TMask& msk = f.mask(); TMask& msk = f.mask();
bool ok = true; bool ok = true;
if(k == K_TAB && f.active() && f.focusdirty()) if(k == K_TAB && f.active() && f.focusdirty())
{ {
ok = load_fppro_mask(&msk, 32); ok = load_fppro_mask(&msk, K_SPACE);
} }
return ok; return ok;
} }
@ -4090,7 +4097,7 @@ bool TPro_msk::date_handler(TMask_field& f, KEY k)
bool ok = true; bool ok = true;
if (k == K_TAB && f.active() && f.focusdirty()) if (k == K_TAB && f.active() && f.focusdirty())
{ {
ok = load_fppro_mask(&msk, 32); ok = load_fppro_mask(&msk, K_SPACE);
} }
return ok; return ok;
} }
@ -4119,7 +4126,7 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
break; break;
case F_SHOWALL: case F_SHOWALL:
if (e == fe_modify) if (e == fe_modify)
load_fppro_mask(this, 32); load_fppro_mask(this, K_SPACE);
break; break;
case F_ENABSEARCH: case F_ENABSEARCH:
if (e == fe_modify) if (e == fe_modify)
@ -4170,11 +4177,12 @@ void TPro_msk::set_scadenze(const char* fpprokeys)
} }
} }
void TPro_msk::set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* protfppro, const char* fpprokeys, const char* piva) void TPro_msk::set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* piva)
{ {
_numero = numero; _numero = numero;
_datadoc = datadoc; _datadoc = datadoc;
_totdoc = totdoc; _totdoc = abs(totdoc);
_ritenute = ritenute;
_protfppro.sset(protfppro); _protfppro.sset(protfppro);
_fpprokeys = fpprokeys; _fpprokeys = fpprokeys;
_piva = piva; _piva = piva;
@ -4232,7 +4240,7 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
} }
static TString query; 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" << 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" <<
"FROM PAA0200F\n" << "JOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = 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 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" << "JOIN PAA2700F\n" << "ON P2_KEYPRGINVIO = PQ_KEYPRGINVIO AND P2_KEYHEADERFATT = PQ_KEYHEADERFATT AND P2_KEYBODYFATT = PQ_KEYBODYFATT\n" <<
@ -4282,10 +4290,13 @@ void TPro_msk::abilita_piva(TMask* msk)
} }
} }
TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2fppro") TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2fppro"), _riporta(false)
{ {
TMask::set_handler(DLG_CONFIG, fppro_handler); TMask::set_handler(DLG_CONFIG, fppro_handler);
TMask::set_handler(DLG_LINK, fppro_ok_handler); TMask::set_handler(DLG_OK, riporta_handler);
if (!app().has_module(F1AUT))
field(DLG_OK).disable();
TMask::set_handler(DLG_LINK, collega_handler);
TMask::set_handler(F_PIVAS, piva_handler); TMask::set_handler(F_PIVAS, piva_handler);
TMask::set_handler(F_DATESEARCH, date_handler); TMask::set_handler(F_DATESEARCH, date_handler);
TMask::set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR)); TMask::set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR));

View File

@ -408,17 +408,20 @@ class TPro_msk : public TAutomask
TString _numero; TString _numero;
TDate _datadoc; TDate _datadoc;
real _totdoc; real _totdoc;
real _ritenute;
TProtocollo _protfppro; TProtocollo _protfppro;
TString _fpprokeys; TString _fpprokeys;
TString _piva; TString _piva;
vector<riga_iva_s> _righe_iva; vector<riga_iva_s> _righe_iva;
vector<scadenza_s> _scadenze; vector<scadenza_s> _scadenze;
bool _riporta;
// Handlers per aggancio FPPRO // Handlers per aggancio FPPRO
// Bottone carica documenti in maschera FPPRO // Bottone carica documenti in maschera FPPRO
static bool fppro_handler(TMask_field& f, KEY k); static bool fppro_handler(TMask_field& f, KEY k);
// Bottone riporta doc FPPRO in testata Prima Nota // Bottone riporta doc FPPRO in testata Prima Nota
static bool fppro_ok_handler(TMask_field& f, KEY k); static bool riporta_handler(TMask_field& f, KEY k);
static bool collega_handler(TMask_field& f, KEY k);
static bool piva_handler(TMask_field& f, KEY k); static bool piva_handler(TMask_field& f, KEY k);
static bool date_handler(TMask_field& f, KEY k); static bool date_handler(TMask_field& f, KEY k);
// Non permette la selezione multipla // Non permette la selezione multipla
@ -440,20 +443,22 @@ public:
void set_righeiva(const char* fpprokeys); void set_righeiva(const char* fpprokeys);
void set_scadenze(const char* fpprokeys); void set_scadenze(const char* fpprokeys);
void set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* protfppro, const char* fpprokeys, const char* piva); void set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* piva);
TString get_numdoc() const { return _numero; } TString get_numdoc() const { return _numero; }
TDate get_datadoc() const { return _datadoc; } TDate get_datadoc() const { return _datadoc; }
real get_totdoc() const { return _totdoc; } real get_totdoc() const { return _totdoc; }
TProtocollo& get_protocollo() { return _protfppro; } real get_ritenute() { return _ritenute; }
TString get_fpprokeys() const { return _fpprokeys; } TProtocollo& get_protocollo() { return _protfppro; }
TString get_fpprokeys() const { return _fpprokeys; }
TString get_piva() const { return _piva; } TString get_piva() const { return _piva; }
const vector<riga_iva_s>& get_righeiva() { return _righe_iva; } const vector<riga_iva_s>& get_righeiva() { return _righe_iva; }
vector<scadenza_s>& get_scadenze() { return _scadenze; } vector<scadenza_s>& get_scadenze() { return _scadenze; }
void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura); void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura);
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; }
static TString& query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, const TString& where_str); 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);

View File

@ -4,10 +4,16 @@ TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_CONFIG 2 2 BUTTON DLG_CONFIG 2 2
BEGIN BEGIN
PROMPT 3 1 "Ricarica Fatture" PROMPT 1 1 "Ricarica Fatture"
PICTURE TOOL_ELABORA PICTURE TOOL_ELABORA
END END
BUTTON DLG_OK 2 2
BEGIN
PROMPT 2 1 "Riporta Documento"
MODULE F1
END
BUTTON DLG_LINK 2 2 BUTTON DLG_LINK 2 2
BEGIN BEGIN
PROMPT 3 1 "Collega Documento" PROMPT 3 1 "Collega Documento"
@ -89,6 +95,7 @@ BEGIN
ITEM "Data Ricezione" ITEM "Data Ricezione"
ITEM "Data Doc." ITEM "Data Doc."
ITEM "Importo Totale" ITEM "Importo Totale"
ITEM "Ritenute d'acconto"
ITEM "Numero" ITEM "Numero"
ITEM "Paese" ITEM "Paese"
ITEM "P. IVA" ITEM "P. IVA"
@ -165,45 +172,51 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
NUMBER F_RITENUTE 10 3
BEGIN
PROMPT 1 4 "Ritenute d'acconto"
FLAGS "D"
END
STRING F_NUMEROS 20 STRING F_NUMEROS 20
BEGIN BEGIN
PROMPT 1 4 "NUMERO" PROMPT 1 5 "NUMERO"
FLAGS "D" FLAGS "D"
END END
STRING F_FISCIVAPAESES 2 STRING F_FISCIVAPAESES 2
BEGIN BEGIN
PROMPT 1 5 "FISCIVAPAESE" PROMPT 1 6 "FISCIVAPAESE"
FLAGS "D" FLAGS "D"
END END
STRING F_FISCIVACODS 16 STRING F_FISCIVACODS 16
BEGIN BEGIN
PROMPT 1 6 "FISCIVACOD" PROMPT 1 7 "FISCIVACOD"
FLAGS "D" FLAGS "D"
END END
STRING F_CODFISCALES 16 STRING F_CODFISCALES 16
BEGIN BEGIN
PROMPT 1 7 "CODFISCALE" PROMPT 1 8 "CODFISCALE"
FLAGS "D" FLAGS "D"
END END
STRING F_TIPOPROTS 2 STRING F_TIPOPROTS 2
BEGIN BEGIN
PROMPT 1 8 "TIPOPROT" PROMPT 1 9 "TIPOPROT"
FLAGS "D" FLAGS "D"
END END
NUMBER F_PROGRESSS 10 0 NUMBER F_PROGRESSS 10 0
BEGIN BEGIN
PROMPT 1 9 "PROGRESS" PROMPT 1 10 "PROGRESS"
FLAGS "D" FLAGS "D"
END END
STRING F_KEYFPPROS 80 STRING F_KEYFPPROS 80
BEGIN BEGIN
PROMPT 1 10 "CHIAVE FPPRO" PROMPT 1 11 "CHIAVE FPPRO"
FLAGS "D" FLAGS "D"
END END

View File

@ -8,6 +8,7 @@
#include "../fp/fp0400a.h" #include "../fp/fp0400a.h"
#include "reputils.h" #include "reputils.h"
#include "../fp/fplib.h" #include "../fp/fplib.h"
#include "causali.h"
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
// TFppro // TFppro
@ -107,6 +108,17 @@ TDate TFppro::get_datareg(TToken_string& keys)
return TDate(); return TDate();
} }
real TFppro::get_ritenute() const
{
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;
}
bool TFppro::set_keys(TToken_string& keys) bool TFppro::set_keys(TToken_string& keys)
{ {
if(keys.items() == 3) if(keys.items() == 3)
@ -306,6 +318,14 @@ bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq)
return false; return false;
} }
bool check_caus_has_rit(const TString& cod_caus, bool rit)
{
TLocalisamfile causali(LF_CAUSALI);
causali.put(CAU_CODCAUS, cod_caus);
causali.read();
return *causali.get(CAU_M770) != '\0';
}
void run_cont_ini(bool liq) void run_cont_ini(bool liq)
{ {
static TString run_string; static TString run_string;

View File

@ -49,6 +49,7 @@ public:
int get_numreg(TToken_string& keys); int get_numreg(TToken_string& keys);
TDate get_datareg(); TDate get_datareg();
TDate get_datareg(TToken_string& keys); TDate get_datareg(TToken_string& keys);
real get_ritenute() const;
bool set_query(); bool set_query();
bool set_keys(TToken_string& keys); bool set_keys(TToken_string& keys);
bool set_keys(keys_s keys); bool set_keys(keys_s keys);
@ -56,7 +57,7 @@ public:
static TDate get_data_first_doc(); static TDate get_data_first_doc();
TFppro() : _keys({"\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false) { } TFppro() : _keys({"\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false) { }
TFppro::TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
}; };
class TProtocollo : TObject class TProtocollo : TObject
@ -110,5 +111,6 @@ void set_periodprec(bool flag);
bool check_causale(const TString& cod_caus, bool acq = true); bool check_causale(const TString& cod_caus, bool acq = true);
// Controlla se il "cod_caus" ha come "tipo_doc" FA o NC (di acquisto) // Controlla se il "cod_caus" ha come "tipo_doc" FA o NC (di acquisto)
bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq = true); bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq = true);
bool check_caus_has_rit(const TString& cod_caus, bool rit);
void run_cont_ini(bool liq); void run_cont_ini(bool liq);
#endif #endif

View File

@ -35,6 +35,12 @@ enum { filtri = 0, elenco_fe = 1, elenco_err = 2 }; // Enum per bottoni toolbar
class TPassive_mask : public TAutomask class TPassive_mask : public TAutomask
{ {
struct iva
{
real imponibile;
real imposta;
};
TLog_report* _log; TLog_report* _log;
bool _f1; bool _f1;
@ -61,6 +67,8 @@ protected:
void run_cg0(const TString& filename) const; void run_cg0(const TString& filename) const;
void elenco_prots_sel(TString& string) const; void elenco_prots_sel(TString& string) const;
vector<iva>& get_righe_iva(TToken_string& keys) const;
real calcola_importo(vector<iva> riva) const;
// Gestione F1 // Gestione F1
int prepara_contab() const; int prepara_contab() const;
void log_contab(); void log_contab();
@ -195,6 +203,36 @@ void TPassive_mask::elenco_prots_sel(TString& string) const
string = ""; string = "";
} }
vector<TPassive_mask::iva>& TPassive_mask::get_righe_iva(TToken_string& keys) const
{
static vector<iva> riva;
riva.clear();
TString where_q; where_q << "WHERE PL_KEYPRGINVIO = '" << keys.get(0);
where_q << "' AND PL_KEYHEADERFATT = '" << keys.get();
where_q << "' AND PL_KEYBODYFATT = '" << keys.get() << "'";
TString query; query << "SELECT PL_IMPONIBILE AS IMPONIBILE, PL_IMPOSTA AS IMPOSTA \nFROM PAA2200F \n" << where_q;
fp_db().sq_set_exec(query, false);
for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
{
TString imponibile = fp_db().sq_get("IMPONIBILE");
TString imposta = fp_db().sq_get("IMPOSTA");
if (imponibile.full() || imposta.full())
riva.insert(riva.end(), { real(imponibile), real(imposta) });
}
return riva;
}
real TPassive_mask::calcola_importo(vector<iva> riva) const
{
real tot = ZERO;
for(auto it = riva.begin(); it != riva.end(); ++it)
{
tot += it->imponibile;
tot += it->imposta;
}
return tot;
}
void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TSheet_field& sf_err) void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TSheet_field& sf_err)
{ {
TString denom = fp_db().sq_get("RAG_SOC"); TString denom = fp_db().sq_get("RAG_SOC");
@ -515,11 +553,15 @@ int TPassive_mask::prepara_contab() const
FOR_EACH_SHEET_ROW(sf, n, row) { FOR_EACH_SHEET_ROW(sf, n, row) {
if (row->starts_with("X")) if (row->starts_with("X"))
{ {
TString prokeys = row->get(sf.cid2index(S_PROKEY));
TToken_string keys(prokeys, ';');
TString codcaus(get_codcaus(row->get(2), row->get(10)));
if(!TString(row->get(sf.cid2index(S_NUMREGCONT))).empty()) if(!TString(row->get(sf.cid2index(S_NUMREGCONT))).empty())
return n+1000; return n+1000;
TString codcaus(get_codcaus(row->get(2), row->get(10)));
if (codcaus.empty()) if (codcaus.empty())
return no_codcaus; return no_codcaus;
TString tipodoc(row->get(sf.cid2index(S_TIPODOCSDI))); TString tipodoc(row->get(sf.cid2index(S_TIPODOCSDI)));
if(tipodoc == "TD01" && !check_causale(codcaus, "FA")) if(tipodoc == "TD01" && !check_causale(codcaus, "FA"))
if(!yesno_box("Attenzione, per un documento di tipo TD01 e' stata selezionata \nuna causale diversa da Fattura d'Acquisto.\nContinuare?")) if(!yesno_box("Attenzione, per un documento di tipo TD01 e' stata selezionata \nuna causale diversa da Fattura d'Acquisto.\nContinuare?"))
@ -528,6 +570,8 @@ int TPassive_mask::prepara_contab() const
if(!yesno_box("Attenzione, per un documento di tipo TD04 e' stata selezionata \nuna causale diversa da Nota Credito di Acquisto.\nContinuare?")) if(!yesno_box("Attenzione, per un documento di tipo TD04 e' stata selezionata \nuna causale diversa da Nota Credito di Acquisto.\nContinuare?"))
return cancel; return cancel;
n_sel++; n_sel++;
vector<iva>& riva = get_righe_iva(keys);
TString num; num.format("%04d", n); TString num; num.format("%04d", n);
TFilename newf_ini; TFilename newf_ini;
#ifndef DBG #ifndef DBG
@ -536,10 +580,9 @@ int TPassive_mask::prepara_contab() const
newf_ini << F1_INIREGCONT << num << ".ini"; newf_ini << F1_INIREGCONT << num << ".ini";
#endif #endif
TConfig contab_ini(newf_ini, "Transaction"); TConfig contab_ini(newf_ini, "Transaction");
TString prokeys = row->get(sf.cid2index(S_PROKEY));
contab_ini.set("Action", "INSERT"); contab_ini.set("Action", "INSERT");
// Esporto dati di testata
contab_ini.set_paragraph(LF_MOV); // [23] contab_ini.set_paragraph(LF_MOV); // [23]
contab_ini.set("CODCAUS", codcaus); contab_ini.set("CODCAUS", codcaus);
contab_ini.set("CODCF", row->get(sf.cid2index(S_FORNITORE))); contab_ini.set("CODCF", row->get(sf.cid2index(S_FORNITORE)));
@ -547,16 +590,38 @@ int TPassive_mask::prepara_contab() const
contab_ini.set("DATADOC", row->get(sf.cid2index(S_DATADOC))); contab_ini.set("DATADOC", row->get(sf.cid2index(S_DATADOC)));
contab_ini.set("NUMDOCEXT", row->get(sf.cid2index(S_NDOC))); contab_ini.set("NUMDOCEXT", row->get(sf.cid2index(S_NDOC)));
contab_ini.set("NUMDOC", TString(row->get(sf.cid2index(S_NDOC))).right(7)); contab_ini.set("NUMDOC", TString(row->get(sf.cid2index(S_NDOC))).right(7));
contab_ini.set("TOTDOC", abs(real(row->get(sf.cid2index(S_TOTDOC)))).string()); TString totdoc = row->get(sf.cid2index(S_TOTDOC));
if(totdoc.empty())
{
real imp = calcola_importo(riva);
totdoc.cut(0) << imp;
}
real rit = TFppro(keys).get_ritenute();
if(rit != ZERO)
{
contab_ini.set("TOTDOC", (abs(real(totdoc)) - rit).string());
contab_ini.set("RITFIS", rit.string());
}
else
contab_ini.set("TOTDOC", abs(real(totdoc)).string());
contab_ini.set("KEYFPPRO", prokeys); contab_ini.set("KEYFPPRO", prokeys);
// Esporto righe iva
int i = 1;
for (auto it = riva.begin(); it != riva.end(); ++it)
{
contab_ini.set_paragraph(LF_RMOVIVA, i);
contab_ini.set("IMPONIBILE", it->imponibile.string());
contab_ini.set("IMPOSTA", it->imposta.string());
contab_ini.set("NRIGA", i);
i++;
}
// Se ci sono le scadenze esporto anche quelle // Se ci sono le scadenze esporto anche quelle
TToken_string keys(prokeys, ';');
TString where_q; TString where_q;
where_q << "WHERE PO_KEYPRGINVIO = '" << keys.get() << "'"; where_q << "WHERE PO_KEYPRGINVIO = '" << keys.get(0) << "'";
where_q << " AND PO_KEYHEADERFATT = '" << keys.get() << "'"; where_q << " AND PO_KEYHEADERFATT = '" << keys.get() << "'";
where_q << " AND PO_KEYBODYFATT = '" << keys.get() << "'"; where_q << " AND PO_KEYBODYFATT = '" << keys.get() << "'";
TString query; query << "SELECT PO_RIGA AS RIGA, PO_DATASCADENZA AS DATA, PO_IMPORTO AS IMPORTO \nFROM PAA2500F \n" << where_q; TString query; query << "SELECT PO_RIGA AS RIGA, PO_DATASCADENZA AS DATA, PO_IMPORTO AS IMPORTO \nFROM PAA2500F \n" << where_q;
fp_db().sq_set_exec(query,false); fp_db().sq_set_exec(query,false);
@ -569,26 +634,7 @@ int TPassive_mask::prepara_contab() const
contab_ini.set("NRATA", riga); contab_ini.set("NRATA", riga);
contab_ini.set("NRIGA", "1"); contab_ini.set("NRIGA", "1");
} }
where_q.cut(0) << "WHERE PL_KEYPRGINVIO = '" << keys.get(0);
where_q << "' AND PL_KEYHEADERFATT = '" << keys.get();
where_q << "' AND PL_KEYBODYFATT = '" << keys.get() << "'";
query.cut(0) << "SELECT PL_IMPONIBILE AS IMPONIBILE, PL_IMPOSTA AS IMPOSTA \nFROM PAA2200F \n" << where_q;
fp_db().sq_set_exec(query, false);
int i = 1;
for (bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next())
{
TString imponibile = fp_db().sq_get("IMPONIBILE");
TString imposta = fp_db().sq_get("IMPOSTA");
if(imponibile.full() || imposta.full())
{
contab_ini.set_paragraph(LF_RMOVIVA, i);
contab_ini.set("IMPONIBILE", imponibile);
contab_ini.set("IMPOSTA", imposta);
contab_ini.set("NRIGA", i);
i++;
}
}
row->add("", 0); row->add("", 0);
} }
} }
@ -607,7 +653,7 @@ void TPassive_mask::log_contab()
TFilename cg_ini; TFilename cg_ini;
TString msg; TString msg;
TF1_log log; TF1_log log;
std::vector<TString> doc_saved, doc_canceled, save_numreg, save_protiv; std::vector<TString> doc_saved, doc_canceled, save_numreg, save_protiv, canc_forn;
FOR_EACH_SHEET_ROW(sfield(F_DOCS), n, row) FOR_EACH_SHEET_ROW(sfield(F_DOCS), n, row)
{ {
TString num; num.format("%04d", n); TString num; num.format("%04d", n);
@ -619,23 +665,17 @@ void TPassive_mask::log_contab()
if(cg_ini.exist()) if(cg_ini.exist())
{ {
TConfig config(cg_ini, "Transaction"); TConfig config(cg_ini, "Transaction");
TString numdoc;
TString numreg;
TString protiv;
if (config.get("Result") == "OK") if (config.get("Result") == "OK")
{ {
numdoc = config.get(MOV_NUMDOCEXT, "23"); doc_saved.insert(doc_saved.end(), config.get(MOV_NUMDOCEXT, "23"));
numreg = config.get(MOV_NUMREG, "23"); save_numreg.insert(save_numreg.end(), config.get(MOV_NUMREG, "23"));
protiv = config.get(MOV_PROTIVA, "23"); save_protiv.insert(save_protiv.end(), config.get(MOV_PROTIVA, "23"));
doc_saved.insert(doc_saved.end(), numdoc);
save_numreg.insert(save_numreg.end(), numreg);
save_protiv.insert(save_protiv.end(), protiv);
} }
else if(config.get("Result") == "CANCEL") else if(config.get("Result") == "CANCEL")
{ {
numdoc = config.get(MOV_NUMDOCEXT, "23"); doc_canceled.insert(doc_canceled.end(), config.get(MOV_NUMDOCEXT, "23"));
doc_canceled.insert(doc_canceled.end(), numdoc); canc_forn.insert(canc_forn.end(), config.get(MOV_CODCF, "23"));
} }
} }
} }
@ -658,12 +698,12 @@ void TPassive_mask::log_contab()
{ {
msg.cut(0); msg.cut(0);
if (elem_canc == 1) if (elem_canc == 1)
msg << "La registrazione del documento n. '" << doc_canceled[0] << "' e' stata annullata."; msg << "La registrazione del documento n. '" << doc_canceled[0] << "' e' stata annullata. (fornitore n. " << canc_forn[0] << ")";
else else
msg << "Sono state annullate " << elem_canc << " registrazioni."; msg << "Sono state annullate " << elem_canc << " registrazioni.";
if (elem_canc > 1) if (elem_canc > 1)
for (int i = 0; i < elem_canc; i++) for (int i = 0; i < elem_canc; i++)
msg << "\n - Documento n. '" << doc_canceled[i] << "'"; msg << "\n - Documento n. '" << doc_canceled[i] << "'. (fornitore n. " << canc_forn[0] << ")";
TToken_string msg_tok(msg, '\n'); TToken_string msg_tok(msg, '\n');
for (int i = 0; i < msg_tok.items(); i++) for (int i = 0; i < msg_tok.items(); i++)
log.log(LOG_WARN, msg_tok.get()); log.log(LOG_WARN, msg_tok.get());
@ -687,7 +727,7 @@ void TPassive_mask::contabilizza()
break; break;
case no_codcaus: case no_codcaus:
message_box("Attenzione, il fornitore non ha associato nessun codice causale predefinito.\nPrego selezionare un codice causale per la contabilizzazione."); message_box("Attenzione, il fornitore non ha associato nessun codice causale predefinito.\nPrego selezionare un codice causale per la contabilizzazione.");
next_page(1000); fill();
break; break;
case no_selected: case no_selected:
message_box("Selezionare almeno un documento."); message_box("Selezionare almeno un documento.");
@ -743,7 +783,7 @@ void TPassive_mask::new_forn()
{ {
TString query; query << "SELECT PU_PEC AS PEC\n" << TString query; query << "SELECT PU_PEC AS PEC\n" <<
"FROM PAA3200F\n" << "FROM PAA3200F\n" <<
"WHERE PU_KEYPRGINVIO = '" << keys.get(); "WHERE PU_KEYPRGINVIO = '" << keys.get(0);
query << "' AND PU_KEYHEADERFATT = '" << keys.get(); query << "' AND PU_KEYHEADERFATT = '" << keys.get();
query << "' AND PU_KEYBODYFATT = '" << keys.get() << "'"; query << "' AND PU_KEYBODYFATT = '" << keys.get() << "'";
fp_db().sq_set_exec(query); fp_db().sq_set_exec(query);

View File

@ -305,7 +305,7 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
NUMBER S_TOTDOC 11 3 NUMBER S_TOTDOC 11 2
BEGIN BEGIN
PROMPT 1 2 "Totale Doc. " PROMPT 1 2 "Totale Doc. "
FLAGS "D" FLAGS "D"