diff --git a/build/fp0.vcxproj b/build/fp0.vcxproj index b5d69d573..b423b16e9 100644 --- a/build/fp0.vcxproj +++ b/build/fp0.vcxproj @@ -194,10 +194,6 @@ - - false - true - @@ -205,9 +201,6 @@ - - false - @@ -215,7 +208,6 @@ - diff --git a/build/fp0.vcxproj.filters b/build/fp0.vcxproj.filters index eb98f06b9..a71089b7c 100644 --- a/build/fp0.vcxproj.filters +++ b/build/fp0.vcxproj.filters @@ -45,9 +45,6 @@ Sources - - Sources - Sources @@ -65,9 +62,6 @@ Headers - - Headers - Headers @@ -82,9 +76,6 @@ Masks - - Masks - Masks diff --git a/build/fp1.vcxproj b/build/fp1.vcxproj index 6660b7522..0439fee25 100644 --- a/build/fp1.vcxproj +++ b/build/fp1.vcxproj @@ -187,17 +187,25 @@ + + + + + + + Document + diff --git a/build/fp1.vcxproj.filters b/build/fp1.vcxproj.filters index 16854163a..80084fe39 100644 --- a/build/fp1.vcxproj.filters +++ b/build/fp1.vcxproj.filters @@ -33,6 +33,9 @@ Sources + + Sources + @@ -41,11 +44,17 @@ Headers + + Headers + Masks + + Masks + diff --git a/build/fplib.vcxproj b/build/fplib.vcxproj index ecd9fda37..16d018345 100644 --- a/build/fplib.vcxproj +++ b/build/fplib.vcxproj @@ -174,7 +174,8 @@ - true + + diff --git a/cd/test/ba0740.txt b/cd/test/ba0740.txt new file mode 100644 index 000000000..49a6af48d --- /dev/null +++ b/cd/test/ba0740.txt @@ -0,0 +1,3 @@ +batbiva.msk + +Aggiunto flag sulla tabella iva per escludere il codice dal calcolo bolli esenti \ No newline at end of file diff --git a/cd/test/ba0740a.ini b/cd/test/ba0740a.ini new file mode 100644 index 000000000..8a9ef103d --- /dev/null +++ b/cd/test/ba0740a.ini @@ -0,0 +1,34 @@ +[Main] +Demo=0 + +[ba1] +Edit_4 = ba3 -0 +Edit_5 = ba3 -0 +Edit_6 = ba4 -1 +File(150) = batbiva.msk|X +Patch = 740 +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 = 21-03-2019 +Descrizione = Base +Dischi = 1 +Moduli = sy +OEM = +Patch = 740 +PostProcess = bainst -0 BA +PreProcess = +Prezzo(1) = +Prezzo(2) = +Versione = 21511200 + diff --git a/cd/test/ba0740a1.zip b/cd/test/ba0740a1.zip new file mode 100644 index 000000000..08dd3af55 Binary files /dev/null and b/cd/test/ba0740a1.zip differ diff --git a/cd/test/ca0742.txt b/cd/test/ca0742.txt new file mode 100644 index 000000000..527754641 --- /dev/null +++ b/cd/test/ca0742.txt @@ -0,0 +1,4 @@ +ca3.exe + +Corretta selezione commessa nella stampa rendiconto. Venivano comprese anche le commesse con lo stesso prefisso +(Es. CV18MPR50579E2 entrava in CV18MPR50579 e CV18MB250579E2 entrava in CV18MB250579 diff --git a/cd/test/ca0742a.ini b/cd/test/ca0742a.ini new file mode 100644 index 000000000..713294ee1 --- /dev/null +++ b/cd/test/ca0742a.ini @@ -0,0 +1,27 @@ +[Main] +Demo=0 + +[ca1] +Edit_106 = ca0 -3 +Edit_107 = ca2 -0 +Edit_146 = ca0 -4 +Edit_147 = ca0 -5 +Edit_148 = ca0 -6 +Edit_149 = ca0 -7 +File(26) = ca3.exe|X +Patch = 742 +Versione = 21511200 + +[ca] +Data = 06-06-2016 +Descrizione = Contabilita' Analitica +Dischi = 1 +Moduli = ba,cg +OEM = +Patch = 742 +PostProcess = +PreProcess = +Prezzo(1) = +Prezzo(2) = +Versione = 21511200 + diff --git a/cd/test/ca0742a1.zip b/cd/test/ca0742a1.zip new file mode 100644 index 000000000..5e61c1e3d Binary files /dev/null and b/cd/test/ca0742a1.zip differ diff --git a/cd/test/cg0742.txt b/cd/test/cg0742.txt new file mode 100644 index 000000000..7a3b158e1 --- /dev/null +++ b/cd/test/cg0742.txt @@ -0,0 +1,5 @@ +cg3.exe +cg2100c.msk +cg4.exe + +Allineamento con ultima compilazione di xvt \ No newline at end of file diff --git a/cd/test/cg0742a.ini b/cd/test/cg0742a.ini new file mode 100644 index 000000000..4088cbef9 --- /dev/null +++ b/cd/test/cg0742a.ini @@ -0,0 +1,96 @@ +[Main] +Demo=0 + +[cg1] +Edit_23 = cg2 -0 +File(13) = cg2100c.msk|X +File(23) = cg3.exe|X +File(41) = cg4.exe|X +Patch = 0742 +Versione = 21511200 + +[cg99] +Kill(0) = bastpor.rep|x +Kill(1) = batbins.msk|x +Kill(2) = bastcam.msk|x +Kill(3) = bastnot.msk|x +Kill(4) = bastesc.msk|x +Kill(5) = bastleg.msk|x +Kill(6) = bastpor.msk|x +Kill(7) = batbscc.msk|x +Kill(8) = batblia.msk|x +Kill(9) = bastzon.rep|x +Kill(10) = batbarb.msk|x +Kill(11) = batblia.msk|x +Kill(12) = batbdpn.msk|x +Kill(13) = bastcco.msk|x +Kill(14) = bastcam.rep|x +Kill(15) = bastcve.msk|x +Kill(16) = batbleg.msk|x +Kill(17) = batbvet.msk|x +Kill(18) = batbcco.msk|x +Kill(19) = bastver.msk|x +Kill(20) = batbind.msk|x +Kill(21) = batbntb.msk|x +Kill(22) = bastivd.msk|x +Kill(23) = bastscc.rep|x +Kill(24) = bastmsp.rep|x +Kill(25) = bastleg.rep|x +Kill(26) = bastivd.rep|x +Kill(27) = batbtit.msk|x +Kill(28) = bastntb.rep|x +Kill(29) = bastntb.msk|x +Kill(30) = batbtra.msk|x +Kill(31) = bastesc.rep|x +Kill(32) = bastvet.msk|x +Kill(33) = batblbu.msk|x +Kill(34) = batbinl.msk|x +Kill(35) = batbivd.msk|x +Kill(36) = bastnot.rep|x +Kill(37) = bastcfi.rep|x +Kill(38) = bastcfi.msk|x +Kill(39) = batbmsp.msk|x +Kill(40) = bastreg.rep|x +Kill(41) = bastvet.rep|x +Kill(42) = batbnot.msk|x +Kill(43) = bastver.rep|x +Kill(44) = batbzon.msk|x +Kill(45) = batbcfi.msk|x +Kill(46) = bastreg.msk|x +Kill(47) = bastpdb.rep|x +Kill(48) = batbdel.msk|x +Kill(49) = batbcam.msk|x +Kill(50) = bastarb.msk|x +Kill(51) = batbcve.msk|x +Kill(52) = bastdpn.rep|x +Kill(53) = bastndo.msk|x +Kill(54) = batbesc.msk|x +Kill(55) = cgtbcon.msk|x +Kill(56) = bastdpn.msk|x +Kill(57) = batbreg.msk|x +Kill(58) = batbndo.msk|x +Kill(59) = batbver.msk|x +Kill(60) = batbpdb.msk|x +Kill(61) = bastpdb.msk|x +Kill(62) = bastndo.rep|x +Kill(63) = bastscc.msk|x +Kill(64) = bastzon.msk|x +Kill(65) = batbpor.msk|x +Kill(66) = bastcco.rep|x +Kill(67) = bastarb.rep|x +Kill(68) = bastcve.rep|x +Kill(69) = bastmsp.msk|x + +[cg] +Data = 21-03-2019 +Descrizione = Contabilita' Generale +Dischi = 1 +Moduli = ba +OEM = +Patch = 742 +PostProcess = bainst -0 CG +PreProcess = +Prezzo(1) = +Prezzo(2) = +Versione = 21511200 + diff --git a/cd/test/cg0742a1.zip b/cd/test/cg0742a1.zip new file mode 100644 index 000000000..5c9c96fba Binary files /dev/null and b/cd/test/cg0742a1.zip differ diff --git a/cd/test/fp0738.txt b/cd/test/fp0738.txt new file mode 100644 index 000000000..ab5852727 --- /dev/null +++ b/cd/test/fp0738.txt @@ -0,0 +1,3 @@ +fp0.exe + +Aggiunte info in caso di errori \ No newline at end of file diff --git a/cd/test/fp0738a.ini b/cd/test/fp0738a.ini new file mode 100644 index 000000000..203a88e57 --- /dev/null +++ b/cd/test/fp0738a.ini @@ -0,0 +1,19 @@ +[Main] +Demo=0 + +[fp1] +File(0) = fp0.exe|X +Patch = 738 +Versione = 21511200 + +[fp] +Data = 19-03-2019 +Descrizione = Fattura Elettronica +Dischi = 1 +Moduli = cg,ve +OEM = +Patch = 738 +PostProcess = +PreProcess = +Versione = 21511200 + diff --git a/cd/test/fp0738a1.zip b/cd/test/fp0738a1.zip new file mode 100644 index 000000000..c70ff57a6 Binary files /dev/null and b/cd/test/fp0738a1.zip differ diff --git a/cd/test/fp0742.txt b/cd/test/fp0742.txt new file mode 100644 index 000000000..70deb7049 --- /dev/null +++ b/cd/test/fp0742.txt @@ -0,0 +1,2 @@ +fp0.exe +fp0100a.msk diff --git a/cd/test/fp0742a.ini b/cd/test/fp0742a.ini new file mode 100644 index 000000000..370a1d5c8 --- /dev/null +++ b/cd/test/fp0742a.ini @@ -0,0 +1,20 @@ +[Main] +Demo=0 + +[fp1] +File(0) = fp0.exe|X +File(1) = fp0100a.msk|X +Patch = 742 +Versione = 21511200 + +[fp] +Data = 21-03-2019 +Descrizione = Fattura Elettronica +Dischi = 1 +Moduli = cg,ve +OEM = +Patch = 742 +PostProcess = +PreProcess = +Versione = 21511200 + diff --git a/cd/test/fp0742a1.zip b/cd/test/fp0742a1.zip new file mode 100644 index 000000000..2117f9969 Binary files /dev/null and b/cd/test/fp0742a1.zip differ diff --git a/cd/test/sy0738.txt b/cd/test/sy0738.txt new file mode 100644 index 000000000..7a62e1287 --- /dev/null +++ b/cd/test/sy0738.txt @@ -0,0 +1,4 @@ +xvaga.dll +xvtdb.dll + +Patch di supporto per fp0738 \ No newline at end of file diff --git a/cd/test/sy0738a.ini b/cd/test/sy0738a.ini new file mode 100644 index 000000000..e6941ba36 --- /dev/null +++ b/cd/test/sy0738a.ini @@ -0,0 +1,22 @@ +[Main] +Demo=0 + +[sy1] +File(52) = xvaga.dll|X +File(53) = xvtdb.dll|X +Patch = 738 +Versione = 21511200 + +[sy] +Data = 19-03-2019 +Descrizione = Sistema +Dischi = 1 +Moduli = +OEM = +Patch = 738 +PostProcess = +PreProcess = +Prezzo(1) = +Prezzo(2) = +Versione = 21511200 + diff --git a/cd/test/sy0738a1.zip b/cd/test/sy0738a1.zip new file mode 100644 index 000000000..793972816 Binary files /dev/null and b/cd/test/sy0738a1.zip differ diff --git a/cd/test/sy0742.txt b/cd/test/sy0742.txt new file mode 100644 index 000000000..038c1ba80 --- /dev/null +++ b/cd/test/sy0742.txt @@ -0,0 +1,2 @@ +xvaga.dll +xvtdb.dll diff --git a/cd/test/sy0742a.ini b/cd/test/sy0742a.ini new file mode 100644 index 000000000..3b599c17c --- /dev/null +++ b/cd/test/sy0742a.ini @@ -0,0 +1,22 @@ +[Main] +Demo=0 + +[sy1] +File(52) = xvaga.dll|X +File(53) = xvtdb.dll|X +Patch = 0742 +Versione = 21511200 + +[sy] +Data = 21-03-2019 +Descrizione = Sistema +Dischi = 1 +Moduli = +OEM = +Patch = 742 +PostProcess = +PreProcess = +Prezzo(1) = +Prezzo(2) = +Versione = 21511200 + diff --git a/cd/test/sy0742a1.zip b/cd/test/sy0742a1.zip new file mode 100644 index 000000000..578a78a42 Binary files /dev/null and b/cd/test/sy0742a1.zip differ diff --git a/cd/test/tf0742.txt b/cd/test/tf0742.txt new file mode 100644 index 000000000..0dfa6e35a --- /dev/null +++ b/cd/test/tf0742.txt @@ -0,0 +1,4 @@ +tf0.exe +tf0100a.msk + +Allineamento con ultima compilazione di xvt \ No newline at end of file diff --git a/cd/test/tf0742a.ini b/cd/test/tf0742a.ini new file mode 100644 index 000000000..28305781e --- /dev/null +++ b/cd/test/tf0742a.ini @@ -0,0 +1,20 @@ +[Main] +Demo=0 + +[tf1] +File(0) = tf0.exe|X +File(1) = tf0100a.msk|X +Patch = 0742 +Versione = 21511200 + +[tf] +Data = 21-03-2019 +Descrizione = Trasferimento fatture +Dischi = 1 +Moduli = cg +OEM = +Patch = 742 +PostProcess = +PreProcess = +Versione = 21511200 + diff --git a/cd/test/tf0742a1.zip b/cd/test/tf0742a1.zip new file mode 100644 index 000000000..44f3977ee Binary files /dev/null and b/cd/test/tf0742a1.zip differ diff --git a/cd/test/ve0740.txt b/cd/test/ve0740.txt new file mode 100644 index 000000000..e59335908 --- /dev/null +++ b/cd/test/ve0740.txt @@ -0,0 +1,8 @@ +ve5.exe +ve6.exe +ve0.exe +ve1.exe +vetbtip.msk + +Aggiunto flag sulla tabella iva per escludere il codice dal calcolo bolli esenti +Sistemata maschera tipi documento \ No newline at end of file diff --git a/cd/test/ve0740a.ini b/cd/test/ve0740a.ini new file mode 100644 index 000000000..46a756450 --- /dev/null +++ b/cd/test/ve0740a.ini @@ -0,0 +1,133 @@ +[Main] +Demo=0 + +[ve1] +File(0) = ve0.exe|X +File(19) = ve1.exe|X +File(86) = ve5.exe|X +File(93) = ve6.exe|X +File(224) = vetbtip.msk|X +Patch = 740 +Versione = 21511200 + +[ve99] +Kill(0) = batbcld.msk|x +Kill(1) = bastspp.rep|x +Kill(2) = baststd.rep|x +Kill(3) = bastbnp.rep|x +Kill(4) = ve7400a.msk|x +Kill(5) = bastfrd.msk|x +Kill(6) = bastprs.rep|x +Kill(7) = basttip.msk|x +Kill(8) = bastcaa.rep|x +Kill(9) = efstbnp.msk|x +Kill(10) = batbprs.msk|x +Kill(11) = batbabe.msk|x +Kill(12) = bastgca.msk|x +Kill(13) = batbgmc.msk|x +Kill(14) = bastcau.rep|x +Kill(15) = bastcra.msk|x +Kill(16) = bastspp.msk|x +Kill(17) = basttag.rep|x +Kill(18) = batbcau.msk|x +Kill(19) = bastctr.rep|x +Kill(20) = ve7500a.msk|x +Kill(21) = bastasf.rep|x +Kill(22) = bastums.rep|x +Kill(23) = bastfrr.msk|x +Kill(24) = basteld.rep|x +Kill(25) = batbprv.msk|x +Kill(26) = ve7200a.msk|x +Kill(27) = batbgca.msk|x +Kill(28) = batbmre.msk|x +Kill(29) = bastcaa.msk|x +Kill(30) = ve7700a.msk|x +Kill(31) = batbtri.msk|x +Kill(32) = basttip.rep|x +Kill(33) = efstbnp.rep|x +Kill(34) = baststd.msk|x +Kill(35) = batbasf.msk|x +Kill(36) = bastimb.msk|x +Kill(37) = batbrfa.msk|x +Kill(38) = ve7300a.msk|x +Kill(39) = ve7600a.msk|x +Kill(40) = batbspt.msk|x +Kill(41) = bastfca.rep|x +Kill(42) = bastrfc.msk|x +Kill(43) = bastprs.msk|x +Kill(44) = bastgcg.msk|x +Kill(45) = batbspp.msk|x +Kill(46) = batbgcg.msk|x +Kill(47) = bastnum.rep|x +Kill(48) = bastgmc.msk|x +Kill(49) = batbrfc.msk|x +Kill(50) = bastubi.msk|x +Kill(51) = batbtag.msk|x +Kill(52) = ve7400a.ini|x +Kill(53) = bastrfa.msk|x +Kill(54) = bastabe.rep|x +Kill(55) = bastubi.rep|x +Kill(56) = bastasf.msk|x +Kill(57) = batbctr.msk|x +Kill(58) = ve7100a.msk|x +Kill(59) = batbcaa.msk|x +Kill(60) = batbfid.msk|x +Kill(61) = ve7300a.frm|x +Kill(62) = bastfrr.rep|x +Kill(63) = bastums.msk|x +Kill(64) = basttri.rep|x +Kill(65) = bastrfa.rep|x +Kill(66) = bastcau.msk|x +Kill(67) = batbtip.msk|x +Kill(68) = batbubi.msk|x +Kill(69) = basttag.msk|x +Kill(70) = basteld.msk|x +Kill(71) = bastimb.rep|x +Kill(72) = bastrfc.rep|x +Kill(73) = ve7.exe|x +Kill(74) = ve7200a.frm|x +Kill(75) = batbfrr.msk|x +Kill(76) = bastfca.msk|x +Kill(77) = batbfrd.msk|x +Kill(78) = bastctr.msk|x +Kill(79) = batbpro.msk|x +Kill(80) = ve7400conf.ini|x +Kill(81) = bastfrm.rep|x +Kill(82) = batbbnp.msk|x +Kill(83) = bastgca.rep|x +Kill(84) = batbstd.msk|x +Kill(85) = ve7701a.ini|x +Kill(86) = batbfsa.msk|x +Kill(87) = batbnum.msk|x +Kill(88) = bastabe.msk|x +Kill(89) = eftbbnp.msk|x +Kill(90) = batbfca.msk|x +Kill(91) = bastgcg.rep|x +Kill(92) = batbgsa.msk|x +Kill(93) = bastfrm.msk|x +Kill(94) = bastbnp.msk|x +Kill(95) = bastgmc.rep|x +Kill(96) = bastcra.rep|x +Kill(97) = bastfrd.rep|x +Kill(98) = batbacr.msk|x +Kill(99) = batbimb.msk|x +Kill(100) = basttri.msk|x +Kill(101) = bastnum.msk|x +Kill(102) = batbeld.msk|x +Kill(103) = batbums.msk|x +Kill(104) = batbcra.msk|x +Kill(105) = batbfrm.msk|x + +[ve] +Data = 12-03-2019 +Descrizione = Vendite +Dischi = 1 +Moduli = ba,cg9,pr9,mg9,sv9,in9,ef9 +OEM = +Patch = 740 +PostProcess = bainst -0 VE +PreProcess = +Prezzo(1) = +Prezzo(2) = +Versione = 21511200 + diff --git a/cd/test/ve0740a1.zip b/cd/test/ve0740a1.zip new file mode 100644 index 000000000..6bf9a5746 Binary files /dev/null and b/cd/test/ve0740a1.zip differ diff --git a/src/ba/batbiva.h b/src/ba/batbiva.h index 4d13f11cd..a6c7da1d3 100755 --- a/src/ba/batbiva.h +++ b/src/ba/batbiva.h @@ -24,3 +24,4 @@ #define FLD_DESCR_I1 125 #define FLD_INDET_S4 126 #define FLD_NATURA 127 +#define CHK_TABIVA_B5 128 diff --git a/src/ba/batbiva.uml b/src/ba/batbiva.uml index 21cabd741..96c51adc9 100755 --- a/src/ba/batbiva.uml +++ b/src/ba/batbiva.uml @@ -53,22 +53,22 @@ BEGIN HELP "Indicare il tipo di codice IVA" ITEM " |Regime IVA normale" MESSAGE ENABLE,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0 - MESSAGE CLEAR,FLD_TABIVA_I3|CLEAR,FLD_TABIVA_I4 + MESSAGE CLEAR,FLD_TABIVA_I3|CLEAR,FLD_TABIVA_I4|HIDE,CHK_TABIVA_B5 MESSAGE ENABLE,FLD_TABIVA_S6 ITEM "VE|Ricavi da ventilare" MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0|CLEAR,FLD_TABIVA_I3 - MESSAGE CLEAR,FLD_TABIVA_I4|CLEAR,FLD_TABIVA_S6 + MESSAGE CLEAR,FLD_TABIVA_I4|CLEAR,FLD_TABIVA_S6|HIDE,CHK_TABIVA_B5 ITEM "ES|Operazioni esenti" MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0 - MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4 + MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4|SHOW,CHK_TABIVA_B5 MESSAGE ENABLE,FLD_TABIVA_S6 ITEM "NI|Non imponibili" MESSAGE CLEAR,FLD_TABIVA_R0|ENABLE,FLD_TABIVA_I0 - MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4 + MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4|SHOW,CHK_TABIVA_B5 MESSAGE ENABLE,FLD_TABIVA_S6 ITEM "NS|Non soggetti" MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0 - MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4 + MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4|SHOW,CHK_TABIVA_B5 MESSAGE ENABLE,FLD_TABIVA_S6 END @@ -144,6 +144,12 @@ BEGIN FIELD S4 END +BOOLEAN CHK_TABIVA_B5 +BEGIN + PROMPT 30 5 "Escluso dal calcolo dei bolli sufatture esenti" + FIELD B5 +END + GROUPBOX DLG_NULL 78 4 BEGIN PROMPT 1 6 "@bComunicazione operazioni rilevanti ai fini dell'IVA (Spesometro)" diff --git a/src/ca/ca3700.cpp b/src/ca/ca3700.cpp index de63b3482..424cfbe52 100755 --- a/src/ca/ca3700.cpp +++ b/src/ca/ca3700.cpp @@ -1653,11 +1653,8 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana(TLocalisamfile& tmp, { //legge la testata iniziale const long numreg = rmovana.get_long(RMOVANA_NUMREG); -#ifdef DBG - if (numreg == 32736) - const int cazzissimo = 1; -#endif - //se la testata e' cambiata, allora ha cambiato movana e quindi le righe da compattare sono.. + + //se la testata e' cambiata, allora ha cambiato movana e quindi le righe da compattare sono.. //..quelle che ha gia' messo nell'array delle righe_attuali if (numreg != old_numreg) { @@ -1692,7 +1689,21 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana(TLocalisamfile& tmp, for (cur_rmovana = 0; cur_rmovana.pos() < rmovana_items; ++cur_rmovana) { if (!pi.addstatus(1)) - break; + break; + const TString & cms = cur_rmovana.curr().get(RMOVANA_CODCMS); + + if (cms != _codcms) + { +#ifdef DBG + const long numreg = rmovana.get_long(RMOVANA_NUMREG); + const TRectype & movana = cache().get(LF_MOVANA, numreg); + TString msg; msg << "Mov - Commessa " << _codcms << " - Scartato " << movana.get(MOVANA_DCODNUM) << "." << movana.get_int(MOVANA_DANNO) << "." << movana.get_int(MOVANA_DNDOC) << " - Commessa " << cms; + + log.log(2, msg); +#endif + continue; + } + scrive_riga(tmp, rmovana, movana, NULL, log); } } @@ -1706,9 +1717,9 @@ int TPrint_rendiconto_ca_recordset::crea_filtro_rdoc(const TMask& msk, TRectype& { int cur_key = 6; //intanto sistema darec arec - da_rdoc.put(RDOC_CODCMS, _codcms); + da_rdoc.put(RDOC_CODCMS, _codcms); da_rdoc.put(RDOC_CODCOSTO, _codcosto); - a_rdoc = da_rdoc; + a_rdoc = da_rdoc; //se c'è solo cdc.. if (_codcms.blank() && _codcosto.full()) @@ -1822,7 +1833,8 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(TLocalisamfile& tmp, con //La riga esaminata deve avere una testata valida!!!!Se la testata non esiste va saltata.. //..la riga const TRectype& curr_doc = cur_rdoc.curr(LF_DOC); - if (!curr_doc.empty()) + + if (!curr_doc.empty()) { //controlla se il documento cui appartiene la rigadoc e' stato contabilizzato; //se e' stato contabilizzato lo salta in quanto la riga documento apparira' attraverso le righe @@ -1833,11 +1845,22 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(TLocalisamfile& tmp, con //..ricevere/emettere, vanno ri-contabilizzate lo stesso anche se lo sono gia' state. Il loro.. //..importo verra' poi messo nel fatturato. const TRectype& curr_rdoc = cur_rdoc.curr(); + const TString & cms = curr_rdoc.get(RDOC_CODCMS); const TString& rdoc_dacodnum = curr_rdoc.get(RDOC_DACODNUM); + #ifdef DBG - if (rdoc_dacodnum == "FDE" && curr_rdoc.get_int(RDOC_ANNO) == 2011 && curr_rdoc.get_int(RDOC_NDOC) == 3) - const int culone = 1; + if (curr_rdoc.get(RDOC_CODNUM) == "F01" && curr_rdoc.get_int(RDOC_ANNO) == 2018 && curr_rdoc.get_int(RDOC_NDOC) == 5350) + const int culone = 1; #endif + if (cms != _codcms) + { +#ifdef DBG + TString msg; msg << "Doc - Commessa " << _codcms << " - Scartato " << curr_rdoc.get(RDOC_CODNUM) << "." << curr_rdoc.get_int(RDOC_ANNO) << "." << curr_rdoc.get_int(RDOC_NDOC) << " - Commessa " << cms; + + log.log(2, msg); +#endif + continue; + } const bool is_special_doc = _num_fdr.find(rdoc_dacodnum) >= 0; //documento non contabilizzato o fattura da ricevere con numerazione configurata speciale if (numregca == 0) // || is_special_doc) diff --git a/src/cg/cglib01.h b/src/cg/cglib01.h index db16308fe..75355c19c 100755 --- a/src/cg/cglib01.h +++ b/src/cg/cglib01.h @@ -158,8 +158,9 @@ public: // TObject bool senza_imposta() { return percentuale() == ZERO;} int allegato(char tipocf) const { return get_int(tipocf == 'F' ? "S8" : "S7"); } - bool has_plafond() const { return get_int("S3") > 0; } - bool sospeso() const { return get_bool("B2"); } + bool has_plafond() const { return get_int("S3") > 0; } + bool sospeso() const { return get_bool("B2"); } + bool escluso_esenti() const { return get_bool("B5"); } real imposta(const real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola l'imposta sull'imponibile l'imposta e la ritorna real scorpora(real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Scorpora dall'imponibile l'imposta e la ritorna diff --git a/src/fp/fp0.cpp b/src/fp/fp0.cpp index 0c89b13a1..bbcdc387c 100644 --- a/src/fp/fp0.cpp +++ b/src/fp/fp0.cpp @@ -11,7 +11,6 @@ int main(int argc, char** argv) case 1: rt = fp0200(argc, argv); break; // Inserimento massivo PEC e Cod Sdi clifo case 2: rt = fp0300(argc, argv); break; // Gestione fatture attive (PAA, Ex Fattura PA) case 3: rt = fp0400(argc, argv); break; // Monitor fatture passive - case 4: rt = fp0500(argc, argv); break; // Elenco mancate consegna default: rt = fp0100(argc, argv); break; // Configurazione } return rt; diff --git a/src/fp/fp0.h b/src/fp/fp0.h index e2d05fe11..402f3391e 100644 --- a/src/fp/fp0.h +++ b/src/fp/fp0.h @@ -5,6 +5,5 @@ int fp0100(int argc, char* argv[]); int fp0200(int argc, char* argv[]); int fp0300(int argc, char* argv[]); int fp0400(int argc, char* argv[]); -int fp0500(int argc, char* argv[]); #endif diff --git a/src/fp/fp0100.cpp b/src/fp/fp0100.cpp index f87b3e031..5aa4b88e7 100644 --- a/src/fp/fp0100.cpp +++ b/src/fp/fp0100.cpp @@ -20,6 +20,7 @@ protected: void tipi_import() const; static TMask& get_tmp_msk(const char* title); virtual bool on_key(KEY key); + void delete_row_npf(TOperable_field& o) const; virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: @@ -47,6 +48,7 @@ void TParametri_mask::save_all() const fp_settings().set_check_not_block(get_bool(F_CHECK_NOT_BLOCK)); fp_settings().set_no_sconti_fatt(get_bool(F_CHECK_NO_SCONTI)); TFP_righe_custom().save_sheet(sfield(F_FORMPERS)); + TFP_nota_piede_f().save_sheet(sfield(F_NPFSHEET)); } void TParametri_mask::load_all() @@ -64,6 +66,7 @@ void TParametri_mask::load_all() set(F_CHECK_NOT_BLOCK, fp_settings().get_check_not_block()); set(F_CHECK_NO_SCONTI, fp_settings().get_no_sconti_fatt()); TFP_righe_custom().load_sheet(sfield(F_FORMPERS)); + TFP_nota_piede_f().load_sheet(sfield(F_NPFSHEET)); } void TParametri_mask::tipi_import() const @@ -134,6 +137,18 @@ bool TParametri_mask::on_key(KEY key) return true; } +void TParametri_mask::delete_row_npf(TOperable_field& o) const +{ + TSheet_field& sf = sfield(F_NPFSHEET); + + TMask& msk = o.mask(); + const TString& tipodoc_msk = msk.get(S_DOC); + + for(int i=0; i < sf.items(); i++) + if (tipodoc_msk == sf.row(i).get(0)) + sf.destroy(i); +} + bool TParametri_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) @@ -216,6 +231,13 @@ bool TParametri_mask::on_field_event(TOperable_field& o, TField_event e, long jo set(F_ESPORTADOC, ""); } } + case DLG_DELREC: + { + if (e == fe_button) + { + delete_row_npf(o); + } + } break; default: break; diff --git a/src/fp/fp0100a.h b/src/fp/fp0100a.h index 84ae40a64..f85275565 100644 --- a/src/fp/fp0100a.h +++ b/src/fp/fp0100a.h @@ -23,4 +23,10 @@ #define S_TIPORIGA 102 #define S_QTA 103 #define S_PREZZO 104 -#define S_IMPONIBILE 105 \ No newline at end of file +#define S_IMPONIBILE 105 + + +#define F_NPFSHEET 501 + +#define S_DOC 101 +#define S_NOTAPF 102 \ No newline at end of file diff --git a/src/fp/fp0100a.uml b/src/fp/fp0100a.uml index b0eb03475..ebcbd7356 100644 --- a/src/fp/fp0100a.uml +++ b/src/fp/fp0100a.uml @@ -101,7 +101,6 @@ BEGIN ITEM "Imponibile" END - GROUPBOX DLG_NULL 78 3 BEGIN PROMPT 1 8 "@BControlli preventivi" @@ -122,6 +121,12 @@ BEGIN PROMPT 2 12 "Non esporre sconti in fattura" END +SPREADSHEET F_NPFSHEET 60 6 +BEGIN + PROMPT 1 14 "Inserimento\nNote piede fattura" + ITEM "Tipo\nDoc@4" + ITEM "Nota piede\nFattura@15" +END ENDPAGE @@ -155,11 +160,11 @@ ENDPAGE ENDMASK -PAGE "Elementi spredsheet" 0 2 0 0 +PAGE "Elementi spredsheet" -1 -1 60 12 STRING S_TIPODOC 4 BEGIN - PROMPT 15 1 "Tipo doc " + PROMPT 1 1 "Tipo doc " HELP "Lasciare libero per tutti i tipo documento" USE %TIP SELECT S3[37,40]!="" @@ -173,7 +178,7 @@ END STRING S_TIPORIGA 4 BEGIN - PROMPT 15 1 "Tipo riga " + PROMPT 1 2 "Tipo riga " USE %TRI INPUT CODTAB S_TIPORIGA DISPLAY "Codice@10" CODTAB @@ -184,12 +189,12 @@ END STRING S_QTA 10 BEGIN - PROMPT 0 2 "Qta" + PROMPT 1 3 "Qta" END STRING S_PREZZO 10 BEGIN - PROMPT 0 2 "Prezzo" + PROMPT 1 4 "Prezzo" USE %FRR INPUT CODTAB S_PREZZO DISPLAY "Codice@10" CODTAB @@ -199,7 +204,7 @@ END STRING S_IMPONIBILE 10 BEGIN - PROMPT 0 2 "Imponibile" + PROMPT 1 5 "Imponibile" USE %FRR INPUT CODTAB S_IMPONIBILE DISPLAY "Codice" CODTAB @@ -224,4 +229,50 @@ END ENDPAGE +ENDMASK + + +PAGE "Elementi NPF" -1 -1 60 12 + +STRING S_DOC 4 +BEGIN + PROMPT 1 1 "Tipo doc " + HELP "Lasciare libero per tutti i tipo documento" + USE %TIP + SELECT S3[37,40]!="" + INPUT CODTAB S_TIPODOC + DISPLAY "Codice@10" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Tipo SDI@10" S3[37,40] + OUTPUT S_TIPODOC CODTAB + FLAG "UPA" +END + +MEMO S_NOTAPF 0 0 +BEGIN + PROMPT 1 6 "Nota piede fattura" +END + +ENDPAGE + +TOOLBAR "Riga" 0 0 0 2 + +BUTTON DLG_OK 2 2 +BEGIN + PROMPT 1 1 "" +END + + +BUTTON DLG_CANCEL 2 2 +BEGIN + PROMPT 1 1 "" +END + +BUTTON DLG_DELREC 2 2 +BEGIN + PROMPT 1 1 "ELIMINA NOTA" +END + +ENDPAGE + ENDMASK \ No newline at end of file diff --git a/src/fp/fp1.cpp b/src/fp/fp1.cpp index 8a8248282..3fe3a6e4f 100644 --- a/src/fp/fp1.cpp +++ b/src/fp/fp1.cpp @@ -9,6 +9,7 @@ int main(int argc, char** argv) // Stampe fatturazione elettronica switch (r) { + case 1: rt = fp1200(argc, argv); break; // Elenco mancate consegna default: rt = fp1100(argc, argv); break; // Stampa bolli fatture } return rt; diff --git a/src/fp/fp1.h b/src/fp/fp1.h index 082a309e1..fd3761f0f 100644 --- a/src/fp/fp1.h +++ b/src/fp/fp1.h @@ -2,5 +2,6 @@ #define __FP1_H int fp1100(int argc, char* argv[]); +int fp1200(int argc, char* argv[]); #endif diff --git a/src/fp/fp0500.cpp b/src/fp/fp1200.cpp similarity index 99% rename from src/fp/fp0500.cpp rename to src/fp/fp1200.cpp index 1ac1f9d2c..0c7a2766e 100644 --- a/src/fp/fp0500.cpp +++ b/src/fp/fp1200.cpp @@ -11,7 +11,7 @@ #include "../fe/felib.h" #include "fp0.h" -#include "fp0500a.h" +#include "fp1200a.h" ///////////////////////////////////////////////////////////////////////////////////// // Globals @@ -44,7 +44,7 @@ protected: bool _filter_changed; friend class TMancati_app; public: - TMancati_mask() : TAutomask("fp0500a"), _filter_changed(true) + TMancati_mask() : TAutomask("fp1200a"), _filter_changed(true) { disable(DLG_OK); _idx = -1; @@ -430,7 +430,7 @@ bool TMancati_app::destroy() return TSkeleton_application::destroy(); } -int fp0500(int argc, char* argv[]) +int fp1200(int argc, char* argv[]) { TMancati_app d2p; d2p.run(argc, argv, TR("Elenco Fatture Mancata Consegna")); diff --git a/src/fp/fp0500a.h b/src/fp/fp1200a.h similarity index 100% rename from src/fp/fp0500a.h rename to src/fp/fp1200a.h diff --git a/src/fp/fp0500a.uml b/src/fp/fp1200a.uml similarity index 99% rename from src/fp/fp0500a.uml rename to src/fp/fp1200a.uml index f93367b7b..e75427694 100644 --- a/src/fp/fp0500a.uml +++ b/src/fp/fp1200a.uml @@ -1,4 +1,4 @@ -#include "fp0500a.h" +#include "fp1200a.h" TOOLBAR "topbar" 0 0 0 2 diff --git a/src/fp/fplib.h b/src/fp/fplib.h index d8b37fdda..aa7ee9950 100644 --- a/src/fp/fplib.h +++ b/src/fp/fplib.h @@ -15,6 +15,65 @@ #define SQL_FLD "sql/" #define MANCATA_SEND "S" // Se la mail di mancata consegna è già stata inviata P1_ERRINT è segnato con "S" + +// Typedef per aiutare a capire cosa sono le chiavi +typedef TString MCodice_riga; +typedef TString MTipo_documento; + +// Mannaggia il fruttivendolo +class TFP_righe_custom : public TObject +{ + bool _loaded; + + struct TCustCol + { + TString _col_qta; + // Le colonne prezzo e imp non sono lette se di default + TString _col_prezzo; + TString _col_imponibile; + TString _col_nota_piede; + }; + + // Mappa con in chiave COD_RIGA, TIPO_DOC + std::map> _custom_table; + + void load_map(); + static TCustCol& get_no_custom(); + TCustCol& get(const TString& codriga, const TString& tipodoc); + +public: + + static void save_sheet(TSheet_field& sheet_field); + static void load_sheet(TSheet_field& sheet_field); + + const TString& get_qta(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_qta; } + const TString& get_prezzo(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_prezzo; } + const TString& get_imponibile(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_imponibile; } + + TFP_righe_custom(); +}; + +class TFP_nota_piede_f +{ + std::map _nota_piede_fattura; + bool _loaded; + TToken_string _tipi_doc; // Array di stringhe dei tipi doc caricati (per capire se ne elimino) + const TString _null_string; + static void write_ini_npf(const TString& tipodoc, TToken_string& msg); // Salva sul file ini la n.p.f. di quel tipodoc + static void delete_ini_npf(const TString& tipodoc); // Rimuove i tipidoc in eccesso (quando si modifica lo spreadsheet) + static TString get_ini_npf(const TString& tipodoc); // Legge dal file ini e restituisce la n.p.f. di quel tipodoc + void get_load(); // Carica la mappa + void save_npf_spredsheet(TSheet_field& sheet_field); + void save_new_tipidoc(TSheet_field& sheet_field); + +public: + void load_sheet(TSheet_field& sheet_field); + void save_sheet(TSheet_field& sheet_field); + const TString& get_nota_piede(const TString& tipo_doc); + + TFP_nota_piede_f(); +}; + enum { no_pdf = -1, pdf_ok = 0, no_alleg = -2}; // Ritorna la connessione al DB paf secondo i parametri impostati nel programma di configurazione @@ -137,6 +196,8 @@ private: TPaf_container _paf_container; int _count_r_conai; bool _nascondi_sconti_righe_fatt; + TFP_righe_custom _righe_custom; + TFP_nota_piede_f _riga_npf; // Classe interna per gestire righe aggiuntive in riepilogo class TRiepilogo_agg @@ -195,7 +256,7 @@ protected: bool add_row_art(long& riga_art, const TString& codice_tipo, const TString& codice_valore, TPaf_record& paf); bool add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf); const TString& converti_prezzo(const real& prezzo) const; - void set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) const; + void set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc); void add_ritenuta(const TDocumentoEsteso& doc, const TSpesa_prest& sp, TPaf_record& paf0700f) const; bool add_riepilogo_iva(TPaf_record& paf2200f, const TCodiceIVA& cod_iva, const char* eiva, const real& imponibile = ZERO, const real& imposta = ZERO); bool add_cassa_previdenziale(TRiga_documento& rdoc); @@ -246,7 +307,10 @@ public: const bool is_f8() const; const bool get_check_not_block() const; const TString& get_body_mail(int idx = -1) const; + const TString& get_npf(const char* tipodoc, int idx) const; const bool get_no_sconti_fatt() const; + // Get tipidoc per NotaPiedeFattura + const TString get_npf_tipodoc(int indx) const; // Setters void set_db_indirizzo(const TString& ind) const; @@ -265,8 +329,12 @@ public: void set_check_not_block(bool not_block) const; void set_body_mail(const char* msg, int idx = -1) const; void set_no_sconti_fatt(const bool no_sconti_fatt) const; + void set_npf(const char * tipodoc, const char* msg, int idx) const; + void set_npf_tipodoc(const TString& tipodoc, int indx) const; void remove_para_ini(int idx); + void remove_npf_ini(const char* tipodoc, int idx); + void remove_tipodoc_npf(int idx) const; }; inline TFP_settings& fp_settings() @@ -296,42 +364,6 @@ public: TFP_selected_docs(); }; -// Typedef per aiutare a capire cosa sono le chiavi -typedef TString MCodice_riga; -typedef TString MTipo_documento; - -// Mannaggia il fruttivendolo -class TFP_righe_custom : public TObject -{ - bool _loaded; - - struct TCustCol - { - TString _col_qta; - // Le colonne prezzo e imp non sono lette se di default - TString _col_prezzo; - TString _col_imponibile; - }; - - // Mappa con in chiave COD_RIGA, TIPO_DOC - std::map> _custom_table; - - void load_map(); - static TCustCol& get_no_custom(); - TCustCol& get(const TString& codriga, const TString& tipodoc); - -public: - - static void save_sheet(TSheet_field& sheet_field); - static void load_sheet(TSheet_field& sheet_field); - - const TString& get_qta(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_qta; } - const TString& get_prezzo(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_prezzo; } - const TString& get_imponibile(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_imponibile; } - - TFP_righe_custom(); -}; - class TFp_mail_sender { int _anno; diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 3306aa6fe..b558f1787 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -46,6 +46,7 @@ void set_connection(SSimple_query& s) } #endif } + SSimple_query& fp_db() { static SSimple_query* db = nullptr; @@ -1161,16 +1162,14 @@ const TString& TDoc_fp::converti_prezzo(const real& prezzo) const ret << prezzo; return ret; } -void TDoc_fp::set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) const +void TDoc_fp::set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) { // Setto l'unità di misura paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); - static TFP_righe_custom righe_custom; - - const TString& field_qta = righe_custom.get_qta(rdoc->tipo().codice(), rdoc->doc().tipo().codice()); - const TString& field_prezzo = righe_custom.get_prezzo(rdoc->tipo().codice(), rdoc->doc().tipo().codice()); - const TString& field_imponibile = righe_custom.get_imponibile(rdoc->tipo().codice(), rdoc->doc().tipo().codice()); + const TString& field_qta = _righe_custom.get_qta(rdoc->tipo().codice(), rdoc->doc().tipo().codice()); + const TString& field_prezzo = _righe_custom.get_prezzo(rdoc->tipo().codice(), rdoc->doc().tipo().codice()); + const TString& field_imponibile = _righe_custom.get_imponibile(rdoc->tipo().codice(), rdoc->doc().tipo().codice()); const bool custom_prezzo = field_prezzo.full(); @@ -2014,6 +2013,22 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } } + const TString& nota_piede_fatt = _riga_npf.get_nota_piede(doc.tipo().codice()); + if(nota_piede_fatt.full()) + { + reset(paf1800f); + paf1800f.set("PI_NUMEROLINEA", riga); + reset(paf3000f); + paf3000f.set("PT_RIFNUMLINEA", riga); + paf3000f.set("PT_COMMENTO", nota_piede_fatt.left(900)); + paf1800f.set("PI_QUANTITA", UNO); + paf1800f.set("PI_PREZZOUNIT", ZERO); + paf1800f.set("PI_PRZTOTALE", ZERO); + set_IVA(_codivadefault, paf1800f); + ok &= insert(paf1800f) && insert(paf3000f); + riga++; + } + // // // Metto qua i dati DDT per capire se la fattura è accompagnatoria o deriva da bolla diff --git a/src/fp/fplib02.cpp b/src/fp/fplib02.cpp index 1460041e0..2bea45d76 100644 --- a/src/fp/fplib02.cpp +++ b/src/fp/fplib02.cpp @@ -21,6 +21,7 @@ #define FP_F8 "f8" #define FP_CHECK_NOT_BLOCK "checknotblock" #define FP_MAIL "mail" +#define FP_NOTA_PIEDE_F "npf" // Nota piede fattura #define FP_CHECK_NO_SCONTI_FATT "noscontifatt" // Sheet fp0300 @@ -125,6 +126,18 @@ const TString& TFP_settings::get_body_mail(int idx) const return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_MAIL, "STOpsTOP", idx); } +const TString& TFP_settings::get_npf(const char * tipodoc, int idx) const +{ + TString name; name << FP_NOTA_PIEDE_F << "-" << tipodoc; + return ini_get_string(FILE_CONFIG, FILE_SECTION, name, "FERMATIostrega", idx); +} + +const TString TFP_settings::get_npf_tipodoc(int indx) const +{ + TString name; name << FP_NOTA_PIEDE_F << "_tipodoc"; + return ini_get_string(FILE_CONFIG, FILE_SECTION, name, "FERMATIostrega", indx); +} + const bool TFP_settings::get_no_sconti_fatt() const { return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NO_SCONTI_FATT, false); @@ -205,6 +218,13 @@ void TFP_settings::set_body_mail(const char* msg, int idx) const ini_set_string(FILE_CONFIG, FILE_SECTION, FP_MAIL, msg, idx); } +// Set nota piede fattura +void TFP_settings::set_npf(const char * tipodoc, const char* msg, int idx) const +{ + TString name; name << FP_NOTA_PIEDE_F << "-" << tipodoc; + ini_set_string(FILE_CONFIG, FILE_SECTION, name, msg, idx); +} + void TFP_settings::set_no_sconti_fatt(const bool no_sconti_fatt) const { ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NO_SCONTI_FATT, no_sconti_fatt); @@ -215,6 +235,25 @@ void TFP_settings::remove_para_ini(int idx) ini_remove(FILE_CONFIG, FILE_SECTION, FP_MAIL, idx); } +void TFP_settings::remove_npf_ini(const char * tipodoc, int idx) +{ + TString name; name << FP_NOTA_PIEDE_F << "-" << tipodoc; + ini_remove(FILE_CONFIG, FILE_SECTION, name, idx); +} + +void TFP_settings::set_npf_tipodoc(const TString& tipodoc, int indx) const +{ + TString name; name << FP_NOTA_PIEDE_F << "_tipodoc"; + ini_set_string(FILE_CONFIG, FILE_SECTION, name, tipodoc, indx); +} + +// Rimuove linea ini in eccesso per tipodoc per nota piede fattura +void TFP_settings::remove_tipodoc_npf(const int idx) const +{ + TString name; name << FP_NOTA_PIEDE_F << "_tipodoc"; + ini_remove(FILE_CONFIG, FILE_SECTION, name, idx); +} + TRectype TFP_selected_docs::fill_rectype() const { TRectype r(LF_TABMOD); @@ -307,6 +346,161 @@ TFP_righe_custom::TCustCol& TFP_righe_custom::get(const TString& codriga, const return get_no_custom(); } +void TFP_nota_piede_f::write_ini_npf(const TString& tipodoc, TToken_string& msg) +{ + /* Vado a salvare in un config .ini tipo-doc:messaggio su piu righe */ + int indx = 0; + + // Conto quanti ne avevo salvati prima nel file ini per poi controllare + // che non sto salvando meno di quelli che ci sono già + int previous_indx = 0; + for (TString row = fp_settings().get_npf(tipodoc, previous_indx); row != "FERMATIostrega"; row = fp_settings().get_npf(tipodoc, previous_indx)) + previous_indx++; + // Vado a salvare ogni riga nel file ini + for (const char* row = msg.get(); row; row = msg.get()) + fp_settings().set_npf(tipodoc, row, indx++); + + if (indx < previous_indx) + { + for (int i = indx; i < previous_indx; i++) + fp_settings().remove_npf_ini(tipodoc, i); + } +} + +void TFP_nota_piede_f::delete_ini_npf(const TString& tipodoc) +{ + // Conto quanti ne avevo salvati prima nel file ini per poi controllare + // che non sto salvando meno di quelli che ci sono già + int previous_indx = 0; + for (TString row = fp_settings().get_npf(tipodoc, previous_indx); row != "FERMATIostrega"; row = fp_settings().get_npf(tipodoc, previous_indx)) + previous_indx++; + for (int i = 0; i < previous_indx; i++) + fp_settings().remove_npf_ini(tipodoc, i); + +} + +// Crea la stringa della nota se su piu righe dal file ini (nometag+indice) +TString TFP_nota_piede_f::get_ini_npf(const TString& tipodoc) +{ + TString msg; msg.cut(0); + + int indx = 0; + for (TString row = fp_settings().get_npf(tipodoc, indx); row != "FERMATIostrega"; row = fp_settings().get_npf(tipodoc, indx)) + { + if(indx++ > 0) + msg << '\n'; + msg << row; + } + return msg; +} + +void TFP_nota_piede_f::get_load() +{ + // Prima leggo i tipi doc che ho salvato dall'ini + TString tipo_get = ""; + int indx = 0; + while ((tipo_get = fp_settings().get_npf_tipodoc(indx++)) != "FERMATIostrega") + _tipi_doc.add(tipo_get); + + const int itms = _tipi_doc.items(); + for (int i = 0; i < itms; i++) + { + tipo_get = _tipi_doc.get(); + TString npf = get_ini_npf(tipo_get); + _nota_piede_fattura.insert({ tipo_get, npf }); + } + _loaded = true; +} + +void TFP_nota_piede_f::load_sheet(TSheet_field& sheet_field) +{ + sheet_field.hide(); + // Prima leggo i tipi doc che ho salvato dall'ini + TString tipo_get = ""; + int indx = 0; + while((tipo_get = fp_settings().get_npf_tipodoc(indx++)) != "FERMATIostrega") + _tipi_doc.add(tipo_get); + + int i = 0; + while (!(tipo_get = _tipi_doc.get()).empty()) + { + TString npf = get_ini_npf(tipo_get); + TToken_string& row = sheet_field.row(-1); + row.add(tipo_get); + row.add(npf); + } + sheet_field.show(); + sheet_field.force_update(); +} + +void TFP_nota_piede_f::save_npf_spredsheet(TSheet_field& sheet_field) +{ + const int items_sf = sheet_field.items(); + TString tipo_doc = 0; + // Salvo le note piede fatt presenti nello spreadsheet + // Se ho eliminato una nota di un tipodoc devo rimuovere tutte le righe di quel tipodoc + for (int i = 0; i < items_sf; i++) + { + TToken_string row = sheet_field.row(i); + TToken_string msg(row.get(1), '\n'); + write_ini_npf(tipo_doc = row.get(0), msg); + _tipi_doc.restart(); + for (int j = 0; j < _tipi_doc.items(); j++) + if (tipo_doc == _tipi_doc.get()) // Elimino dall'array i tipi doc che sto salvando + _tipi_doc.destroy(j); // Per controllare che non ne rimangano alcuni in piu` + } + + if (_tipi_doc.items() > 0) // E` rimasto qualcuno fuori (è stato eliminato un tipodoc rispetto a quelli salvati nel file ini) + { + for (int i = 0; i < _tipi_doc.items(); i++) // Per ogni tipodoc rimasto fuori elimino tutte le possibili righe del messaggio + delete_ini_npf(_tipi_doc.get()); + } +} + +void TFP_nota_piede_f::save_new_tipidoc(TSheet_field& sheet_field) +{ + int n_tipidoc = 0; + TString npf_get; + // Conto quanti tipi doc ho nel file ini + for (int i = 0; (npf_get = fp_settings().get_npf_tipodoc(i)) != "FERMATIostrega"; i++) + { + n_tipidoc++; + _tipi_doc.add(npf_get); + } + + // Salvo i nuovi tipidoc + const int items_sf = sheet_field.items(); + for (int i = 0; i < items_sf; i++) + { + TToken_string row = sheet_field.row(i); + TString tipodoc_sf(row.get(0)); + fp_settings().set_npf_tipodoc(tipodoc_sf, i); + } + + if (items_sf < n_tipidoc) + for (int i = items_sf; i < n_tipidoc; i++) + fp_settings().remove_tipodoc_npf(i); +} + +void TFP_nota_piede_f::save_sheet(TSheet_field& sheet_field) +{ + save_new_tipidoc(sheet_field); + save_npf_spredsheet(sheet_field); +} + +const TString& TFP_nota_piede_f::get_nota_piede(const TString& tipo_doc) +{ + if (!_loaded) + get_load(); + if(_nota_piede_fattura.find(tipo_doc) != _nota_piede_fattura.end()) + return _nota_piede_fattura[tipo_doc]; + return _null_string; +} + +TFP_nota_piede_f::TFP_nota_piede_f() : _loaded(false), _null_string("") +{ +} + void TFP_righe_custom::load_map() { TRelation rel(LF_TABMOD); diff --git a/src/fp/fplib03.cpp b/src/fp/fplib03.cpp index 7697bb403..c71f902ef 100644 --- a/src/fp/fplib03.cpp +++ b/src/fp/fplib03.cpp @@ -3,7 +3,7 @@ #include #include #include "modaut.h" -#include "fp0500a.h" +#include "fp1200a.h" class TExternal_app; diff --git a/src/fp/fpmenu.men b/src/fp/fpmenu.men index d1cce2a0f..8d2fd0c6b 100644 --- a/src/fp/fpmenu.men +++ b/src/fp/fpmenu.men @@ -14,7 +14,7 @@ Caption = "Stampe" Picture = Module = fp Flags = "" -Item_01 = "Elenco Mancata Consegna", "fp0 -4", "" +Item_01 = "Elenco Mancata Consegna", "fp1 -1", "" Item_02 = "Elenco bolli in fattura", "fp1 -0", "" [FPMENU_003] diff --git a/src/ve/velib03.cpp b/src/ve/velib03.cpp index 94701edbb..63fed65e0 100755 --- a/src/ve/velib03.cpp +++ b/src/ve/velib03.cpp @@ -504,10 +504,7 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const TCurrency_documento spese_val(spese()); spese_val.change_to_firm_val(); const real sp_orig = spese_val.get_num(); - bool estero = FALSE; // Assumiamo per ora non estero - - TString4 codiva_es; - iva_esente(codiva_es); + bool estero = false; // Assumiamo per ora non estero for (int j = 0; j < 5 && tot_bolli+iva_bolli != old_bolli; j++) { @@ -516,20 +513,18 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const const real imp_spese = sp_orig + tot_bolli - iva_bolli; const real imponibile = importo - imposte - imp_spese; tot_bolli = ZERO; - if (!tipo().nota_credito()) + real imponibile_esente; + + for (int r = physical_rows(); r > 0; r--) { - real imponibile_esente; - for (int r = physical_rows(); r > 0; r--) - { - const TRiga_documento& riga = ((TDocumento*)this)->row(r); - const TCodiceIVA codiva(riga.get(RDOC_CODIVA)); + const TRiga_documento& riga = ((TDocumento*)this)->row(r); + const TCodiceIVA codiva(riga.get(RDOC_CODIVA)); - if (codiva.tipo().not_empty()) - imponibile_esente += riga.imponibile(); - } - if (imponibile_esente >= impmin_bolli) - tot_bolli = bolli_es; - } + if (codiva.tipo().not_empty() && !codiva.escluso_esenti()) + imponibile_esente += abs(riga.imponibile()); + } + if (imponibile_esente >= impmin_bolli) + tot_bolli = bolli_es; pag.set_total(imponibile, imposte, imp_spese); pag.set_rate_auto(); @@ -540,16 +535,16 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const switch (p) { - case _ric_ban: - { - int i; - - for (i = 0; i < nscagl - 1; i++) - if ((real &) sca_bolli[i] >= imp) - break; - if (imp_bolli.items() > 0) - tot_bolli += (real &) imp_bolli[i]; - } + case _ric_ban: + { + int j; + + for (j = 0; j < nscagl - 1; j++) + if ((real &)sca_bolli[j] >= imp) + break; + if (imp_bolli.items() > 0) + tot_bolli += (real &)imp_bolli[j]; + } break; case _tratta: case _tratta_acc: diff --git a/src/ve/vetbtip.uml b/src/ve/vetbtip.uml index 9ed3b8fb3..dad4de822 100755 --- a/src/ve/vetbtip.uml +++ b/src/ve/vetbtip.uml @@ -234,19 +234,19 @@ END BOOLEAN F_SPESEAUT BEGIN - PROMPT 2 14 "Addebito auto spese cliente" + PROMPT 2 14 "Add.auto spese cliente" FIELD B0 END BOOLEAN F_FATCOM BEGIN - PROMPT 30 14 "Calcolo fattura commerciale" + PROMPT 30 14 "Calc.fatt.commerciale" FIELD B9 END BOOLEAN F_LORDO BEGIN - PROMPT 55 14 "Calcolo importi al lordo" + PROMPT 55 14 "Calc.importi al lordo" FIELD B8 MESSAGE TRUE CLEAR,F_FATCOM MESSAGE FALSE ENABLE,F_FATCOM