From f5ad9b6e8101798af9d517dc4c9586c449420379 Mon Sep 17 00:00:00 2001 From: mtollari Date: Fri, 28 Apr 2017 15:14:33 +0000 Subject: [PATCH] Patch level : 12.0 384 Files correlati : tf Commento : - Aggiunta nuovo modulo TF, con programma Liquidazione IVA Periodica - Aggiunta tabelle f173 e f174, la prima per il trasferimento fatture (in lavorazione) e la seconda per questo nuovo programma git-svn-id: svn://10.65.10.50/branches/R_10_00@23760 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/tf/f173.dir | 3 + src/tf/f173.trr | 13 + src/tf/f174.dir | 3 + src/tf/f174.trr | 63 +++++ src/tf/tf0.cpp | 21 ++ src/tf/tf0.h | 8 + src/tf/tf0200.cpp | 590 +++++++++++++++++++++++++++++++++++++++++++++ src/tf/tf0200a.h | 64 +++++ src/tf/tf0200a.uml | 509 ++++++++++++++++++++++++++++++++++++++ src/tf/tf0500.cpp | 281 +++++++++++++++++++++ src/tf/tf0500a.h | 8 + src/tf/tf0500a.uml | 130 ++++++++++ src/tf/tfmenu.men | 8 + 13 files changed, 1701 insertions(+) create mode 100644 src/tf/f173.dir create mode 100644 src/tf/f173.trr create mode 100644 src/tf/f174.dir create mode 100644 src/tf/f174.trr create mode 100644 src/tf/tf0.cpp create mode 100644 src/tf/tf0.h create mode 100644 src/tf/tf0200.cpp create mode 100644 src/tf/tf0200a.h create mode 100644 src/tf/tf0200a.uml create mode 100644 src/tf/tf0500.cpp create mode 100644 src/tf/tf0500a.h create mode 100644 src/tf/tf0500a.uml create mode 100644 src/tf/tfmenu.men diff --git a/src/tf/f173.dir b/src/tf/f173.dir new file mode 100644 index 000000000..23f8b1476 --- /dev/null +++ b/src/tf/f173.dir @@ -0,0 +1,3 @@ +173 +0 +$trasfatt|0|0|69|0|Tabella trasferimento fatture||| diff --git a/src/tf/f173.trr b/src/tf/f173.trr new file mode 100644 index 000000000..0537359de --- /dev/null +++ b/src/tf/f173.trr @@ -0,0 +1,13 @@ +173 +9 +NUMREG|9|4|0|Codice esercizio +TIPO|7|1|0|Tipo liente o ornitore +CODCF|3|6|0|Codice +TIPODOC|1|2|0|Tipo documento +NUMDOC|1|7|0|Numero documento +DATADOC|5|8|0|Data documento +IMPONIBILE|4|18|3|Imponibile +IMPOSTA|4|18|3|Imposta +CODIVA|1|4|0|Codice IVA +1 +NUMREG+CODIVA| diff --git a/src/tf/f174.dir b/src/tf/f174.dir new file mode 100644 index 000000000..b19dda4b8 --- /dev/null +++ b/src/tf/f174.dir @@ -0,0 +1,3 @@ +174 +0 +$ivaliq|1|1|523|0|Righe liquidazione mensile/trimestrale IVA||| diff --git a/src/tf/f174.trr b/src/tf/f174.trr new file mode 100644 index 000000000..e13238ff3 --- /dev/null +++ b/src/tf/f174.trr @@ -0,0 +1,63 @@ +174 +59 +ANNO|2|4|0|Anno di imposta +MESE|2|2|0|Periodo dichiarazione, mese +TRIMESTRE|2|1|0|Periodo dichiarazione, trimestre +SUBFOR|8|1|0|Subforniture +EVECC|2|1|0|Eventi eccezionali +TOTOPATT|4|18|3|Totale operazioni attive (al netto dell'IVA) +TOTOPATTXC|4|18|3|Totale operazioni attive IVAxCassa +TOTOPPAS|4|18|3|Totale operazioni passive (al netto dell'IVA) +TOTOPPASXC|4|18|3|Totale operazioni passive IVAxCassa +IVAES|4|18|3|IVA esigibile +IVAESXC|4|18|3|IVA esigibile x cassa +IVAESDIFF|4|18|3|IVA esigibile differita +IVADET|4|18|3|IVA detratta +IVADETXC|4|18|3|IVA detratta x cassa +IVADETDIFF|4|18|3|IVA detratta differita +IVADOV|4|18|3|IVA dovuta +IVADOVC|4|18|3|IVA a credito VP6 col 2 +DEBPREC|4|18|3|Debito periodo precedente +CREPREC|4|18|3|Credito periodo precedente +CREAPREC|4|18|3|Credito anno precedente +VEAUE|4|18|3|Versamenti auto UE +CREIMP|4|18|3|Crediti di imposta +INTLIQTRI|4|18|3|Interessi dovuti per liquidazioni trimestrali +ACCDOV|4|18|3|Acconto dovuto +IVAVER|4|18|3|IVA da versare +IVAVERC|4|18|3|IVA a credito VP14 col 2 +RETTIFICHE|4|18|3|Rettifiche +VARIMP|4|18|3|Variazioni di imposta +RIMBORSI|4|18|3|Rimborsi +IMPNOVER|4|18|3|Imposta non versata +CRESPEC|4|18|3|Crediti speciali +VEREFF|4|18|3|Versamenti effettuati +BTOTOPATT|8|1|0|Booleano controllo modifica da utente +BTOTOPATTX|8|1|0|Booleano controllo modifica da utente +BTOTOPPAS|8|1|0|Booleano controllo modifica da utente +BTOTOPPASX|8|1|0|Booleano controllo modifica da utente +BIVAES|8|1|0|Booleano controllo modifica da utente +BIVAESXC|8|1|0|Booleano controllo modifica da utente +BIVAESDIFF|8|1|0|Booleano controllo modifica da utente +BIVADET|8|1|0|Booleano controllo modifica da utente +BIVADETXC|8|1|0|Booleano controllo modifica da utente +BIVADETDIF|8|1|0|Booleano controllo modifica da utente +BIVADOV|8|1|0|Booleano controllo modifica da utente +BIVADOVC|8|1|0|Booleano controllo modifica da utente +BDEBPREC|8|1|0|Booleano controllo modifica da utente +BCREPREC|8|1|0|Booleano controllo modifica da utente +BCREAPREC|8|1|0|Booleano controllo modifica da utente +BVEAUE|8|1|0|Booleano controllo modifica da utente +BCREIMP|8|1|0|Booleano controllo modifica da utente +BINTLIQTRI|8|1|0|Booleano controllo modifica da utente +BACCDOV|8|1|0|Booleano controllo modifica da utente +BIVAVER|8|1|0|Booleano controllo modifica da utente +BIVAVERC|8|1|0|Booleano controllo modifica da utente +BRETTIFICH|8|1|0|Booleano controllo modifica da utente +BVARIMP|8|1|0|Booleano controllo modifica da utente +BRIMBORSI|8|1|0|Booleano controllo modifica da utente +BIMPNOVER|8|1|0|Booleano controllo modifica da utente +BCRESPEC|8|1|0|Booleano controllo modifica da utente +BVEREFF|8|1|0|Booleano controllo modifica da utente +1 +ANNO+MESE| diff --git a/src/tf/tf0.cpp b/src/tf/tf0.cpp new file mode 100644 index 000000000..c9d5eb804 --- /dev/null +++ b/src/tf/tf0.cpp @@ -0,0 +1,21 @@ +#include +#include "tf0.h" + +int main(int argc, char** argv) +{ + int rt = -1; + const int r = (argc > 1) ? atoi( &argv[1][1] ) : 1; + + switch (r) + { + + case 1 : rt = tf0200(argc, argv); break; // Comunicazione Liquidazioni Periodiche IVA + //case 2 : rt = tf0300(argc, argv); break; // Nuovo Spesometro (2017) + //case 3: rt = tf0400(argc, argv); break; // Invio TF + case 4: rt = tf0500(argc, argv); break; // Invio IVA + //case 5: rt = tf0600(argc, argv); break; // Invio Spesometro + default: rt = tf0100(argc, argv); break; // Trasferimento Fatture Elettroniche + } + return rt; +} + diff --git a/src/tf/tf0.h b/src/tf/tf0.h new file mode 100644 index 000000000..08d868596 --- /dev/null +++ b/src/tf/tf0.h @@ -0,0 +1,8 @@ +#ifndef __TF0_H +#define __TF0_H + +int tf0100(int argc, char* argv[]); +int tf0200(int argc, char* argv[]); +int tf0500(int argc, char* argv[]); + +#endif diff --git a/src/tf/tf0200.cpp b/src/tf/tf0200.cpp new file mode 100644 index 000000000..4ae46babd --- /dev/null +++ b/src/tf/tf0200.cpp @@ -0,0 +1,590 @@ +#include +#include +#include +#include +#include // cache() +#include // TISAM_recordset +#include +#include + +#include "cglib03.h" + +#include "tf0.h" +#include "tf0200a.h" + +#define CAMPI_CON_BOOLEAN F_TOTOPATT + +// ComLiqPerIva: Comunicazione Liquidazioni Periodiche IVA + +/** Utilities **/ +// Ritorna un cursore di tab.PRM +const TCursor getPRM(int anno) +{ + static TRelation rprm(LF_TAB); + TRectype from(rprm.curr()); from.put("COD", "PRM");from.put("CODTAB", anno); + TRectype to(rprm.curr()); to.put("COD" , "PRM");to.put("CODTAB", anno); + + TCursor cprm(&rprm, "", 1, &from, &to); + return cprm; +} + +// Ritorna il record richiesto di tabcom.LIM +const TRectype getLIM(int anno, int mese) +{ + TString key; key << anno; + if(mese < 10) + key << "0" << mese; + else + key << mese; + return cache().get("LIM", key); +} + +// Ritorna il record richiesto di tabcom.LIA +const TRectype getLIA(int anno) +{ + TString key; key << format("%05d", prefix().firm().codice()) << anno; // %05d Crea un numero di 5 cifre partendo dal codice e mettendoci 0 davanti + return cache().get("%LIA", key); +} +// Ritorna il record valido richiesto di tabcom.VER +const TRectype getVER(int anno, int mese) +{ + // Questa tabella ha come chiave l'inizio validità, creo un cursore e scorro finche non trovo l'ultimo periodo valido + static TRelation rver(LF_TABCOM); + static TRectype from(rver.curr()); from.put("COD", "VER"); + static TRectype to(rver.curr()); to.put("COD" , "VER"); + + static TCursor cver(&rver, "", 1, &from, &to); + + // Costruisco il controllo sulla chiave + TString key; key << anno; + if(mese < 10) + key << "0" << mese; + else + key << mese; + + TRectype rowRet(LF_TABCOM); + + for(cver = 0; cver.pos() < cver.items(); ++cver) + { + TRectype rowVer = cver.curr(); + if(rowVer.get("CODTAB") < key) + { + rowRet = rowVer; + } + else + break; + } + return rowRet; +} + +// Scopiazzata brutalmente da cg4304.cpp +int calc_inc_diff(int anno, int mese, int tipoiva, real& imponibile_diff, real& imposta_diff, real& imponibile_xcas, real& imposta_xcas) +{ + CHECKD(tipoiva == 1 || tipoiva == 2, "Bad tipo iva:", tipoiva); + int flag = 0; + + imponibile_diff = imposta_diff = imponibile_xcas = imposta_xcas = ZERO; + + TString limit; limit << "ANNOLIQ=" << anno; + if (mese < 13) limit << " MESELIQ=" << mese; + TString query; // righe pagamento (TIPOMOV>=3) ed escluse NC! + query << "USE IVADIFF KEY 2 SELECT (TIPOMOV>2)&&(TIPOIVA=" << tipoiva << ")" + << "\nFROM " << limit << "\nTO " << limit; + + TISAM_recordset id(query); + const TRectype& rec = id.cursor()->curr(); + for (bool ok = id.move_first(); ok; ok = id.move_next()) + { + const real iva = rec.get_real(RMI_IMPOSTA); + const real imp = rec.get_real(RMI_IMPONIBILE); + if (!iva.is_zero() || !imp.is_zero()) + { + const int tipodiff = rec.get_int("TIPODIFF"); + switch (tipodiff) + { + case 1: imponibile_diff += imp; imposta_diff += iva; break; + case 2: imponibile_xcas += imp; imposta_xcas += iva; break; + default: break; + } + flag |= tipodiff; + } + } + + if (tipoiva == 2) + { + real perc_prorata; + + query = "USE PLM"; + query << "\nFROM CODTAB=" << anno << "\nTO CODTAB=" << anno; + TISAM_recordset ip(query); + const TRectype& recp = ip.cursor()->curr(); + for (bool ok = ip.move_first(); ok && perc_prorata == ZERO; ok = ip.move_next()) + { + int m = atoi(ip.get("CODTAB").as_string().mid(10)); + real p = ip.get("R12").as_real(); + if (m == mese && p != ZERO) + perc_prorata = p; + } + + if (perc_prorata > ZERO) + { + real ind = imposta_diff * perc_prorata / CENTO; + ind.round(TCurrency::get_firm_dec()); + imposta_diff -= ind; + ind = imposta_xcas * perc_prorata / CENTO; + ind.round(TCurrency::get_firm_dec()); + imposta_xcas -= ind; + } + } + + return flag; +} + +/* Da errori in allocazione TArray +const TISAM_recordset getCurIvaXCassa(TDate data_da, TDate data_a, TString codreg_att) +{ + TString query = "USE IVADIFF SELECT (BETWEEN(DATAREGP,#DAL,#AL))&&(MOV.REG=#REG)&&(STR((MESELIQ<13)&&(TIPOMOV>2)&&(MOV.TOTDOC!=0)&&(IMPOSTA!=0)&&NUM(INDETR!='X')))"; + query << "\nBY DATAREGP DATAREG NUMPRO"; + query << "\nJOIN MOV INTO NUMREG==NUMREG"; + query << "\nJOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF"; + TISAM_recordset id(query); + id.set_var("#DAL", data_da); + id.set_var("#AL", data_a); + id.set_var("#REG", codreg_att); + return id; +} +*/ + +class ComLiqPerIva_mask : public TAutomask +{ +protected: + bool mensile; + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void extractinator(); + +public: + ComLiqPerIva_mask() : TAutomask("tf0200a") { first_focus(F_ANNO); } +}; + +bool ComLiqPerIva_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_ANNO: + if(e == fe_modify) + { + TString cod = get(F_CODDITTA); cod << get_int(F_ANNO); + if(cache().get("%LIA", cod).empty()) + { + warning_box("Attenzione anno di liquidazione non presente"); + set(F_ANNO, ""); + break; + } + if(cache().get("%LIA", cod, "S7") == "M") + { + mensile = true; + enable(F_MESE); + disable(F_TRIMESTRE); + } + else + { + mensile = false; + disable(F_MESE); + enable(F_TRIMESTRE); + } + // Abilito i campi a schiena + for(int i = F_SUBFORNITURE; i <= F_VEREFF; i++) + { + enable(i); + if(i >= CAMPI_CON_BOOLEAN) + { + //enable(i + 50); Anche disabilitati funzionano + } + } + } + break; + case F_MESE: + if(e == fe_modify) + set(F_TRIMESTRE, (get_int(F_MESE) - 1) / 3 + 1); + break; + case F_TRIMESTRE: + if(e == fe_modify) + set(F_MESE, get_int(F_TRIMESTRE) * 3); + break; + case DLG_RECALC: + // Vado a prendere i dati di quel mese dalla liquidazione IVA + if(e == fe_button) + { + // Controllo che non ci sia già + if(!cache().get(LF_IVALIQ, TString(get(F_ANNO)) << "|" << get(F_MESE)).empty()) + { + if(!yesno_box("Sono già stati elaborati questi dati, si desidera ricalcolarli?")) + break; + } + extractinator(); + } + break; + case DLG_EMAIL: + // Richiamo il programma di invio +// TExternal_application app; + + break; + } + + if(o.dlg() >= CAMPI_CON_BOOLEAN && e == fe_modify) // Se l'utente modifica manualmente uno dei campi calcolati da Campo flaggo il DB + { + set(o.dlg() + 50, "X"); + } + + // Controllo sull'aggiornamento di campi collegati ad altri + if(e == fe_modify) + { + switch(o.dlg()) + { + // Iva Esigibile VS Iva Detratta + case F_IVAES : + case F_IVAESXC : + case F_IVAESDIFF : + case F_IVADET : + case F_IVADETXC : + case F_IVADETDIFF : + { + real ivaes = get_real(F_IVAES) + get_real(F_IVAESXC) + get_real(F_IVAESDIFF); + real ivadet = get_real(F_IVADET) + get_real(F_IVADETXC) + get_real(F_IVADETDIFF); + if((ivaes - ivadet) >= ZERO) + { + set(F_IVADOV, ivaes - ivadet); + set(F_IVADOVC, ZERO); + } + else + { + set(F_IVADOV, ZERO); + set(F_IVADOVC, (ivaes - ivadet) * -UNO); + } + } + + // IVA da versare VS a credito + case F_IVADOV : + case F_DEBPREC : + case F_INTLIQTRI : + case F_IVADOVC : + case F_CREPREC : + case F_CREAPREC : + case F_VEAUE : + case F_CREIMP : + case F_ACCDOV : + { + // Ricalcolo VP13 e VP14 + real debito = get_real(F_IVADOV) + get_real(F_DEBPREC) + get_real(F_INTLIQTRI); + real credito = get_real(F_IVADOVC) + get_real(F_CREPREC) + get_real(F_CREAPREC) + get_real(F_VEAUE) + get_real(F_CREIMP) + get_real(F_ACCDOV); + if(debito - credito >= ZERO) + { + set(F_IVAVER, debito - credito); + set(F_IVAVERC, ZERO); + } + else + { + set(F_IVAVER, ZERO); + set(F_IVAVERC, credito - debito); + } + } + } + } + return true; +} + +// Funzione che effettivamente estrapola i dati necessari +void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO +{ + /* Devo estrapolare più mesi, per farlo vado ciclo n volte (1 o 3) in base se stiamo parlando di trimestralità o meno + * I dati da prelevare saranno in PRM, LIM e %LIA + * In PRM e LIM troverò le informazioni suddivise per mese, mentre in %LIA ho l'anno di liquidazione + */ + int start = mensile ? get_int(F_MESE) : get_int(F_TRIMESTRE) * 3; + int end = mensile ? start : start + 3; + int anno = get_int(F_ANNO); + + // Valori da calcolare + real totopatt = ZERO; + real totopattxc = ZERO; + real totoppas = ZERO; + real totoppasxc = ZERO; + real ivaes = ZERO; + real ivaesxc = ZERO; + real ivaesdiff = ZERO; + real ivadet = ZERO; + real ivadetxc = ZERO; + real ivadetdiff = ZERO; + real rettifiche = ZERO; + real varimp = ZERO; + real rimborsi = ZERO; + real impnover = ZERO; + real crespec = ZERO; + real vereff = ZERO; + real ivadov = ZERO; + real ivadovc = ZERO; + real debprec = ZERO; + real creprec = ZERO; + real creaprec = ZERO; + real intliqtri = ZERO; + real accdov = ZERO; + real ivaver = ZERO; + real ivaverc = ZERO; + + // Costanti + const TString codreg_att = "VEN"; + const TString codreg_pas = "ACQ"; + + for(; start <= end; start++) + { + TDate data_da(1, start, anno); + TDate data_a(31, start, anno); + + /**************************************************************************************************************** + * TOTOPATT, TOTOPATTXC, TOTOPPAS, TOTOPPASXC, IVAES, IVAESXC, IVAESDIFF, + * IVADET , IVADETXC, IVADETDIFF + ****************************************************************************************************************/ + + // Riga LIM + const TRectype rowLim = getLIM(anno, start); + + // Controllo che la liquidazione è stata effettuata + if(rowLim.empty()) + { + error_box("Attenzione non è stata calcolata la liquidazione del periodo corrente"); + return; + } + + // Riga LIA + const TRectype rowLia = getLIA(anno); + + // Calcolo il cursore di PRM + //TCursor curPrm = getPRM(anno); + + static TRelation rprm(LF_TAB); + TRectype from(rprm.curr()); from.put("COD", "PRM");from.put("CODTAB", anno); + TRectype to(rprm.curr()); to.put("COD" , "PRM");to.put("CODTAB", anno); + + TCursor curPrm(&rprm, "", 1, &from, &to); + + + for(curPrm = 0; curPrm.pos() < curPrm.items(); ++curPrm) + { + TRectype rowPrm = curPrm.curr(); + // Controllo il mese + TString codtab = rowPrm.get("CODTAB"); + int app = stoi(rowPrm.get("CODTAB").sub(13,15)); + if(stoi(rowPrm.get("CODTAB").sub(13,15)) != start) continue; + + // Verifico su che registro mi trovo + if(rowPrm.get("CODTAB").sub(10,13) == codreg_att) + { + totopatt = totopatt + rowPrm.get_real("R0"); + } + else if(rowPrm.get("CODTAB").sub(10,13) == codreg_pas) + { + totoppas = totoppas + rowPrm.get_real("R0"); + } + } + + real appReal = ZERO; + + // IVA esigibile + TToken_string tokenPrec = rowLim.get("S0"); + tokenPrec.get(0, appReal); + ivaes = ivaes + appReal; + + // IVA detraibile + appReal = ZERO; // Nel dubbio azzero + tokenPrec.get(1, appReal); + ivadet = ivadet + appReal; + + // Se ha attiva l'IVA x cassa + if(gestione_IVAxCassa(data_da)) + { + static TRelation rreg(LF_TAB); + TRectype fromReg(rprm.curr()); fromReg.put("COD", "REG");fromReg.put("CODTAB", anno); + TRectype toReg(rprm.curr()); toReg.put("COD" , "REG"); toReg.put("CODTAB", anno); + + // Questo codice è stato preso da print_IVAxCassa in cg4400.cpp + TString query = "USE IVADIFF SELECT (BETWEEN(DATAREGP,#DAL,#AL))&&(MOV.REG=#REG)&&(STR((MESELIQ<13)&&(TIPOMOV>2)&&(MOV.TOTDOC!=0)&&(IMPOSTA!=0)&&NUM(INDETR!='X')))"; + query << "\nBY DATAREGP DATAREG NUMPRO"; + query << "\nJOIN MOV INTO NUMREG==NUMREG"; + query << "\nJOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF"; + + TCursor curReg(&rreg, "", 1, &fromReg, &toReg); + for(curReg = 0; curReg.pos() < curReg.items(); ++curReg) + { + TRectype rowReg = curReg.curr(); + + // Siamo su un registro non IVA + int tipo_registro = rowReg.get_int("I0"); + if(tipo_registro > 2) continue; + + TISAM_recordset id(query); + id.set_var("#DAL", data_da); + id.set_var("#AL", data_a); + id.set_var("#REG", rowReg.get("CODTAB").sub(4)); + + const TRectype& rec = id.cursor()->curr(); + for (bool ok = id.move_first(); ok; ok = id.move_next()) + { + if(tipo_registro == 1) // Vendite + { + totopattxc = totopattxc + rec.get_real("IMPOSTA"); + } + else // Acquisti + { + totoppasxc = totoppasxc + rec.get_real("IMPOSTA"); + } + } + + } + + // IVA esigibile + TToken_string tokenPrec = rowLim.get("S0"); + tokenPrec.get(0, ivaes); + + real imponibile_diff, imposta_diff, imponibile_xcas, imposta_xcas; + calc_inc_diff(anno, start, 1, imponibile_diff, imposta_diff, imponibile_xcas, imposta_xcas); + + + // IVA detraibile + tokenPrec.get(1, ivadet); + calc_inc_diff(anno, start, 2, imponibile_diff, imposta_diff, imponibile_xcas, imposta_xcas); + + } + + /** Resto *****************************************************************************************************/ + + ivaes = ivaes + rowLim.get_real("R13"); + ivadet = ivadet + rowLim.get_real("R12"); + + rettifiche = rettifiche + rowLim.get_real("R5"); + varimp = varimp + rowLim.get_real("R17"); + rimborsi = rimborsi + rowLim.get_real("R1"); + impnover = impnover + rowLim.get_real("R18"); + crespec = crespec + rowLim.get_real("R19"); + vereff = vereff + rowLim.get_real("R8"); + + debprec = debprec + rowLim.get_real("S2"); + + appReal = ZERO; + + // Credito periodo precedente + tokenPrec.get(2, appReal); + creprec = creprec + appReal; + + // Credito anno precedente + creaprec = creaprec + rowLia.get_real("R0"); + + intliqtri = intliqtri + rowLim.get_real("R14"); + accdov = accdov + rowLim.get_real("R11"); + } + + // Controllo debprec + // Calcolo prendendo dalla tabella %VER + TRectype rowVer = getVER(anno, start); + if(rowVer.empty() || rowVer.get_real("R5") == ZERO) + { + error_box("Non è stata valorizzato correttamente il campo \"Periodico\" in \"Versamenti ed interessi IVA\""); + return; + } + else + { + if(debprec > rowVer.get_real("R5")) // Se è maggiore di 25.82€ va azzerato + debprec = ZERO; + } + + // Imposto tutti i campi + set(F_TOTOPATT, totopatt); + set(F_TOTOPATTXC, totopattxc); + set(F_TOTOPPAS, totoppas); + set(F_TOTOPPASXC, totoppasxc); + set(F_IVAES, ivaes); + set(F_IVAESXC, ivaesxc); + set(F_IVAESDIFF, ivaesdiff); + set(F_IVADET, ivadet); + set(F_IVADETXC, ivadetxc); + set(F_IVADETDIFF, ivadetdiff); + + // Iva dovuta o a credito + if(ivaes - ivadet > ZERO) + { + ivadov = ivaes - ivadet; + set(F_IVADOV, ivadov); + set(F_IVADOVC, ZERO); + } + else + { + ivadovc = ivadet - ivaes; + set(F_IVADOV, ZERO); + set(F_IVADOVC, ivadovc); + } + + set(F_DEBPREC, debprec); + set(F_CREPREC, creprec); + set(F_CREAPREC, creaprec); + //set(F_VEAUE, veaue); // Campi non calcolati, messi qua per un eventuale futuro + //set(F_CREIMP, creimp); + set(F_INTLIQTRI, intliqtri); + set(F_ACCDOV, accdov); + + // Calcolo l'IVA da versare o a Credito + ivaver = (ivadov + debprec + intliqtri) - (ivadovc + creprec + creaprec + get_real(F_VEAUE) + get_real(F_CREIMP) + accdov); + ivaverc = (ivadovc + creprec + creaprec + get_real(F_VEAUE) + get_real(F_CREIMP) + accdov) - (ivadov + debprec + intliqtri); + + if(ivaver >= ZERO) + set(F_IVAVER, ivaver); + else + set(F_IVAVERC, ivaverc); + + set(F_RETTIFICHE, rettifiche); + set(F_VARIMP, varimp); + set(F_RIMBORSI, rimborsi); + set(F_IMPNOVER, impnover); + set(F_CRESPEC, crespec); + set(F_VEREFF, vereff); + + // Azzero i booleani + for(int i = B_TOTOPATT; i <= B_VEREFF; i++) + { + set(i, ""); + } + +} + +class ComLiqPerIva_app : public TRelation_application +{ +private: + ComLiqPerIva_mask* _mask; + TRelation* _rel; +protected: + bool user_create(); + bool user_destroy(); + virtual TMask* get_mask(int mode) { return _mask; } + +public: + virtual TRelation* get_relation() const {return (TRelation*)_rel;} +}; + +bool ComLiqPerIva_app::user_create() +{ + _rel = new TRelation(LF_IVALIQ); + _mask = new ComLiqPerIva_mask; + set_search_field(F_ANNO); + return true; +} + +bool ComLiqPerIva_app::user_destroy() +{ + delete _mask; + return true; +} + +int tf0200(int argc, char* argv[]) +{ + ComLiqPerIva_app app; + app.run(argc, argv, TR("Trasferimento dati liquidazione IVA")); + return 0; +} \ No newline at end of file diff --git a/src/tf/tf0200a.h b/src/tf/tf0200a.h new file mode 100644 index 000000000..2832867c0 --- /dev/null +++ b/src/tf/tf0200a.h @@ -0,0 +1,64 @@ +#define F_CODDITTA 101 +#define F_RAGSOC 102 +#define F_ANNO 103 +#define F_MESE 104 +#define F_TRIMESTRE 105 +#define F_SUBFORNITURE 106 +#define F_EVECC 107 +#define F_TOTOPATT 108 +#define F_TOTOPATTXC 109 +#define F_TOTOPPAS 110 +#define F_TOTOPPASXC 111 +#define F_IVAES 112 +#define F_IVAESXC 113 +#define F_IVAESDIFF 114 +#define F_IVADET 115 +#define F_IVADETXC 116 +#define F_IVADETDIFF 117 +#define F_IVADOV 118 +#define F_IVADOVC 119 +#define F_DEBPREC 120 +#define F_CREPREC 121 +#define F_CREAPREC 122 +#define F_VEAUE 123 +#define F_CREIMP 124 +#define F_INTLIQTRI 125 +#define F_ACCDOV 126 +#define F_IVAVER 127 +#define F_IVAVERC 128 +#define F_RETTIFICHE 129 +#define F_VARIMP 130 +#define F_RIMBORSI 131 +#define F_IMPNOVER 132 +#define F_CRESPEC 133 +#define F_VEREFF 134 + + +/* Booleani controllo modifiche (+50 rispetto al campo a cui si riferisce) */ +#define B_TOTOPATT 158 +#define B_TOTOPATTXC 159 +#define B_TOTOPPAS 160 +#define B_TOTOPPASXC 161 +#define B_IVAES 162 +#define B_IVAESXC 163 +#define B_IVAESDIFF 164 +#define B_IVADET 165 +#define B_IVADETXC 166 +#define B_IVADETDIFF 167 +#define B_IVADOV 168 +#define B_IVADOVC 169 +#define B_DEBPREC 170 +#define B_CREPREC 171 +#define B_CREAPREC 172 +#define B_VEAUE 173 +#define B_CREIMP 174 +#define B_INTLIQTRI 175 +#define B_ACCDOV 176 +#define B_IVAVER 177 +#define B_IVAVERC 178 +#define B_RETTIFICHE 179 +#define B_VARIMP 180 +#define B_RIMBORSI 181 +#define B_IMPNOVER 182 +#define B_CRESPEC 183 +#define B_VEREFF 184 \ No newline at end of file diff --git a/src/tf/tf0200a.uml b/src/tf/tf0200a.uml new file mode 100644 index 000000000..65de9cba4 --- /dev/null +++ b/src/tf/tf0200a.uml @@ -0,0 +1,509 @@ +#include "tf0200a.h" + +TOOLBAR "topbar" 0 0 0 2 +BUTTON DLG_RECALC 2 2 +BEGIN + PROMPT 1 1 "Elabora" + PICTURE TOOL_CONVERT +END + +BUTTON DLG_EMAIL 2 2 +BEGIN + PROMPT 1 1 "Invia" + PICTURE TOOL_EMAIL +END + +BUTTON DLG_NULL 2 2 +BEGIN + PROMPT -1 1 "" + PICTURE 0 +END + +#include +ENDPAGE + +PAGE "Impostazioni" 0 2 0 0 + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 1 1 "Codice " + FLAGS "FZD" + USE LF_NDITTE + INPUT CODDITTA F_CODDITTA + DISPLAY "Codice" CODDITTA + DISPLAY "Ragione Sociale@50" RAGSOC + OUTPUT F_CODDITTA CODDITTA + OUTPUT F_RAGSOC RAGSOC + CHECKTYPE REQUIRED + KEY 1 +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 20 1 "" + USE LF_NDITTE KEY 2 + INPUT RAGSOC F_RAGSOC + DISPLAY "Ragione Sociale@60" RAGSOC + DISPLAY "Codice" CODDITTA + COPY OUTPUT F_CODDITTA + CHECKTYPE REQUIRED + FLAGS "D" +END + +NUMBER F_ANNO 4 +BEGIN + FIELD ANNO + PROMPT 1 2 "Anno " + USE LF_IVALIQ + INPUT ANNO F_ANNO + INPUT MESE F_MESE + INPUT TRIMESTRE F_TRIMESTRE + DISPLAY "Anno Liquid.IVA" ANNO + DiSPLAY "Mese" MESE + DISPLAY "Trimestre" TRIMESTRE + OUTPUT F_ANNO ANNO + OUTPUT F_MESE MESE + OUTPUT F_TRIMESTRE TRIMESTRE + KEY 1 + CHECKTYPE REQUIRED + FLAGS "A" + WARNING "Inserire un anno di liquidazione" +END + +NUMBER F_MESE 2 +BEGIN + PROMPT 20 2 "Mese " + SHEET " |Mese@30" + INPUT F_MESE + OUTPUT F_MESE + ITEM "|" + ITEM "1|Gennaio" + ITEM "2|Febbraio" + ITEM "3|Marzo" + ITEM "4|Aprile" + ITEM "5|Maggio" + ITEM "6|Giugno" + ITEM "7|Luglio" + ITEM "8|Agosto" + ITEM "9|Settembre" + ITEM "10|Ottobre" + ITEM "11|Novembre" + ITEM "12|Dicembre" + ITEM "13|Mese mistico" + HELP "Mese dichiarazione, lasciare vuoto per inserirne uno nuovo" + FLAGS "" + KEY 1 + FIELD MESE +END + +NUMBER F_TRIMESTRE 2 +BEGIN + PROMPT 40 2 "Trimestre " + SHEET " |Trimestre@30" + INPUT F_TRIMESTRE + OUTPUT F_TRIMESTRE + ITEM "|" + ITEM "1|Primo" + ITEM "2|Secondo" + ITEM "3|Terzo" + ITEM "4|Quarto" + HELP "Trimestre dichiarazione, lasciare vuoto per inserirne uno nuovo" + KEY 1 + FLAGS "" + FIELD TRIMESTRE +END + +BOOLEAN F_SUBFORNITURE +BEGIN + PROMPT 1 3 "Subforniture" + FIELD SUBFOR + FLAGS "D" +END + +NUMBER F_EVECC 1 +BEGIN + PROMPT 24 3 "Eventi eccezionali " + FIELD EVECC + FLAGS "D" +ENDPAGE + +NUMBER F_TOTOPATT 16 2 +BEGIN + PROMPT 1 4 "Totale op. attive " + FIELD TOTOPATT + FLAGS "D" +END + +BOOLEAN B_TOTOPATT +BEGIN + PROMPT 45 4 "" + FIELD BTOTOPATT + FLAGS "D" +END + +NUMBER F_TOTOPATTXC 16 2 +BEGIN + PROMPT 1 5 "Totale op. attive x c." + FIELD TOTOPATTXC + FLAGS "D" +END + +BOOLEAN B_TOTOPATTXC +BEGIN + PROMPT 45 5 "" + FIELD BTOTOPATTX + FLAGS "D" +END + +NUMBER F_TOTOPPAS 16 2 +BEGIN + PROMPT 1 6 "Totale op. passive " + FIELD TOTOPPAS + FLAGS "D" +END + +BOOLEAN B_TOTOPPAS +BEGIN + PROMPT 45 6 "" + FIELD BTOTOPPAS + FLAGS "D" +END + +NUMBER F_TOTOPPASXC 16 2 +BEGIN + PROMPT 1 7 "Totale op. passive x c." + FIELD TOTOPPASXC + FLAGS "D" +END + +BOOLEAN B_TOTOPPASXC +BEGIN + PROMPT 45 7 "" + FIELD BTOTOPPASX + FLAGS "D" +END + +NUMBER F_IVAES 16 2 +BEGIN + PROMPT 1 8 "IVA esigibile " + FIELD IVAES + FLAGS "D" +END + +BOOLEAN B_IVAES +BEGIN + PROMPT 45 8 "" + FIELD BIVAES + FLAGS "D" +END + +NUMBER F_IVAESXC 16 2 +BEGIN + PROMPT 1 9 "IVA esigibile x c. " + FIELD IVAESXC + FLAGS "D" +END + +BOOLEAN B_IVAESXC +BEGIN + PROMPT 45 9 "" + FIELD BIVAESXC + FLAGS "D" +END + +NUMBER F_IVAESDIFF 16 2 +BEGIN + PROMPT 1 10 "IVA esigibile diff " + FIELD IVAESDIFF + FLAGS "D" +END + +BOOLEAN B_IVAESDIFF +BEGIN + PROMPT 45 10 "" + FIELD BIVAESDIFF + FLAGS "D" +END + +NUMBER F_IVADET 16 2 +BEGIN + PROMPT 1 11 "IVA detratta " + FIELD IVADET + FLAGS "D" +END + +BOOLEAN B_IVADET +BEGIN + PROMPT 45 11 "" + FIELD BIVADET + FLAGS "D" +END + +NUMBER F_IVADETXC 16 2 +BEGIN + PROMPT 1 12 "IVA detratta x c. " + FIELD IVADETXC + FLAGS "D" +END + +BOOLEAN B_IVADETXC +BEGIN + PROMPT 45 12 "" + FIELD BIVADETXC + FLAGS "D" +END + +NUMBER F_IVADETDIFF 16 2 +BEGIN + PROMPT 1 13 "IVA detratta diff " + FIELD IVADETDIFF + FLAGS "D" +END + +BOOLEAN B_IVADETDIFF +BEGIN + PROMPT 45 13 "" + FIELD BIVADETDIF + FLAGS "D" +END + +NUMBER F_IVADOV 16 2 +BEGIN + PROMPT 1 14 "IVA dovuta " + FIELD IVADOV + FLAGS "D" +END + +BOOLEAN B_IVADOV +BEGIN + PROMPT 45 14 "" + FIELD BIVADOV + FLAGS "D" +END + +NUMBER F_IVADOVC 16 2 +BEGIN + PROMPT 50 14 "o a credito" + FIELD IVADOVC + FLAGS "D" +END + +BOOLEAN B_IVADOVC +BEGIN + PROMPT 80 14 "" + FIELD BIVADOVC + FLAGS "D" +END + +NUMBER F_DEBPREC 16 2 +BEGIN + PROMPT 1 15 "Debito precedente " + FIELD DEBPREC + FLAGS "D" +END + +BOOLEAN B_DEBPREC +BEGIN + PROMPT 45 15 "" + FIELD BDEBPREC + FLAGS "D" +END + +NUMBER F_CREPREC 16 2 +BEGIN + PROMPT 1 16 "Credito precedente " + FIELD CREPREC + FLAGS "D" +END + +BOOLEAN B_CREPREC +BEGIN + PROMPT 45 16 "" + FIELD BCREPREC + FLAGS "D" +END + +NUMBER F_CREAPREC 16 2 +BEGIN + PROMPT 1 17 "Credito anno precedente" + FIELD CREAPREC + FLAGS "D" +END + +BOOLEAN B_CREAPREC +BEGIN + PROMPT 45 17 "" + FIELD BCREAPREC + FLAGS "D" +END + +NUMBER F_VEAUE 16 2 +BEGIN + PROMPT 1 18 "Versamenti auto UE " + FIELD VEAUE + FLAGS "D" +END + +BOOLEAN B_VEAUE +BEGIN + PROMPT 45 18 "" + FIELD BVEAUE + FLAGS "D" +END + +NUMBER F_CREIMP 16 2 +BEGIN + PROMPT 1 19 "Crediti di imposta " + FIELD CREIMP + FLAGS "D" +END + +BOOLEAN B_CREIMP +BEGIN + PROMPT 45 19 "" + FIELD BCREIMP + FLAGS "D" +END + +NUMBER F_INTLIQTRI 16 2 +BEGIN + PROMPT 1 20 "Interessi liq. trim. " + FIELD INTLIQTRI + FLAGS "D" +END + +BOOLEAN B_INTLIQTRI +BEGIN + PROMPT 45 20 "" + FIELD BINTLIQTRI + FLAGS "D" +END + +NUMBER F_ACCDOV 16 2 +BEGIN + PROMPT 1 21 "Acconto dovuto " + FIELD ACCDOV + FLAGS "D" +END + +BOOLEAN B_ACCDOV +BEGIN + PROMPT 45 21 "" + FIELD BACCDOV + FLAGS "D" +END + +NUMBER F_IVAVER 16 2 +BEGIN + PROMPT 1 22 "IVA da versare " + FIELD IVAVER + FLAGS "D" +END + +BOOLEAN B_IVAVER +BEGIN + PROMPT 45 22 "" + FIELD BIVAVER + FLAGS "D" +END + +NUMBER F_IVAVERC 16 2 +BEGIN + PROMPT 50 22 "o a credito" + FIELD IVAVERC + FLAGS "D" +END + +BOOLEAN B_IVAVERC +BEGIN + PROMPT 80 22 "" + FIELD BIVAVERC + FLAGS "D" +END + +NUMBER F_RETTIFICHE 16 2 +BEGIN + PROMPT 1 23 "Rettifiche " + FIELD RETTIFICHE + FLAGS "D" +END + +BOOLEAN B_RETTIFICHE +BEGIN + PROMPT 45 23 "" + FIELD BRETTIFICH + FLAGS "D" +END + +NUMBER F_VARIMP 16 2 +BEGIN + PROMPT 1 24 "Variazioni d'imposta " + FIELD VARIMP + FLAGS "D" +END + +BOOLEAN B_VARIMP +BEGIN + PROMPT 45 24 "" + FIELD BVARIMP + FLAGS "D" +END + +NUMBER F_RIMBORSI 16 2 +BEGIN + PROMPT 1 25 "Rimborsi " + FIELD RIMBORSI + FLAGS "D" +END + +BOOLEAN B_RIMBORSI +BEGIN + PROMPT 45 25 "" + FIELD BRIMBORSI + FLAGS "D" +END + +NUMBER F_IMPNOVER 16 2 +BEGIN + PROMPT 1 26 "Imposta non versata " + FIELD IMPNOVER + FLAGS "D" +END + +BOOLEAN B_IMPNOVER +BEGIN + PROMPT 45 26 "" + FIELD BIMPNOVER + FLAGS "D" +END + +NUMBER F_CRESPEC 16 2 +BEGIN + PROMPT 1 27 "Crediti speciali " + FIELD CRESPEC + FLAGS "D" +END + +BOOLEAN B_CRESPEC +BEGIN + PROMPT 45 27 "" + FIELD BCRESPEC + FLAGS "D" +END + +NUMBER F_VEREFF 16 2 +BEGIN + PROMPT 1 28 "Versamenti effettuati " + FIELD VEREFF + FLAGS "D" +END + +BOOLEAN B_VEREFF +BEGIN + PROMPT 45 28 "" + FIELD BVEREFF + FLAGS "D" +END + + +ENDMASK diff --git a/src/tf/tf0500.cpp b/src/tf/tf0500.cpp new file mode 100644 index 000000000..eb79df7dc --- /dev/null +++ b/src/tf/tf0500.cpp @@ -0,0 +1,281 @@ +#include "tf0500a.h" + +#include +#include +#include +#include +#include // cache() +#include // TCSV_recordset +#include // goto_url() +#include // get_iva_sirio() + +#define TIPO_FILE "DF" +#define TFBASE "tf" + +#define CODICE_FORNITURA "IVP17" + +const TRectype getAnagDitta() +{ + TString codanagr = cache().get(LF_NDITTE, prefix().firm().codice(), "TIPOA"); + codanagr << "|" << cache().get(LF_NDITTE, prefix().firm().codice(), "CODANAGR"); + return cache().get(LF_ANAG, codanagr); +} + +// Ritorna il record richiesto di tabcom.LIM +const TRectype getLim(int anno, int mese) +{ + TString key; key << anno; + if(mese < 10) + key << "0" << mese; + else + key << mese; + return cache().get("LIM", key); +} + +const TRectype getLiq(int anno, int mese) +{ + TString key; key << anno << "|"; + if(mese < 10) + key << "0" << mese; + else + key << mese; + return cache().get(LF_IVALIQ, key); +} + +TString formatCurrency(TString value) +{ + real app(value); + if(app == ZERO) + return ",00"; + else + return TCurrency(app).string(); +} + +class TIvaSend_msk : public TAutomask +{ + bool mese; + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); +public: + bool isMese() { return mese; } + TIvaSend_msk() : TAutomask("tf0500a"){} +}; + +bool TIvaSend_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch(o.dlg()) + { + case F_ANNO: + if(e == fe_modify) + { + TString cod = get(F_CODDITTA); cod << get_int(F_ANNO); + if(cache().get("%LIA", cod).empty()) + { + warning_box("Attenzione anno di liquidazione non presente"); + set(F_ANNO, ""); + break; + } + if(cache().get("%LIA", cod, "S7") == "M") + { + mese = true; + enable(F_DAMESE); + enable(F_AMESE); + disable(F_DATRIMESTRE); + disable(F_ATRIMESTRE); + } + else + { + mese = false; + disable(F_DAMESE); + disable(F_AMESE); + enable(F_DATRIMESTRE); + enable(F_ATRIMESTRE); + } + } + else if(e == fe_init) + { + // Per trovare un valore tento per 5 anni di vedere se c'è una liquidazione aperta, così da valorizzare tutta la roba + int year = TDate(TODAY).year(); + for(int i = year; i >= year - 5; i--) + { + TString cod = get(F_CODDITTA); + cod << i; + if(cache().get("%LIA", cod).empty()) continue; + if(cache().get("%LIA", cod, "S7") == "M") + { + set(F_ANNO, i); + mese = true; + enable(F_DAMESE); + enable(F_AMESE); + disable(F_DATRIMESTRE); + disable(F_ATRIMESTRE); + break; + } + else + { + set(F_ANNO, i); + mese = false; + disable(F_DAMESE); + disable(F_AMESE); + enable(F_DATRIMESTRE); + enable(F_ATRIMESTRE); + break; + } + } + } + break; + } + return true; +} + +class TIvaSend_app : public TSkeleton_application +{ + void generateNSend(TIvaSend_msk& msk) { generate(msk); send(); } + void generate(TIvaSend_msk& msk); + TToken_string getTestata(TIvaSend_msk& msk); + void send(); +public: + virtual void main_loop(); +}; + +void TIvaSend_app::generate(TIvaSend_msk& msk) +{ + ofstream file; + TFilename path(msk.get(F_PATH)); + + TRectype rowLim = getLim(msk.get_int(F_ANNO), msk.isMese() ? msk.get_int(F_DAMESE) : msk.get_int(F_DATRIMESTRE) * 3); + + TRectype rowLiq = getLiq(msk.get_int(F_ANNO), msk.isMese() ? msk.get_int(F_DAMESE) : msk.get_int(F_DATRIMESTRE) * 3); + + // Decido di utilizzare I10 come numero progressivo di trasmissione + int prog = rowLim.get_int("I10"); prog++; + + TString nomeFile; nomeFile << "IT" << getAnagDitta().get("PAIV") << TIPO_FILE << prog << ".csv"; + + path.add(nomeFile); + file.open(path, ios::out); + + if(!file.is_open()) + error_box(TR("Impossibile aprire il file alla posizione %s", path)); + + TToken_string testata(getTestata(msk)); + + int start = msk.isMese() ? msk.get_int(F_DAMESE) : msk.get_int(F_DATRIMESTRE); + int end = msk.isMese() ? msk.get_int(F_AMESE) : msk.get_int(F_ATRIMESTRE); + for(; start <= end; start++) + { + + TToken_string riga(testata); + if(msk.isMese()) + { + riga.add(start); // Mese + riga.add(""); // Trimestre + } + else + { + riga.add(""); // Mese + riga.add(start); // Trimestre + } + + char subfor = rowLiq.get_bool("SUBFOR") ? 'X' : '\0'; + riga.add(subfor); // Flag Subfornitura + riga.add(""); // Eventi eccezionali + riga.add(formatCurrency(rowLiq.get("TOTOPATT"))); // Totale operazioni attive (al netto dell'IVA) + riga.add(formatCurrency(rowLiq.get("TOTOPPAS"))); // Totale operazioni passive (al netto dell'IVA) + + real ivaes = rowLiq.get_real("IVAES") + rowLiq.get_real("IVAESXC") + rowLiq.get_real("IVAESDIFF"); + riga.add(formatCurrency(ivaes.string())); // IVA esigibile + + real ivadet = rowLiq.get_real("IVADET") + rowLiq.get_real("IVADETXC") + rowLiq.get_real("IVADETDIFF"); + riga.add(formatCurrency(ivadet.string())); // IVA detratta + + riga.add(formatCurrency(rowLiq.get("IVADOV"))); // IVA dovuta + riga.add(formatCurrency(rowLiq.get("IVADOVC"))); // IVA a credito VP6 col 2 + riga.add(formatCurrency(rowLiq.get("DEBPREC"))); // Debito periodo precedente + riga.add(formatCurrency(rowLiq.get("CREPREC"))); // Credito periodo precedente + riga.add(formatCurrency(rowLiq.get("CREAPREC"))); // Credito anno precedente + riga.add(formatCurrency(rowLiq.get("VEAUE"))); // Versamenti auto UE + riga.add(formatCurrency(rowLiq.get("CREIMP"))); // Crediti di imposta + riga.add(formatCurrency(rowLiq.get("INTLIQTRI"))); // Interessi dovuti per liquidazioni trimestrali + riga.add(formatCurrency(rowLiq.get("ACCDOV"))); // Acconto dovuto + riga.add(formatCurrency(rowLiq.get("IVAVER"))); // IVA da versare + riga.add(formatCurrency(rowLiq.get("IVAVERC"))); // IVA a credito VP14 col 2 + riga.add(prog); // Numero interno trasmissione + riga.add(""); // Flag trasmesso + riga.add(""); // Flag accettato + + // Appendo al file + file << riga << "\n"; + } + file.close(); + // Aggiorno l'univoco + + rowLim.put("I14", prog); + if(rowLim.rewrite(TLocalisamfile(LF_TAB)) != NOERR) + { + error_box("Errore aggiornamento progressivo"); + } + +} + +TToken_string TIvaSend_app::getTestata(TIvaSend_msk& msk) +{ + TToken_string testata; // Token string di virgole + testata.add(CODICE_FORNITURA); // Codice Fornitura + testata.add(""); // Cod.Fisc. Sost. Dich. + testata.add(""); // Cod. Carica Sost. Dich. + testata.add(msk.get_int(F_ANNO)); // Anno comunicazione + testata.add(""); // Mese comunicazione + + TRectype anaDitta = getAnagDitta(); + + testata.add(anaDitta.get("COFI")); // Codice fiscale + testata.add(anaDitta.get("PAIV")); // Partita IVA + testata.add(""); // P.IVA Controllante + testata.add(""); // Flag Liq. gruppo + testata.add(""); // Flag firma comunicazione + testata.add(""); // Cod.Fisc. Dichiarante + testata.add(""); // Cod.Carica Dichiarante + testata.add(""); // Cod.Fisc. Soc. Dichiarante + testata.add(""); // Cod.Fisc. Intermediario + testata.add(""); // Flag Impegno + testata.add(""); // Data Impegno + testata.add(""); // Flag Firma Intermediario + testata.add(""); // Flag Conferma + testata.add(get_iva_sirio()); + return testata; +} + +void TIvaSend_app::send() +{ + TFilename tmp; + tmp = TFBASE"\\SiaggTFCAMPO.jar"; + tmp.make_absolute_path(); + + 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); + const bool good = goto_url(tmp); + if (good) + xvt_sys_sleep(3000); + else + error_box(FR("Impossibile eseguire Java -jar %s"), (const char*)tmp); + xvt_fsys_set_dir(&old_dir); + +} + +void TIvaSend_app::main_loop() +{ + TIvaSend_msk msk; + while(msk.run() == K_ENTER) + { + generateNSend(msk); + } +} + + +int tf0500(int argc, char* argv[]) +{ + TIvaSend_app app; + app.run(argc, argv, TR("Trasferimento dati liquidazione IVA")); + return 0; +} \ No newline at end of file diff --git a/src/tf/tf0500a.h b/src/tf/tf0500a.h new file mode 100644 index 000000000..f073d316f --- /dev/null +++ b/src/tf/tf0500a.h @@ -0,0 +1,8 @@ +#define F_PATH 101 +#define F_CODDITTA 102 +#define F_RAGSOC 103 +#define F_ANNO 104 +#define F_DAMESE 105 +#define F_AMESE 106 +#define F_DATRIMESTRE 107 +#define F_ATRIMESTRE 108 \ No newline at end of file diff --git a/src/tf/tf0500a.uml b/src/tf/tf0500a.uml new file mode 100644 index 000000000..030f6b27e --- /dev/null +++ b/src/tf/tf0500a.uml @@ -0,0 +1,130 @@ +#include "tf0500a.h" + +TOOLBAR "topbar" 0 0 0 2 +#include +ENDPAGE + +PAGE "Impostazioni" 0 2 0 0 + +STRING F_PATH 255 45 +BEGIN + PROMPT 0 1 "Cartella " + DSELECT + CHECKTYPE REQUIRED + FLAGS "M" +END + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 1 2 "Codice " + FLAGS "FZD" + USE LF_NDITTE + INPUT CODDITTA F_CODDITTA + DISPLAY "Codice" CODDITTA + DISPLAY "Ragione Sociale@50" RAGSOC + OUTPUT F_CODDITTA CODDITTA + OUTPUT F_RAGSOC RAGSOC + CHECKTYPE REQUIRED + KEY 1 +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 20 2 "" + USE LF_NDITTE KEY 2 + INPUT RAGSOC F_RAGSOC + DISPLAY "Ragione Sociale@60" RAGSOC + DISPLAY "Codice" CODDITTA + COPY OUTPUT F_CODDITTA + CHECKTYPE REQUIRED + FLAGS "D" +END + +NUMBER F_ANNO 4 +BEGIN + PROMPT 1 3 "Anno " + USE LF_IVALIQ + INPUT ANNO F_ANNO + DISPLAY "Anno Liquid.IVA" ANNO + DiSPLAY "Mese" MESE + DISPLAY "Trimestre" TRIMESTRE + OUTPUT F_ANNO ANNO + OUTPUT F_DAMESE MESE + OUTPUT F_DATRIMESTRE TRIMESTRE + CHECKTYPE REQUIRED + FLAGS "" + WARNING "Inserire un anno di liquidazione" +END + +NUMBER F_DAMESE 2 +BEGIN + PROMPT 20 3 "Da mese " + SHEET " |Mese@30" + ITEM "|" + ITEM "1|Gennaio" + ITEM "2|Febbraio" + ITEM "3|Marzo" + ITEM "4|Aprile" + ITEM "5|Maggio" + ITEM "6|Giugno" + ITEM "7|Luglio" + ITEM "8|Agosto" + ITEM "9|Settembre" + ITEM "10|Ottobre" + ITEM "11|Novembre" + ITEM "12|Dicembre" + ITEM "13|Mese mistico" + HELP "Mese dichiarazione, lasciare vuoto per inserirne uno nuovo" + FLAGS "D" +END + +NUMBER F_AMESE 2 +BEGIN + PROMPT 40 3 "A mese " + SHEET " |Mese@30" + ITEM "|" + ITEM "1|Gennaio" + ITEM "2|Febbraio" + ITEM "3|Marzo" + ITEM "4|Aprile" + ITEM "5|Maggio" + ITEM "6|Giugno" + ITEM "7|Luglio" + ITEM "8|Agosto" + ITEM "9|Settembre" + ITEM "10|Ottobre" + ITEM "11|Novembre" + ITEM "12|Dicembre" + ITEM "13|Mese mistico" + HELP "Mese dichiarazione, lasciare vuoto per inserirne uno nuovo" + FLAGS "D" +END + +NUMBER F_DATRIMESTRE 2 +BEGIN + PROMPT 20 4 "Da trimestre " + SHEET " |Trimestre@30" + ITEM "|" + ITEM "1|Primo" + ITEM "2|Secondo" + ITEM "3|Terzo" + ITEM "4|Quarto" + HELP "Trimestre dichiarazione, lasciare vuoto per inserirne uno nuovo" + FLAGS "D" +END + +NUMBER F_ATRIMESTRE 2 +BEGIN + PROMPT 40 4 "A trimestre " + SHEET " |Trimestre@30" + ITEM "|" + ITEM "1|Primo" + ITEM "2|Secondo" + ITEM "3|Terzo" + ITEM "4|Quarto" + HELP "Trimestre dichiarazione, lasciare vuoto per inserirne uno nuovo" + FLAGS "D" +END + +ENDPAGE +ENDMASK \ No newline at end of file diff --git a/src/tf/tfmenu.men b/src/tf/tfmenu.men new file mode 100644 index 000000000..b9e23e889 --- /dev/null +++ b/src/tf/tfmenu.men @@ -0,0 +1,8 @@ +[TFMENU_001] +Caption = "Trasferimento Fatture" +Picture = +Module = tf +Flags = "F" +//Item_01 = "Trasferimento Fatture", "tf0 -0", "F" +Item_02 = "Liquidazione IVA Periodica", "tf0 -1", "F" +Item_03 = "Invio Liquidazione IVA Periodica", "tf -4", "F"