diff --git a/src/cg/cg0100a.uml b/src/cg/cg0100a.uml
index 34105cd3b..524ec6505 100755
--- a/src/cg/cg0100a.uml
+++ b/src/cg/cg0100a.uml
@@ -416,6 +416,7 @@ BEGIN
ITEM "8|8. Altri beni strumentali acquistati in leasing"
ITEM "9|9. Spese Generali"
ITEM "17|17. Operazioni nei confronti dei condominii"
+ ITEM "51|51. Acquisti materie prime per la produzione"
END
LIST FLD_CM1_RICSER 1 18
diff --git a/src/cg/cg21iva.uml b/src/cg/cg21iva.uml
index 6126ec2f8..f58094277 100755
--- a/src/cg/cg21iva.uml
+++ b/src/cg/cg21iva.uml
@@ -247,6 +247,7 @@ BEGIN
ITEM "8|8. Altri beni strumentali acquistati in leasing"
ITEM "9|9. Spese generali"
ITEM "17|17. Operazioni nei confronti dei condominii"
+ ITEM "51|51. Acquisti materie prime per la produzione"
FLAGS "D"
HELP "Tipo Costo/Ricavo del conto"
END
diff --git a/src/cg/cg7401.cpp b/src/cg/cg7401.cpp
index 3f999cf6e..1e03e860d 100644
--- a/src/cg/cg7401.cpp
+++ b/src/cg/cg7401.cpp
@@ -159,6 +159,17 @@ bool TQuadro_IVA_mask::on_field_event(TOperable_field& o, TField_event e, long j
return true;
}
+TISAM_recordset & TQuadro_IVA_recordset::get_recordset(const int code, const int year)
+{
+ real val;
+ TProgram_report & rep = _mask->get_report(code - 1);
+ TISAM_recordset * set = (TISAM_recordset *)rep.recordset();
+
+ CHECK(set != nullptr, TR("Null report"));
+ set->set_var("#ANNO", format("%d", year == 0 ? _year : year));
+ return *set;
+}
+
const real TQuadro_IVA_recordset::evaluate_recordset(const int code, const int year, const char * field, const char * expr)
{
real val;
@@ -227,17 +238,20 @@ const TVariant& TQuadro_IVA_recordset::get(const char* column_name) const
return TISAM_recordset::get(column_name);
}
-void TQuadro_IVA_recordset::add_value(const char *s, real value)
+void TQuadro_IVA_recordset::add_value(const char *s, const real value)
{
- real * val = (real *)_values.objptr(s);
+ if (s && *s)
+ {
+ real * val = (real *)_values.objptr(s);
- if (val == nullptr)
- {
- const TString8 key(s);
- _values.add(key, val = new real);
- _types.add(key, TString("real"));
- }
- *val += value;
+ if (val == nullptr)
+ {
+ const TString8 key(s);
+ _values.add(key, val = new real);
+ _types.add(key, TString("real"));
+ }
+ *val += value;
+ }
}
void TQuadro_IVA_recordset::set_bool(const char *s, bool on)
diff --git a/src/cg/cg7401.h b/src/cg/cg7401.h
index c81b67c59..bf1c3807c 100644
--- a/src/cg/cg7401.h
+++ b/src/cg/cg7401.h
@@ -43,15 +43,17 @@ class TQuadro_IVA_recordset : public TISAM_recordset
protected:
const TMask & mask() { return *_mask; }
- void add_value(const char *s, real value);
+ void add_value(const char *s, const real value);
+ void sub_value(const char *s, const real value) { add_value(s, -value); }
void set_bool(const char *s, bool on = false);
void set(const char *s,const char * value);
virtual void load() pure;
virtual const TVariant& get(const char* column_name) const;
void clear() { _values.destroy(); _types.destroy(); }
- const real evaluate_recordset(const int code, const int year, const char * field, const char * expr = NULL);
- const real evaluate_recordset_imponibile(const int code, const int year, const char * expr = NULL) { return evaluate_recordset(code, year, RMI_IMPONIBILE, expr); }
- const real evaluate_recordset_imposta(const int code, const int year, const char * expr = NULL) { return evaluate_recordset(code, year, RMI_IMPOSTA, expr); }
+ TISAM_recordset & get_recordset(const int code, const int year = 0);
+ const real evaluate_recordset(const int code, const int year, const char * field, const char * expr = nullptr);
+ const real evaluate_recordset_imponibile(const int code, const int year, const char * expr = nullptr) { return evaluate_recordset(code, year, RMI_IMPONIBILE, expr); }
+ const real evaluate_recordset_imposta(const int code, const int year, const char * expr = nullptr) { return evaluate_recordset(code, year, RMI_IMPOSTA, expr); }
public:
TQuadro_IVA_recordset(TQuadro_IVA_mask * mask, const char* use, const int year) : TISAM_recordset(use), _mask(mask), _year(year) { }
diff --git a/src/cg/cg7600.cpp b/src/cg/cg7600.cpp
index 517230d90..6ee35f88c 100644
--- a/src/cg/cg7600.cpp
+++ b/src/cg/cg7600.cpp
@@ -21,6 +21,7 @@
#define REP_REVCHARGE 9
#define REP_TERREM 10
#define REP_PAART17 11
+#define REP_REGOLARIZ 12
class TQuadro_VE_recordset : public TQuadro_IVA_recordset
{
@@ -72,17 +73,23 @@ void TQuadro_VE_recordset::load()
imposta.add("5.00", TString8("VE21.2"));
imponibile.add("10.00",TString8("VE22.1"));
imposta.add("10.00",TString8("VE22.2"));
-
- // le imposte che non esisto più le mette nella più vicina
- imponibile.add("20.00", TString8("VE23.1"));
- imposta.add("20.00", TString8("VE23.2"));
- imponibile.add("21.00", TString8("VE23.1"));
- imposta.add("21.00", TString8("VE23.2"));
+ imponibile.add("4.00", TString8("VE20.1"));
+ imposta.add("4.00", TString8("VE20.2"));
+ imponibile.add("5.00", TString8("VE21.1"));
+ imposta.add("5.00", TString8("VE21.2"));
+ imponibile.add("10.00", TString8("VE22.1"));
+ imposta.add("10.00", TString8("VE22.2"));
+ // le imposte che non esisto più le mette nella più vicina
- imponibile.add("22.00", TString8("VE23.1"));
- imposta.add("22.00", TString8("VE23.2"));
+ imponibile.add("20.00", TString8("VE23.1"));
+ imposta.add("20.00", TString8("VE23.2"));
+ imponibile.add("21.00", TString8("VE23.1"));
+ imposta.add("21.00", TString8("VE23.2"));
+
+ imponibile.add("22.00", TString8("VE23.1"));
+ imposta.add("22.00", TString8("VE23.2"));
TString256 query("USE PIM\nFROM CODTAB=");
@@ -129,25 +136,28 @@ void TQuadro_VE_recordset::load()
break;
case vend_norm: // vendite normali
case corr_norm:
- if (aliquota.full())
+ if (atoi(aliquota) != 0)
{
const bool agricolo = ivar.get_int("I4") != 0;
if (agricolo)
{
- const TString * field = (TString *) imponibile_agricolo.objptr(aliquota);
-
- if (field != NULL) add_value(*field, imp);
- field = (TString *) imposta_agricola.objptr(aliquota);
- if (field != NULL) add_value(*field, iva);
+ add_value(*(TString *)imponibile_agricolo.objptr(aliquota), imp);
+ add_value(*(TString *)imposta_agricola.objptr(aliquota), iva);
}
else
{
- const TString * field = (TString *) imponibile.objptr(aliquota);
+ if (aliquota == "20.00" || aliquota == "21.00")
+ {
+ real imposta_corretta = imp;
- if (field != NULL) add_value(*field, imp);
- field = (TString *) imposta.objptr(aliquota);
- if (field != NULL) add_value(*field, iva);
+ imposta_corretta *= 0.22;
+ imposta_corretta.round(0);
+ add_value("VE25.2", iva - imposta_corretta);
+ iva = imposta_corretta;
+ }
+ add_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp);
+ add_value(STRING_TOKEN(imposta.objptr(aliquota)), iva);
}
}
break;
@@ -241,8 +251,61 @@ void TQuadro_VE_recordset::load()
}
}
- query = "USE LIM\n FROM CODTAB==";
+ TISAM_recordset & exp = get_recordset(REP_PAART17);
+ for (exp.move_first(); !exp.eof(); exp.move_next())
+ {
+ TString8 cod(exp.get(FIELD_NAME(LF_RMOVIVA, RMI_CODIVA)).as_string());
+ const TCodiceIVA & codiva = cached_codIVA(cod);
+ const TString & aliquota = codiva.aliquota();
+
+ if (aliquota.full())
+ {
+ const real imp = exp.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPONIBILE)).as_real();
+
+ if (codiva.is_agricola())
+ sub_value(STRING_TOKEN(imponibile_agricolo.objptr(aliquota)), imp);
+ else
+ sub_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp);
+ }
+ }
+
+ TISAM_recordset & reg = get_recordset(REP_REGOLARIZ);
+
+ for (reg.move_first(); !reg.eof(); reg.move_next())
+ {
+ TString8 cod(reg.get(FIELD_NAME(LF_RMOVIVA, RMI_CODIVA)).as_string());
+ const TCodiceIVA & codiva = cached_codIVA(cod);
+ const TString & aliquota = codiva.aliquota();
+
+ if (aliquota.full())
+ {
+ const real imp = reg.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPONIBILE)).as_real();
+ real iva = reg.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPOSTA)).as_real();
+
+ if (codiva.is_agricola())
+ {
+ sub_value(STRING_TOKEN(imponibile_agricolo.objptr(aliquota)), imp);
+ sub_value(STRING_TOKEN(imposta_agricola.objptr(aliquota)), iva);
+ }
+ else
+ {
+ if (aliquota == "20.00" || aliquota == "21.00")
+ {
+ real imposta_corretta = imp;
+
+ imposta_corretta *= 0.22;
+ imposta_corretta.round(0);
+ sub_value("VE25.2", imposta_corretta - iva);
+ iva = imposta_corretta;
+ }
+ sub_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp);
+ sub_value(STRING_TOKEN(imposta.objptr(aliquota)), iva);
+ }
+ }
+ }
+
+ query = "USE LIM\n FROM CODTAB==";
query << year() << "13\nTO CODTAB==" << year() << "13";
TISAM_recordset lim(query);
@@ -391,6 +454,7 @@ void TQuadro_VE_app::load_sheet(TSheet_field & sf)
TToken_string & row9 = sf.row(sf.items()); row9.add("|9|Stampa operazioni reverse charge|cg7600l");
TToken_string & row10 = sf.row(sf.items()); row10.add("|10|Stampa operazioni terremotati|cg7600m");
TToken_string & row11 = sf.row(sf.items()); row11.add("|11|Stampa operazioni effettuate con PA ai sensi art.17|cg7600n");
+ TToken_string & row12 = sf.row(sf.items()); row12.add("|12|Stampa regolarizzazioni reverse charge|cg7600o");
}
int cg7600(int argc, char* argv[])
diff --git a/src/cg/cg7600a.rep b/src/cg/cg7600a.rep
index 979c8001c..5365e5bd8 100644
--- a/src/cg/cg7600a.rep
+++ b/src/cg/cg7600a.rep
@@ -124,7 +124,7 @@
-
+
@@ -132,7 +132,7 @@
-
+
diff --git a/src/cg/cg7600o.rep b/src/cg/cg7600o.rep
new file mode 100644
index 000000000..d51dbb64b
--- /dev/null
+++ b/src/cg/cg7600o.rep
@@ -0,0 +1,86 @@
+
+
+ Regolarizzazioni reverse charge
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MESSAGE ADD,F1.100
+
+
+
+ MESSAGE ADD,F1.200
+
+
+
+
+
+
+
+
+
+
+ USE RMOVIVA SELECT (MOV.ANNOIVA=#ANNO)(26.SOLOIVA=="X")(26.REGSPIVA!="")
+JOIN MOV INTO NUMREG==NUMREG
+JOIN 26 TO MOV INTO CODCAUS==CODCAUS
+JOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF
+
\ No newline at end of file
diff --git a/src/cg/cg7700.cpp b/src/cg/cg7700.cpp
index bf4e9750f..23519d24a 100644
--- a/src/cg/cg7700.cpp
+++ b/src/cg/cg7700.cpp
@@ -191,17 +191,14 @@ void TQuadro_VF_recordset::load()
}
else
{
- if (aliquota.full())
+ if (atoi(aliquota) != 0)
{
const bool agricolo = ivar.get_int("I4") != 0;
if (agricolo)
{
- const TString * field = (TString *) imponibile_agricolo.objptr(aliquota);
-
- if (field != NULL) add_value(*field, imp); // VF39.1 VF48.1 Imprese agricole impobnibil e imposte
- field = (TString *) imposta_agricola.objptr(aliquota);
- if (field != NULL) add_value(*field, iva); // VF39.2 VF48.2 Imprese agricole impobnibil e imposte
+ add_value(STRING_TOKEN(imponibile_agricolo.objptr(aliquota)), imp); // VF39.1 VF48.1 Imprese agricole impobnibil e imposte
+ add_value(STRING_TOKEN(imposta_agricola.objptr(aliquota)), iva); // VF39.2 VF48.2 Imprese agricole impobnibil e imposte
}
else
@@ -210,11 +207,8 @@ void TQuadro_VF_recordset::load()
add_value("VF38.1", imp); // VF38.1 2 Riservato alle imprese agricole miste - Totale operazioni imponibili diverse
add_value("VF38.2", iva);
}
- const TString * field = (TString *) imponibile.objptr(aliquota);
-
- if (field != NULL) add_value(*field, imp);
- field = (TString *) imposta.objptr(aliquota);
- if (field != NULL) add_value(*field, iva);
+ add_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp);
+ add_value(STRING_TOKEN(imposta.objptr(aliquota)), iva);
if (prorataprev)
{
add_value("VF31.1", imp); // VF31.1 Acquisti destinati alle operazioni imponibili occasionali
@@ -443,7 +437,7 @@ void TQuadro_VF_recordset::load()
add_value("VF27.1", val);
val = evaluate_recordset_imponibile(REP_RIPACQ, year(), "RMOVIVA.TIPOCR==8");
add_value("VF27.2", val);
- val = evaluate_recordset_imponibile(REP_RIPACQ, year(), "RMOVIVA.TIPOCR==1");
+ val = evaluate_recordset_imponibile(REP_RIPACQ, year(), "(RMOVIVA.TIPOCR==1)||(RMOVIVA.TIPOCR==51)");
add_value("VF27.3", val);
val = evaluate_recordset_imponibile(REP_RIPACQ, year(), "(RMOVIVA.TIPOCR==0)||(RMOVIVA.TIPOCR==3)||(RMOVIVA.TIPOCR==5)||(RMOVIVA.TIPOCR==9)||(RMOVIVA.TIPOCR==17)");
add_value("VF27.4", val);
diff --git a/src/cg/cg7700a.rep b/src/cg/cg7700a.rep
index 66fb3820c..98e9cf554 100644
--- a/src/cg/cg7700a.rep
+++ b/src/cg/cg7700a.rep
@@ -145,13 +145,13 @@
-
+
-
+
diff --git a/src/cg/cg7700b.rep b/src/cg/cg7700b.rep
index 52f1218bc..d29fb0709 100644
--- a/src/cg/cg7700b.rep
+++ b/src/cg/cg7700b.rep
@@ -213,7 +213,7 @@
-
+
diff --git a/src/cg/cg7800.cpp b/src/cg/cg7800.cpp
index a223aa020..e8825b3b1 100644
--- a/src/cg/cg7800.cpp
+++ b/src/cg/cg7800.cpp
@@ -48,9 +48,21 @@ void TQuadro_VJ_recordset::load()
add_value("VJ02.2", iva); // VJ2.2 Estrazione di beni da depositi IVA (art. 50-bis, comma 6, d.l. n. 331/1993)
break;
case 3:
- add_value("VJ03.1", imp); // VJ3.1 Acquisti di beni e servizi da soggettIi non residenti ai sensi dell’art. 17, comma 2
- add_value("VJ03.2", iva); // VJ3.2 Acquisti di beni e servizi da soggettIi non residenti ai sensi dell’art. 17, comma 2
- break;
+ {
+ const bool intra = recset->get(FIELD_NAME(LF_CAUSALI, CAU_INTRACOM)).as_bool();
+
+ if (intra)
+ {
+ add_value("VJ09.1", imp); // VJ9.1 Acquisti intracomunitari di beni (inclusi acquisti di oro industriale, argento puro e beni di cui all’art. 74, commi 7 e 8)
+ add_value("VJ09.2", iva); // VJ9.2 Acquisti intracomunitari di beni (inclusi acquisti di oro industriale, argento puro e beni di cui all’art. 74, commi 7 e 8)
+ }
+ else
+ {
+ add_value("VJ03.1", imp); // VJ3.1 Acquisti di beni e servizi da soggettIi non residenti ai sensi dell’art. 17, comma 2
+ add_value("VJ03.2", iva); // VJ3.2 Acquisti di beni e servizi da soggettIi non residenti ai sensi dell’art. 17, comma 2
+ }
+ }
+ break;
case 4:
add_value("VJ04.1", imp); // VJ4.1 Operazioni di cui all’art. 74, comma 1, lett. e)
add_value("VJ04.2", iva); // VJ4.2 Operazioni di cui all’art. 74, comma 1, lett. e)
@@ -119,6 +131,10 @@ void TQuadro_VJ_recordset::load()
add_value("VJ09.1", imp); // VJ09.1 Acquisti intracomunitari di beni (inclusi acquisti di oro industriale, argento puro e beni di cui all’art. 74, commi 7 e 8)
add_value("VJ09.2", iva); // VJ09.2 Acquisti intracomunitari di beni (inclusi acquisti di oro industriale, argento puro e beni di cui all’art. 74, commi 7 e 8)
break;
+ case 51:
+ add_value("VJ09.1", imp); // VJ09.1 Acquisti intracomunitari di beni (inclusi acquisti di oro industriale, argento puro e beni di cui all’art. 74, commi 7 e 8)
+ add_value("VJ09.2", iva); // VJ09.2 Acquisti intracomunitari di beni (inclusi acquisti di oro industriale, argento puro e beni di cui all’art. 74, commi 7 e 8)
+ break;
default:
break;
}
diff --git a/src/cg/cglib.h b/src/cg/cglib.h
index 0d07fca13..c134cb12c 100644
--- a/src/cg/cglib.h
+++ b/src/cg/cglib.h
@@ -425,7 +425,10 @@ public: // TObject
const TString& codice() const { return get("CODTAB"); }
const TString& descrizione() const { return get("S0"); }
const real percentuale() const { return get_real("R0"); }
+ const TString & aliquota() const { return get("R0"); }
const TString& tipo() const { return get("S1"); }
+ const int tipo_IVA_agricola() const { return get_int("I4"); }
+ const bool is_agricola() const { return tipo_IVA_agricola() != 0; }
const TString& indetraibilita() const { return get("S4"); } // Codice indetraibilità alfanumerico (ex. 1, 3, 9)
int tipo_indetraibilita() const; // Tipo indetraibilità: 1,3,9
bool senza_imposta() { return percentuale() == ZERO;}