diff --git a/pa/SiaggPA/SSADll.dll b/pa/SiaggPA/SSADll.dll new file mode 100644 index 000000000..b27968f5c Binary files /dev/null and b/pa/SiaggPA/SSADll.dll differ diff --git a/pa/SiaggPA/SSADll64.dll b/pa/SiaggPA/SSADll64.dll new file mode 100644 index 000000000..3216f5730 Binary files /dev/null and b/pa/SiaggPA/SSADll64.dll differ diff --git a/pa/SiaggPA/SiaggPACAMPO.jar b/pa/SiaggPA/SiaggPACAMPO.jar new file mode 100644 index 000000000..a4aa3932b Binary files /dev/null and b/pa/SiaggPA/SiaggPACAMPO.jar differ diff --git a/pa/SiaggPA/SiaggPAGUI.bat b/pa/SiaggPA/SiaggPAGUI.bat new file mode 100644 index 000000000..80223ce64 --- /dev/null +++ b/pa/SiaggPA/SiaggPAGUI.bat @@ -0,0 +1,2 @@ +set path=%PATH%;%USERPROFILE%\SoftwareSirio\SiaggPA +java -jar SiaggPACAMPO.jar \ No newline at end of file diff --git a/pa/SiaggPA/config.properties b/pa/SiaggPA/config.properties new file mode 100644 index 000000000..22d2da918 --- /dev/null +++ b/pa/SiaggPA/config.properties @@ -0,0 +1,40 @@ +#properties setting for sqllite +dbserver=sqllite +classForName=org.sqlite.JDBC +connectionString=jdbc:sqlite +#user=putDBUserHere +#password=putDBPasswordHere + + +#properties setting for AS400 +#dbserver=as400 +#classForName=com.ibm.as400.access.AS400JDBCDriver +#connectionString=jdbc:as400://IpAs400 +#user=putDBUserHere +#password=putDBPasswordHere + + +#properties setting for mysql +#dbserver=mysql +#classForName=com.mysql.jdbc.Driver +#connectionString=jdbc:mysql://hostname:port/dbname +#user=putDBUserHere +#password=putDBPasswordHere + + +#properties setting for sqlserver +#dbserver=sqlserver +#classForName=com.microsoft.sqlserver.jdbc.SQLServerDriver +#connectionString=jdbc:sqlserver://hostname:port;DatabaseName=databasename +#user=putDBUserHere +#password=putDBPasswordHere + + +#properties setting for oracle +#dbserver=oracle +#classForName=oracle.jdbc.driver.OracleDriver +#connectionString=jdbc:oracle:thin:@hostnamet:port:database +#user=putDBUserHere +#password=putDBPasswordHere + + diff --git a/pa/SiaggPA/configGUI.properties b/pa/SiaggPA/configGUI.properties new file mode 100644 index 000000000..a22f69f7d --- /dev/null +++ b/pa/SiaggPA/configGUI.properties @@ -0,0 +1,5 @@ +#File Stored by SiaggPAGUI +#Tue May 27 12:36:48 CEST 2014 +percorso= +libas400= +raggruppa= diff --git a/pa/SiaggPA/lib/SiaggPAXCAMPO.jar b/pa/SiaggPA/lib/SiaggPAXCAMPO.jar new file mode 100644 index 000000000..cf9d7d397 Binary files /dev/null and b/pa/SiaggPA/lib/SiaggPAXCAMPO.jar differ diff --git a/pa/SiaggPA/lib/commons-codec-1.3.jar b/pa/SiaggPA/lib/commons-codec-1.3.jar new file mode 100644 index 000000000..957b6752a Binary files /dev/null and b/pa/SiaggPA/lib/commons-codec-1.3.jar differ diff --git a/pa/SiaggPA/lib/jt400.jar b/pa/SiaggPA/lib/jt400.jar new file mode 100644 index 000000000..44885a04c Binary files /dev/null and b/pa/SiaggPA/lib/jt400.jar differ diff --git a/pa/SiaggPA/lib/sqlite-jdbc4-3.8.2-SNAPSHOT.jar b/pa/SiaggPA/lib/sqlite-jdbc4-3.8.2-SNAPSHOT.jar new file mode 100644 index 000000000..cd8309061 Binary files /dev/null and b/pa/SiaggPA/lib/sqlite-jdbc4-3.8.2-SNAPSHOT.jar differ diff --git a/pa/SiaggPA/lib/ssa.jar b/pa/SiaggPA/lib/ssa.jar new file mode 100644 index 000000000..a8f530a15 Binary files /dev/null and b/pa/SiaggPA/lib/ssa.jar differ diff --git a/pa/SiaggPA/ssa.ini b/pa/SiaggPA/ssa.ini new file mode 100644 index 000000000..826aff60f --- /dev/null +++ b/pa/SiaggPA/ssa.ini @@ -0,0 +1,15 @@ +# LIVELLO DI DEBUG +# 0 = No debug +# 1 = Livello ERRORE +# 2 = Livello ERRORE + INFO +# 3 = Livello ERRORE + INFO + DEBUG +SSA-DEBUG=3 + +# ATTIVAZIONE MODALITA' CLIENT-SERVER +# IP_SERVER:PORTA +SSA-PORT= + +#Tempo in secondi dopo il quale un utente puo' essere dichiarato scaduto +PING-MAXTIME=300 +#Tempo in secondi ogni quanto pingare +PING-DELAY=60 diff --git a/pa/pa0100.cpp b/pa/pa0100.cpp index 55e2d2ee5..492caf7f0 100644 --- a/pa/pa0100.cpp +++ b/pa/pa0100.cpp @@ -467,7 +467,7 @@ void TPA_mask::fill() query.cut(0); query << "USE 33 KEY 2\nSELECT (BETWEEN(STATO,2,8))"; - query << "\nFROM TIPOCF=C CODCF=#CLIENTE PROVV=D ANNO=2014 DATADOC=" << dal.date2ansi() + query << "\nFROM TIPOCF=C CODCF=#CLIENTE PROVV=D ANNO=" << dal.year() << " DATADOC=" << dal.date2ansi() << "\nTO TIPOCF=C CODCF=#CLIENTE PROVV=D"; TISAM_recordset doc_pa(query); doc_pa.set_var("#CLIENTE", clifo_pa.get(CLI_CODCF)); @@ -499,6 +499,7 @@ void TPA_mask::fill() row->add(clifo_pa.get(CFV_PADESTIN).as_string()); row->add(clifo_pa.get(CFV_PARIFAMM).as_string()); row->add(clifo_pa.get("20."CLI_COFI).as_string()); + row->add(clifo_pa.get("20."CLI_SPLITPAY).as_bool() ? "X" : ""); sht.add(row); } @@ -742,7 +743,7 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc) paf0100f.set("P1_TRASMITTPAESE", paese); paf0100f.set("P1_TRASMITTCOD", _ditta.partita_IVA()); paf0100f.set("P1_PRGINVIO", ""); // Ci pensa SiAggPA - paf0100f.set("P1_FMTTRASMISS", "SDI10"); + paf0100f.set("P1_FMTTRASMISS", "SDI11"); // SDI11 si usa dal 2015 per lo split payment (prima era SDI10) paf0100f.set("P1_CODDEST", hfatt); TString80 tel; tel << firm.get(NDT_PTEL) << firm.get(NDT_TEL); @@ -1119,6 +1120,12 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc) paf2200f.set("PL_KEYBODYFATT", bfatt); paf2200f.remove(); // Cancella tutte le righe di riepilogo IVA + const char* eiva = "I"; // Esigibilità IVA: Immediata, Differita, Split payment + if (doc.is_split_payment()) + eiva = "S"; else + if (doc.get_bool(DOC_LIQDIFF) || doc.get_bool(DOC_IVAXCASSA)) + eiva = "D"; + long num_riep = 0; TAssoc_array& tiva = doc.tabella_iva(false); FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm) @@ -1135,10 +1142,8 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc) if (tipo == "ES") natura = "N4"; // Esente paf2200f.set("PL_NATURA", natura); } - paf2200f.set("PL_IMPONIBILE", riva.imponibile()); - paf2200f.set("PL_IMPOSTA", riva.imposta()); - // Esigibilità IVA: immediata o no? - const char* eiva = (doc.get_bool(DOC_LIQDIFF) || doc.get_bool(DOC_IVAXCASSA)) ? "D" : "I"; + paf2200f.set("PL_IMPONIBILE", riva.imponibile()); + paf2200f.set("PL_IMPOSTA", riva.imposta()); paf2200f.set("PL_ESIGIVA", eiva); paf2200f.set("PL_RIFNORMATIVO", riva.cod_iva().descrizione()); paf2200f.set("PL_GESTIONE", "D"); @@ -1287,6 +1292,22 @@ bool TDoc2Paf::genera_xml() tmp = PABASE"\\SiaggPACAMPO.jar"; tmp.make_absolute_path(); + const int ssa_err = xvt_dongle_sa_test("FATTPA.pa"); + if (ssa_err != 0) + { + TString80 msg; + switch (ssa_err) + { + case -100: msg = TR("File .ssa non valido o non trovato"); break; + case -101: msg = TR("Prodotto non trovato"); break; + case -103: msg = TR("Prodotto scaduto"); break; + case -201: msg = TR("Modulo non trovato"); break; + case -203: msg = TR("Modulo scaduto"); break; + default : break; + } + warning_box(FR("Non risulta attivo il modulo 'pa' del prodotto 'FATTPA'.\nErrore %d: %s"), ssa_err, (const char*)msg); + } + DIRECTORY old_dir; xvt_fsys_get_dir(&old_dir); DIRECTORY new_dir; xvt_fsys_convert_str_to_dir(tmp.path(), &new_dir); xvt_fsys_set_dir(&new_dir); @@ -1337,8 +1358,6 @@ void TDoc2Paf::main_loop() ndocs = 0; FOR_EACH_ARRAY_ROW(sht, r, riga) { - if (!pi.add_status(1)) - break; if (riga->starts_with("X")) { const int anno = riga->get_int(1); @@ -1348,6 +1367,8 @@ void TDoc2Paf::main_loop() if (elabora(key)) ndocs++; } + if (!pi.add_status(1)) + break; } message_box(FR("Sono stati elaborati %d documenti"), ndocs); if (ndocs > 0) diff --git a/pa/pa0100a.h b/pa/pa0100a.h index 6643e4a55..a703d8512 100644 --- a/pa/pa0100a.h +++ b/pa/pa0100a.h @@ -12,4 +12,5 @@ #define S_UFFICIO 108 #define S_RIFAMM 109 #define S_COFI 110 +#define S_SPLITPAY 111 diff --git a/pa/pa0100a.uml b/pa/pa0100a.uml index cbd9f77b0..604f6430f 100644 --- a/pa/pa0100a.uml +++ b/pa/pa0100a.uml @@ -30,6 +30,7 @@ BEGIN ITEM "Ufficio" ITEM "Riferimento\nAmministrazione@20" ITEM "Codice Fiscale@16" + ITEM "Scissione\nPagamenti@9" END ENDPAGE @@ -97,6 +98,12 @@ BEGIN FLAGS "D" END +BOOLEAN S_SPLITPAY +BEGIN + PROMPT 1 6 "Assogettato scissione pagamenti art.17 ter DPR 633/72" + FLAGS "D" +END + ENDPAGE TOOLBAR "Documento" 0 0 0 2