diff --git a/src/cg/IVA_2023_istr.pdf b/src/cg/IVA_2023_istr.pdf
new file mode 100644
index 000000000..45fe84eda
Binary files /dev/null and b/src/cg/IVA_2023_istr.pdf differ
diff --git a/src/cg/IVA_2023_mod.pdf b/src/cg/IVA_2023_mod.pdf
new file mode 100644
index 000000000..b7899702f
Binary files /dev/null and b/src/cg/IVA_2023_mod.pdf differ
diff --git a/src/cg/cg7400.cpp b/src/cg/cg7400.cpp
index e5de46233..14412157f 100644
--- a/src/cg/cg7400.cpp
+++ b/src/cg/cg7400.cpp
@@ -14,15 +14,16 @@
class TQuadro_VIAB_recordset : public TQuadro_IVA_recordset
{
+
protected:
- virtual void load();
+ virtual void load(const char repid);
public:
- TQuadro_VIAB_recordset(TQuadro_IVA_mask * mask, const char* use, const int year) : TQuadro_IVA_recordset(mask, use, year) { load(); }
+ TQuadro_VIAB_recordset(TQuadro_IVA_mask * mask, const char* use, const int year, const char repid) : TQuadro_IVA_recordset(mask, use, year, repid) { load(repid); }
virtual ~TQuadro_VIAB_recordset() {}
};
-void TQuadro_VIAB_recordset::load()
+void TQuadro_VIAB_recordset::load(const char repid)
{
const TRectype & ditta = cache().get(LF_NDITTE, app().get_firm());
const TString4 tipoa(ditta.get(NDT_TIPOA));
@@ -102,7 +103,7 @@ class TQuadro_VIAB_app : public TQuadro_IVA_app
virtual char last_quadro_report() const { return 'c'; }
public:
- virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year) { return new TQuadro_VIAB_recordset(mask(), use, year); }
+ virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year, const char repid) { return new TQuadro_VIAB_recordset(mask(), use, year, repid); }
void load_sheet(TSheet_field & sf);
TQuadro_VIAB_app() : TQuadro_IVA_app("Stampa Quadro VC", "cg7400a") {}
diff --git a/src/cg/cg7400a.png b/src/cg/cg7400a.png
index 2258376dc..7f0567f4f 100644
Binary files a/src/cg/cg7400a.png and b/src/cg/cg7400a.png differ
diff --git a/src/cg/cg7400b.png b/src/cg/cg7400b.png
index 214e4f30e..103204e11 100644
Binary files a/src/cg/cg7400b.png and b/src/cg/cg7400b.png differ
diff --git a/src/cg/cg7400c.png b/src/cg/cg7400c.png
index 5f1b87673..c05148c56 100644
Binary files a/src/cg/cg7400c.png and b/src/cg/cg7400c.png differ
diff --git a/src/cg/cg7401.cpp b/src/cg/cg7401.cpp
index fca6351bd..d889cf4cb 100644
--- a/src/cg/cg7401.cpp
+++ b/src/cg/cg7401.cpp
@@ -171,16 +171,19 @@ TISAM_recordset & TQuadro_IVA_recordset::get_recordset(const int code, const int
return *set;
}
-const real TQuadro_IVA_recordset::evaluate_recordset(const int code, const int year, const char * field, const char * expr)
+const real TQuadro_IVA_recordset::evaluate_recordset(const int code, const int year, const char * field, const char * expr, long codditta)
{
real val;
TProgram_report & rep = _mask->get_report(code - 1);
TISAM_recordset * set = (TISAM_recordset *) rep.recordset();
TExpression e(expr == NULL ? "\"X\"" : expr);
- if (set != NULL)
+ if (set != nullptr)
{
+ if (codditta < 0)
+ codditta = prefix().get_codditta();
set->set_var("#ANNO", format("%d", year));
+ set->set_var("#DITTA", codditta);
if (set->items() > 0)
for (set->move_first(); !set->eof(); set->move_next())
@@ -252,9 +255,28 @@ void TQuadro_IVA_recordset::add_value(const char *s, const real value)
_types.add(key, TString("real"));
}
*val += value;
+#ifdef DBG
+ double t = val->ld();
+ double v = value.ld();
+ static const char * codici[] = { "VE23.1", "VE23.2", "VE40.1" , "VF13.1", "VF13.2", nullptr };
+
+ for (int i = 0; codici[i] != nullptr; i++)
+ if (strcmp(s, codici[i]) == 0)
+ int z = 1;
+#endif
}
}
+real TQuadro_IVA_recordset::get_real_value(const char *s)
+{
+ const TString * t = (const TString *)_types.objptr(s);
+
+ if (t != nullptr && *t == "real")
+ return *((real *) _values.objptr(s));
+ else
+ return ZERO;
+}
+
void TQuadro_IVA_recordset::set_bool(const char *s, bool on)
{
TString * val = (TString *)_values.objptr(s);
@@ -262,7 +284,9 @@ void TQuadro_IVA_recordset::set_bool(const char *s, bool on)
if (val == nullptr)
{
const TString8 key(s);
+
_values.add(key, val = new TString4);
+ _types.add(key, TString("bool"));
}
*val = on ? "X" : "";
}
@@ -274,7 +298,9 @@ void TQuadro_IVA_recordset::set(const char *s, const char * value)
if (val == nullptr)
{
const TString8 key(s);
+
_values.add(key, val = new TString);
+ _types.add(key, TString("string"));
}
*val = value;
}
@@ -314,7 +340,7 @@ void TQuadro_IVA_app::print()
TQuadro_IVA_report rep(repname);
TRecordset * set = rep.recordset();
- rep.set_recordset(app_recordset(set->query_text(), atoi(year)));
+ rep.set_recordset(app_recordset(set->query_text(), atoi(year), c));
set = rep.recordset();
TReport_section * sec = rep.find_section('B', 1);
TReport_field * fld = sec->find_field(100);
@@ -326,6 +352,7 @@ void TQuadro_IVA_app::print()
book.add(rep);
}
}
+
_mask->restart_reports();
TProgram_report * rep = _mask->get_report();
TFilename repname = rep->filename();
diff --git a/src/cg/cg7401.h b/src/cg/cg7401.h
index bf1c3807c..9d7b8c596 100644
--- a/src/cg/cg7401.h
+++ b/src/cg/cg7401.h
@@ -40,23 +40,25 @@ class TQuadro_IVA_recordset : public TISAM_recordset
TAssoc_array _types;
TQuadro_IVA_mask * _mask;
int _year;
+ char _repid;
protected:
const TMask & mask() { return *_mask; }
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);
+ real get_real_value(const char *s);
void set(const char *s,const char * value);
- virtual void load() pure;
+ virtual void load(const char repid) pure;
virtual const TVariant& get(const char* column_name) const;
void clear() { _values.destroy(); _types.destroy(); }
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(const int code, const int year, const char * field, const char * expr = nullptr, long codditta = -1);
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) { }
+ TQuadro_IVA_recordset(TQuadro_IVA_mask * mask, const char* use, const int year, const char repid) : TISAM_recordset(use), _mask(mask), _year(year), _repid(repid) { }
TQuadro_IVA_recordset(const TQuadro_IVA_recordset * recset);
TQuadro_IVA_recordset(const TQuadro_IVA_recordset & recset);
int year() { return _year; }
@@ -84,7 +86,7 @@ protected:
virtual char last_quadro_report() const { return 'a';}
public:
- virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year) pure;
+ virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year, const char repid) pure;
virtual void load_sheet(TSheet_field & sf) {}
virtual bool firm_change_enabled() const { return false; }
TQuadro_IVA_mask * mask() const { return _mask; }
diff --git a/src/cg/cg7500a.png b/src/cg/cg7500a.png
index 273c02e57..b8176bd08 100644
Binary files a/src/cg/cg7500a.png and b/src/cg/cg7500a.png differ
diff --git a/src/cg/cg7600.cpp b/src/cg/cg7600.cpp
index d0de36141..d0dddf75c 100644
--- a/src/cg/cg7600.cpp
+++ b/src/cg/cg7600.cpp
@@ -27,14 +27,14 @@
class TQuadro_VE_recordset : public TQuadro_IVA_recordset
{
protected:
- virtual void load();
+ virtual void load(const char repid);
public:
- TQuadro_VE_recordset(TQuadro_IVA_mask * mask, const char* use, const int year) : TQuadro_IVA_recordset(mask, use, year) { load(); }
+ TQuadro_VE_recordset(TQuadro_IVA_mask * mask, const char* use, const int year, const char repid) : TQuadro_IVA_recordset(mask, use, year, repid) { load(repid); }
virtual ~TQuadro_VE_recordset() {}
};
-void TQuadro_VE_recordset::load()
+void TQuadro_VE_recordset::load(const char repid)
{
clear();
@@ -47,26 +47,24 @@ void TQuadro_VE_recordset::load()
imposta_agricola.add("2.00", TString8("VE01.2"));
imponibile_agricolo.add("4.00", TString8("VE02.2"));
imposta_agricola.add("4.00", TString8("VE02.2"));
- imponibile_agricolo.add("6.00", TString8("V03.1"));
- imposta_agricola.add("6.00", TString8("VE03.2"));
+ imponibile_agricolo.add("6.40", TString8("V03.1"));
+ imposta_agricola.add("6.40", TString8("VE03.2"));
imponibile_agricolo.add("7.30", TString8("V04.1"));
imposta_agricola.add("7.30", TString8("VE04.2"));
imponibile_agricolo.add("7.50", TString8("VE05.1"));
imposta_agricola.add("7.50", TString8("VE05.2"));
- imponibile_agricolo.add("7.65", TString8("VE06.1"));
- imposta_agricola.add("7.65", TString8("VE06.2"));
- imponibile_agricolo.add("7.95", TString8("VE07.1"));
- imposta_agricola.add("7.65", TString8("VE07.2"));
- imponibile_agricolo.add("8.30", TString8("VE08.1"));
- imposta_agricola.add("8.30", TString8("VE08.2"));
- imponibile_agricolo.add("8,50", TString8("VE09.1"));
- imposta_agricola.add("8,50", TString8("VE09.2"));
- imponibile_agricolo.add("8.80", TString8("VE10.1"));
- imposta_agricola.add("8.80", TString8("VE10.2"));
- imponibile_agricolo.add("10.00", TString8("VE11.1"));
- imposta_agricola.add("10.00", TString8("VE11.2"));
- imponibile_agricolo.add("12.30", TString8("VE12.1"));
- imposta_agricola.add("12.30", TString8("VE12.2"));
+ imponibile_agricolo.add("8.30", TString8("VE06.1"));
+ imposta_agricola.add("8.30", TString8("VE06.2"));
+ imponibile_agricolo.add("8.50", TString8("VE07.1"));
+ imposta_agricola.add("8.50", TString8("VE07.2"));
+ imponibile_agricolo.add("8.80", TString8("VE08.1"));
+ imposta_agricola.add("8.80", TString8("VE08.2"));
+ imponibile_agricolo.add("9,50", TString8("VE09.1"));
+ imposta_agricola.add("9,50", TString8("VE09.2"));
+ imponibile_agricolo.add("10.00", TString8("VE10.1"));
+ imposta_agricola.add("10.00", TString8("VE10.2"));
+ imponibile_agricolo.add("12.30", TString8("VE11.1"));
+ imposta_agricola.add("12.30", TString8("VE11.2"));
imponibile.add("4.00", TString8("VE20.1"));
imposta.add("4.00", TString8("VE20.2"));
@@ -75,17 +73,19 @@ void TQuadro_VE_recordset::load()
imponibile.add("10.00",TString8("VE22.1"));
imposta.add("10.00",TString8("VE22.2"));
- imponibile.add("4.00", TString8("VE20.1"));
+/* 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"));
+ 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("19.00", TString8("VE23.1"));
+ imposta.add("19.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"));
@@ -97,7 +97,6 @@ void TQuadro_VE_recordset::load()
query << year() << "\nTO CODTAB=" << year();
TISAM_recordset pim(query);
- bool good = false;
for (pim.move_first(); !pim.eof(); pim.move_next())
{
@@ -127,17 +126,21 @@ void TQuadro_VE_recordset::load()
codatt.add(codtab.mid(4, 5));
const TRectype& attiv = cache().get(LF_ATTIV, codatt);
const bool attivita_commerciale = !attiv.get_bool(ATT_ATTNONCOM);
+ TArray imponibili;
+ TArray imposte;
- tiporec tipo;
- real imp;
- real iva;
- int last_tiporec= -1;
-
- if (classify_pim(pimr, imp, iva, tipo, true, last_tiporec, true))
+ classify_pim_array(pimr, imponibili, imposte, true, true);
+ FOR_EACH_ARRAY_ITEM(imponibili, t, obj)
{
- good = true;
- switch (tipo)
+ tiporec tipo = (tiporec) t;
+
+ if (obj != nullptr)
{
+ real & imp = (real &)*obj;
+ real & iva = (real &)imposte[t];
+
+ switch (tipo)
+ {
case acq_norm: // acquisti normali
break;
case vend_norm: // vendite normali
@@ -148,34 +151,29 @@ void TQuadro_VE_recordset::load()
if (agricolo)
{
- add_value(*(TString *)imponibile_agricolo.objptr(aliquota), imp);
- add_value(*(TString *)imposta_agricola.objptr(aliquota), iva);
+ add_value(STRING_TOKEN(imponibile_agricolo.objptr(aliquota)), imp);
+ add_value(STRING_TOKEN(imposta_agricola.objptr(aliquota)), iva);
}
else
{
- if (aliquota == "20.00" || aliquota == "21.00")
- {
- real imposta_corretta = imp;
+ if (aliquota == "22.00")
+ int q = 1;
+ if (aliquota == "19.00" || aliquota == "20.00" || aliquota == "21.00")
+ {
+ real imposta_corretta = imp;
- imposta_corretta *= 0.22;
- imposta_corretta.round(0);
- add_value("VE25.2", iva - imposta_corretta);
- iva = imposta_corretta;
- }
+ imposta_corretta *= 0.22;
+ imposta_corretta.round(0);
+ add_value("VE25.2", iva - imposta_corretta);
+ iva = imposta_corretta;
+ }
+ if (aliquota == "22.00")
+ int q = 1;
add_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp);
add_value(STRING_TOKEN(imposta.objptr(aliquota)), iva);
}
}
- else
- {
- const int tipocr = atoi(codtab.mid(15, 1)); // tipo costo_ricavo
- if (tipocr == 4)
- {
- if (reverse || int_tipo_iva11_ven == acq_ind_pass_int || int_tipo_iva11_ven == cess_amm)
- add_value("VE40.1", imp);
- }
- }
break;
case acq_simp:
break;
@@ -183,47 +181,46 @@ void TQuadro_VE_recordset::load()
break;
case bolle_doganali: // bolle doganali (acquisti)
break;
- case acq_beni_riv : // acq. beni per rivendita
+ case acq_beni_riv: // acq. beni per rivendita
break;
- case base_ventilazione: // base calcolo per ventil.
+ case base_ventilazione: // base calcolo per ventil.
break;
case corr_simp: // corrispettivi n. e s. imp.
break;
- case acq_beni_ammort: // acq. beni ammortizz. detr.
+ case acq_beni_ammort: // acq. beni ammortizz. detr.
break;
- case acq_beni_ammort_nd: // beni ammort. non detraibili
+ case acq_beni_ammort_nd: // beni ammort. non detraibili
break;
- case acq_beni_leasing: // beni strum. acq in leasing
+ case acq_beni_leasing: // beni strum. acq in leasing
break;
case acq_amm_ultdetr: // beni amm. ult. detr 6%
break;
- case acq_ind_op_es: // acq. indetr. su op.es.
+ case acq_ind_op_es: // acq. indetr. su op.es.
break;
- case acq_ind_pass_int: // passaggi interni
- if (vendite)
- add_value("VE40.1", imp);
+ case acq_ind_pass_int: // passaggi interni
+// add_value("VE40.1", imp);
break;
- case acq_ind_art_19: // indetr. art. 19
+ case acq_ind_art_19: // indetr. art. 19
break;
- case cess_amm: // cessioni amministrative
- add_value("VE40.1", imp);
+ case cess_amm: // cessioni beni ammortizzabili
+// add_value("VE40.1", imp);
break;
- case vend_rimborso: // vendite valide per rimborso
+ case vend_rimborso: // vendite valide per rimborso
break;
- case acq_rimborso: // acq. validi per rimborso
+ case acq_rimborso: // acq. validi per rimborso
break;
- case acq_bd_ind_art_19: // acq. con tipo documento BD e tipo detr 9
+ case acq_bd_ind_art_19: // acq. con tipo documento BD e tipo detr 9
break;
default:
break;
- };
- }
- else
- {
- imp = pimr.get_real("R0");
- iva = pimr.get_real("R1");
+ };
+ }
}
+
+ const real imp = pimr.get_real("R0");
+ const real iva = pimr.get_real("R1");
+
if (non_imponibile)
{
if (int_tipo_iva11_ven == 21)
@@ -267,40 +264,11 @@ void TQuadro_VE_recordset::load()
}
}
- TISAM_recordset exp = get_recordset(REP_PAART17);
-
- query = exp.query_text();
-
- int pos = query.find("BY") - 1;
-
- query.insert("&&(ATTIV.ATTNONCOM != \"X\")", pos);
- exp.set(query);
- exp.requery();
- exp.set_var("#DITTA", prefix().get_codditta());
- exp.set_var("#ANNO", format("%d", year()));
- 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();
- const TRectype & mov = cache().get(LF_MOV, exp.get(FIELD_NAME(LF_RMOVIVA, RMI_NUMREG)).as_int());
-
- if (aliquota.full())
- {
- const real imp = exp.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPONIBILE)).as_real();
- real iva = exp.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPOSTA)).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);
query = reg.query_text();
- pos = query.find("JOIN") - 1;
+ int pos = query.find("JOIN") - 1;
query.insert("&&(ATTIV.ATTNONCOM != \"X\")", pos);
reg.set(query);
reg.requery();
@@ -333,6 +301,8 @@ void TQuadro_VE_recordset::load()
sub_value("VE25.2", imposta_corretta - iva);
iva = imposta_corretta;
}
+ if (aliquota == "22.00" && iva != (imp * real(0.22)).round(2))
+ int q = 1;
sub_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp);
sub_value(STRING_TOKEN(imposta.objptr(aliquota)), iva);
}
@@ -343,7 +313,6 @@ void TQuadro_VE_recordset::load()
query << year() << "13\nTO CODTAB==" << year() << "13";
TISAM_recordset lim(query);
- good |= lim.items() > 0;
for (lim.move_first(); !lim.eof(); lim.move_next())
{
@@ -390,34 +359,38 @@ void TQuadro_VE_recordset::load()
TISAM_recordset id(query);
- TString8 tipo_aliquota, codiva;
+ TString8 cod;
TImporto imp371, imp372;
for (bool ok = id.move_first(); ok; ok = id.move_next())
- {
- const long numreg = id.get(RMI_NUMREG).as_int();
- const int tipoiva = id.get(ID_TIPOIVA).as_int();
- const int tipodiff = id.get(ID_TIPODIFF).as_int();
- const TRectype & mov = cache().get(LF_MOV, numreg);
- const char sezione = id.get(ID_SEZIONE).as_string()[0];
- const int tipomov = id.get(ID_TIPOMOV).as_int();
- const TImporto imp(sezione, id.get(RMI_IMPONIBILE).as_real());
- const int annoliq = id.get(ID_ANNOLIQ).as_int();
- const TDate datapag = id.get(ID_DATAREGP).as_date();
+ {
+ const long numreg = id.get_long(RMI_NUMREG);
+ const int tipoiva = id.get_int(ID_TIPOIVA);
- key.cut(0);
- key.add(numreg);
- key.add(id.get(ID_NUMRIG).as_string());
- codiva = cache().get(LF_RMOVIVA, key, RMI_CODIVA);
- key = codiva;
- tipo_aliquota = cache().get("%IVA", key, "S1");
+ if (tipoiva == 1) // Vendite
+ {
+ const int tipodiff = id.get_int(ID_TIPODIFF);
+ const TRectype & mov = cache().get(LF_MOV, numreg);
+ const char sezione = id.get_string(ID_SEZIONE)[0];
+ const int tipomov = id.get_int(ID_TIPOMOV);
+ const TImporto imp(sezione, id.get_real(RMI_IMPONIBILE));
+ const int annoliq = id.get_int(ID_ANNOLIQ);
+ const TDate datapag = id.get_date(ID_DATAREGP);
- if (tipo_aliquota.blank() && datapag <= a_datareg && tipoiva == 1) // Vendite
- {
- imp371 += imp;
- if (tipodiff == 2)
- imp372 += imp;
- }
+ key.cut(0);
+ key.add(numreg);
+ key.add(id.get_string(ID_NUMRIG));
+ cod = cache().get(LF_RMOVIVA, key, RMI_CODIVA);
+
+ const TCodiceIVA & codiva = cached_codIVA(cod);
+
+ if (codiva.iva_imponibile() && datapag <= a_datareg)
+ {
+ imp371 += imp;
+ if (tipodiff == 2)
+ imp372 += imp;
+ }
+ }
}
imp371.normalize('D');
add_value("VE37.1", imp371.valore()); // VE37.1 2 iva sospensione da incassare
@@ -435,31 +408,56 @@ void TQuadro_VE_recordset::load()
for (bool ok = idp.move_first(); ok; ok = idp.move_next())
{
- const long numreg = idp.get(RMI_NUMREG).as_int();
- const int tipoiva = idp.get(ID_TIPOIVA).as_int();
- const TRectype & mov = cache().get(LF_MOV, numreg);
- const char sezione = idp.get(ID_SEZIONE).as_string()[0];
- const int tipomov = idp.get(ID_TIPOMOV).as_int();
- const TImporto imp(sezione, idp.get(RMI_IMPONIBILE).as_real());
- const int annoliq = idp.get(ID_DATAREG).as_date().year();
- const int annopag = idp.get(ID_DATAREGP).as_date().year();
-
- key.cut(0);
- key.add(numreg);
- key.add(idp.get(ID_NUMRIG).as_string());
- codiva = cache().get(LF_RMOVIVA, key, RMI_CODIVA);
- key = codiva;
- tipo_aliquota = cache().get("%IVA", key, "S1");
-
- if (tipo_aliquota.blank() && tipoiva == 1) // Vendite
+ const long numreg = idp.get_long(RMI_NUMREG);
+ const int tipoiva = idp.get_int(ID_TIPOIVA);
+
+ if (tipoiva == 1) // Vendite
{
- if (annoliq < year() && tipomov == 3)
+ const int tipodiff = idp.get_int(ID_TIPODIFF);
+ const TRectype & mov = cache().get(LF_MOV, numreg);
+ const char sezione = idp.get_string(ID_SEZIONE)[0];
+ const int tipomov = idp.get_int(ID_TIPOMOV);
+ const TImporto imp(sezione, idp.get_real(RMI_IMPONIBILE));
+ const int annoliq = idp.get_date(ID_DATAREG).year();
+ const int annopag = idp.get_date(ID_DATAREGP).year();
+
+ key.cut(0);
+ key.add(numreg);
+ key.add(idp.get(ID_NUMRIG).as_string());
+ cod = cache().get(LF_RMOVIVA, key, RMI_CODIVA);
+ const TCodiceIVA & codiva = cached_codIVA(cod);
+
+ if (annoliq < year() && tipomov == 3 && codiva.iva_imponibile())
imp391 += imp;
}
}
-
imp391.normalize('A');
add_value("VE39.1", imp391.valore()); // VE39.1 iva differita incassi di anni precedenti
+
+ query.zap();
+
+ query << "USE RMOVIVA SELECT BETWEEN(" << FIELD_NAME(LF_MOV, MOV_DATAREG) << ",\""<< da_datareg.date2ansi() << "\",\"" << a_datareg.date2ansi() << "\")&&((" << RMI_TIPOCR << "== 1" << ")||(" << RMI_TIPOCR << "== 4))";
+ query << "\nJOIN " << LF_MOV << " INTO " << MOV_NUMREG << "=" << RMV_NUMREG;
+
+
+ TISAM_recordset movces(query);
+ real imp401;
+
+ for (bool ok = movces.move_first(); ok; ok = movces.move_next())
+ {
+ const long numreg = movces.get_long(RMI_NUMREG);
+ const TRectype & mov = cache().get(LF_MOV, numreg);
+ const bool ivaxcassa = mov.get_bool(MOV_IVAXCASSA);
+
+ if (ivaxcassa)
+ {
+ const real imp = movces.get_real(RMI_IMPONIBILE);
+
+ imp401 += imp;
+ }
+ }
+
+ add_value("VE40.1", imp401); // VE40.1 vendita cespiti
}
@@ -467,7 +465,7 @@ class TQuadro_VE_app : public TQuadro_IVA_app
{
public:
- virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year) { return new TQuadro_VE_recordset(mask(), use, year); }
+ virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year, const char repid) { return new TQuadro_VE_recordset(mask(), use, year, repid); }
virtual void load_sheet(TSheet_field & sf);
TQuadro_VE_app() : TQuadro_IVA_app("Stampa Quadro VE", "cg7600a") {}
diff --git a/src/cg/cg7600a.png b/src/cg/cg7600a.png
index b64d2dd9c..0f0c4ee03 100644
Binary files a/src/cg/cg7600a.png and b/src/cg/cg7600a.png differ
diff --git a/src/cg/cg7600a.rep b/src/cg/cg7600a.rep
index 0a2917903..04fb14906 100644
--- a/src/cg/cg7600a.rep
+++ b/src/cg/cg7600a.rep
@@ -26,8 +26,7 @@
-
+
@@ -97,12 +96,6 @@ generato da Campo">
-
-
-
-
-
-
@@ -131,7 +124,7 @@ generato da Campo">
-
+
diff --git a/src/cg/cg7700.cpp b/src/cg/cg7700.cpp
index 3b9f994a8..e9576a693 100644
--- a/src/cg/cg7700.cpp
+++ b/src/cg/cg7700.cpp
@@ -22,14 +22,14 @@ class TQuadro_VF_recordset : public TQuadro_IVA_recordset
TQuadro_IVA_mask * _mask;
protected:
- virtual void load();
+ virtual void load(char repid);
public:
- TQuadro_VF_recordset(TQuadro_IVA_mask * mask, const char* use, const int year) : TQuadro_IVA_recordset(mask, use, year) { load(); }
+ TQuadro_VF_recordset(TQuadro_IVA_mask * mask, const char* use, const int year, char repid = 'a') : TQuadro_IVA_recordset(mask, use, year, repid) { load(repid); }
virtual ~TQuadro_VF_recordset() {}
};
-void TQuadro_VF_recordset::load()
+void TQuadro_VF_recordset::load(char repid)
{
clear();
@@ -44,31 +44,29 @@ void TQuadro_VF_recordset::load()
imposta.add("4.00", TString8("VF02.2"));
imponibile.add("5.00", TString8("VF03.1"));
imposta.add("5.00", TString8("VF03.2"));
- imponibile.add("6.00", TString8("VF04.1"));
- imposta.add("6.00", TString8("VF04.2"));
- imponibile.add("7.30", TString8("VF05.1"));
+ imponibile.add("6.40", TString8("VF04.1"));
+ imposta.add("6.40", TString8("VF04.2"));
+ imponibile.add("7.30", TString8("VF05.1"));
imposta.add("7.30", TString8("VF05.2"));
imponibile.add("7.50", TString8("VF06.1"));
imposta.add("7.50", TString8("VF06.2"));
- imponibile.add("7.65", TString8("VF07.1"));
- imposta.add("7.65", TString8("VF07.2"));
- imponibile.add("7.95", TString8("VF08.1"));
- imposta.add("7.95", TString8("VF08.2"));
- imponibile.add("8.30", TString8("VF09.1"));
- imposta.add("8.30", TString8("VF09.2"));
- imponibile.add("8,50", TString8("VF10.1"));
- imposta.add("8,50", TString8("VF10.2"));
- imponibile.add("8.80", TString8("VF11.1"));
- imposta.add("8.80", TString8("VF11.2"));
- imponibile.add("10.00",TString8("VF12.1"));
- imposta.add("10.00",TString8("VF12.2"));
- imponibile.add("12.30", TString8("VF13.1"));
- imposta.add("12.30", TString8("VF13.2"));
- imponibile.add("22.00", TString8("VF14.1"));
- imposta.add("22.00", TString8("VF14.2"));
+ imponibile.add("8.30", TString8("VF07.1"));
+ imposta.add("8.30", TString8("VF07.2"));
+ imponibile.add("8.50", TString8("VF08.1"));
+ imposta.add("8.50", TString8("VF08.2"));
+ imponibile.add("8.80", TString8("VF09.1"));
+ imposta.add("8.80", TString8("VF09.2"));
+ imponibile.add("9,50", TString8("VF10.1"));
+ imposta.add("9,50", TString8("VF10.2"));
+ imponibile.add("10.00", TString8("VF11.1"));
+ imposta.add("10.00", TString8("VF11.2"));
+ imponibile.add("12.30", TString8("VF12.1"));
+ imposta.add("12.30", TString8("VF12.2"));
+ imponibile.add("22.00", TString8("VF13.1"));
+ imposta.add("22.00", TString8("VF13.2"));
// VF30.1-8 METODO UTILIZZATO PER LA DETERMINAZIONE DELL’IVA AMMESSA IN DETRAZIONE
TString query; query << "USE ATTIV\nFROM CODDITTA=#F\nTO CODDITTA=#F";
-
+
TISAM_recordset at(query);
bool agenziaviaggio = false;
bool minori = false;
@@ -94,7 +92,7 @@ void TQuadro_VF_recordset::load()
{
const TString16 key = format("%4d%5s%1d13", year(), (const char *)codatt, t);
const TRectype & plm = cache().get("PLM", key);
-
+
if (plm.full())
{
prorataprev |= plm.get_real("R2") > real(50.0);
@@ -105,68 +103,66 @@ void TQuadro_VF_recordset::load()
}
if (!agricolo)
agricolo_misto = false;
-
- set_bool("VF30.1", agenziaviaggio);
- set_bool("VF30.2");
- set_bool("VF30.3", prorataprev);
- set_bool("VF30.4");
- set_bool("VF30.5");
- set_bool("VF30.6", minori);
- set_bool("VF30.7", agricolo_misto);
- set_bool("VF30.8", agricolo);
- set_bool("VF30.9");
- set_bool("VF30.10");
+ if (repid == 'b')
+ {
+ set_bool("VF30.1", agenziaviaggio);
+ set_bool("VF30.2");
+ set_bool("VF30.3", prorataprev);
+ set_bool("VF30.4");
+ set_bool("VF30.5");
+ set_bool("VF30.6", minori);
+ set_bool("VF30.7", agricolo_misto);
+ set_bool("VF30.8", agricolo);
+ set_bool("VF30.9");
+ set_bool("VF30.10");
+ }
imponibile_agricolo.add("2.00", TString8("V39.1"));
imposta_agricola.add("2.00", TString8("VF39.2"));
imponibile_agricolo.add("4.00", TString8("VF40.2"));
imposta_agricola.add("4.00", TString8("VF40.2"));
- imponibile_agricolo.add("6.00", TString8("VF41.1"));
- imposta_agricola.add("6.00", TString8("VF41.2"));
- imponibile_agricolo.add("7.30", TString8("VF42.1"));
+ imponibile_agricolo.add("6.40", TString8("VF41.1"));
+ imposta_agricola.add("6.40", TString8("VF41.2"));
+ imponibile_agricolo.add("7.30", TString8("VF42.1"));
imposta_agricola.add("7.30", TString8("VF42.2"));
imponibile_agricolo.add("7.50", TString8("VF43.1"));
imposta_agricola.add("7.50", TString8("VF43.2"));
- imponibile_agricolo.add("7.65", TString8("VF44.1"));
- imposta_agricola.add("7.65", TString8("VF44.2"));
- imponibile_agricolo.add("7.95", TString8("VF45.1"));
- imposta_agricola.add("7.95", TString8("VF45.2"));
- imponibile_agricolo.add("8.30", TString8("VF46.1"));
- imposta_agricola.add("8.30", TString8("VF46.2"));
- imponibile_agricolo.add("8,50", TString8("VF47.1"));
- imposta_agricola.add("8,50", TString8("VF47.2"));
- imponibile_agricolo.add("8.80", TString8("VF48.1"));
- imposta_agricola.add("8.80", TString8("VF48.2"));
- imponibile_agricolo.add("10.00",TString8("VF49.1"));
- imposta_agricola.add("10.00",TString8("VF49.2"));
- imponibile_agricolo.add("12.30", TString8("VF50.1"));
- imposta_agricola.add("12.30", TString8("VF50.2"));
-
+ imponibile_agricolo.add("8.30", TString8("VF44.1"));
+ imposta_agricola.add("8.30", TString8("VF44.2"));
+ imponibile_agricolo.add("8.50", TString8("VF45.1"));
+ imposta_agricola.add("8.50", TString8("VF45.2"));
+ imponibile_agricolo.add("8.80", TString8("VF46.1"));
+ imposta_agricola.add("8.80", TString8("VF46.2"));
+ imponibile_agricolo.add("9.50", TString8("VF47.1"));
+ imposta_agricola.add("9.50", TString8("VF47.2"));
+ imponibile_agricolo.add("10.00", TString8("VF48.1"));
+ imposta_agricola.add("10.00", TString8("VF48.2"));
+ imponibile_agricolo.add("12.30", TString8("VF49.1"));
+ imposta_agricola.add("12.30", TString8("VF49.2"));
+
query = "USE PIM\nFROM CODTAB=";
query << year() << "\nTO CODTAB=" << year();
TISAM_recordset pim(query);
- bool good = false;
for (pim.move_first(); !pim.eof(); pim.move_next())
{
const TString80 codtab = pim.get("CODTAB").as_string();
- const TString8 codreg(format("%d%-3s",year(), (const char*)codtab.mid(10,3)));
+ const TString8 codreg(format("%d%-3s", year(), (const char*)codtab.mid(10, 3)));
const TRectype & reg = cache().get("REG", codreg);
- const tiporec tipo = (tiporec) reg.get_int("I9");
+ const tiporec tipo = (tiporec)reg.get_int("I9");
const bool acquisti = reg.get_int("I0") == 2;
- const int month = atoi(codtab.mid(13,2));
+ const int month = atoi(codtab.mid(13, 2));
if (acquisti && tipo != liquidazione && month == 13)
{
const TRectype & pimr = pim.cursor()->curr();
- TString8 codiva(codtab.mid(16,4)); codiva.trim();
+ TString8 codiva(codtab.mid(16, 4)); codiva.trim();
const TRectype & ivar = cache().get("%IVA", codiva);
const TString8 aliquota = ivar.get("R0");
- const int tipocr = atoi(codtab.mid(15,1)); // tipo costo_ricavo
- tiporec tipo;
+ const int tipocr = atoi(codtab.mid(15, 1)); // tipo costo_ricavo
const TString4 tipo_aliquota = ivar.get("S1");
const TString4 tipo_iva11_acq = ivar.get("S9");
const int int_tipo_iva11_acq = atoi(tipo_iva11_acq);
@@ -174,21 +170,27 @@ void TQuadro_VF_recordset::load()
const bool esente = (tipo_aliquota == "ES");
const bool non_soggetto = (tipo_aliquota == "NS");
const bool terremotati = int_tipo_iva11_acq == 16;
- real imp;
- real iva;
- int last_tiporec = -1;
+ TArray imponibili;
+ TArray imposte;
- if (classify_pim(pimr, imp, iva, tipo, true, last_tiporec, true))
+ classify_pim_array(pimr, imponibili, imposte, true, true);
+ FOR_EACH_ARRAY_ITEM(imponibili, t, obj)
{
- good = true;
- switch (tipo)
+ tiporec tipo = (tiporec)t;
+
+ if (obj != nullptr)
{
+ real & imp = (real &)*obj;
+ real & iva = (real &)imposte[t];
+
+ switch (tipo)
+ {
case acq_norm: // acquisti normali
if (prorata100)
{
if (aliquota.full())
- add_value("VF20.1", imp);
- }
+ add_value("VF22.1", imp);
+ }
else
{
if (atoi(aliquota) != 0)
@@ -197,8 +199,16 @@ void TQuadro_VF_recordset::load()
if (agricolo)
{
- 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
+ if (imponibile_agricolo.objptr(aliquota) == nullptr)
+ {
+ add_value("VF38.1", imp); // VF39.1 VF48.1 Imprese agricole impobnibil e imposte
+ add_value("VF38.2", iva); // VF39.2 VF48.2 Imprese agricole impobnibil e imposte
+ }
+ else
+ {
+ 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
@@ -207,7 +217,7 @@ 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);
}
- add_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp);
+ add_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp);
add_value(STRING_TOKEN(imposta.objptr(aliquota)), iva);
if (prorataprev)
{
@@ -226,75 +236,78 @@ void TQuadro_VF_recordset::load()
break;
case bolle_doganali: // bolle doganali (acquisti)
break;
- case acq_beni_riv : // acq. beni per riVFndita
+ case acq_beni_riv: // acq. beni per riVFndita
break;
- case base_ventilazione: // base calcolo per ventil.
+ case base_ventilazione: // base calcolo per ventil.
break;
case corr_simp: // corrispettivi n. e s. imp.
break;
- case acq_beni_ammort: // acq. beni ammortizz. detr.
+ case acq_beni_ammort: // acq. beni ammortizz. detr.
break;
- case acq_beni_ammort_nd: // beni ammort. non detraibili
+ case acq_beni_ammort_nd: // beni ammort. non detraibili
break;
- case acq_beni_leasing: // beni strum. acq in leasing
+ case acq_beni_leasing: // beni strum. acq in leasing
break;
case acq_amm_ultdetr: // beni amm. ult. detr 6%
break;
- case acq_ind_op_es: // acq. indetr. su op.es.
+ case acq_ind_op_es: // acq. indetr. su op.es.
break;
- case acq_ind_pass_int: // passaggi interni
+ case acq_ind_pass_int: // passaggi interni
break;
- case acq_ind_art_19: // indetr. art. 19
- add_value("VF19.1", imp);
+ case acq_ind_art_19: // indetr. art. 19
+ add_value("VF21.1", imp);
break;
- case cess_amm: // cessioni amministrative
- case vend_rimborso: // vendite valide per rimborso
+ case cess_amm: // cessioni amministrative
+ case vend_rimborso: // vendite valide per rimborso
break;
- case acq_rimborso: // acq. validi per rimborso
+ case acq_rimborso: // acq. validi per rimborso
break;
- case acq_bd_ind_art_19: // acq. con tipo documento BD e tipo detr 9
- add_value("VF20.1", imp); // *** verificare !!!!!
+ case acq_bd_ind_art_19: // acq. con tipo documento BD e tipo detr 9
+ add_value("VF22.1", imp); // *** verificare !!!!!
break;
default:
break;
- };
+ };
+ }
}
- else
- {
- imp = pimr.get_real("R0") - pimr.get_real("R9");
- iva = pimr.get_real("R1") - pimr.get_real("R10");
- }
- if (non_imponibile)
+
+ const real imp = pimr.get_real("R0") - pimr.get_real("R9");
+ const real iva = pimr.get_real("R1") - pimr.get_real("R10");
+
+// if (non_imponibile)
{
if (int_tipo_iva11_acq == 12)
{
- add_value("VF14.1", imp);
+ add_value("VF17.1", imp);
add_value("VF35.2", iva); // VF35.1 IVA non assolta sugli acquisti e importazioni indicati al rigo VF14
}
else
if (int_tipo_iva11_acq == 13)
- add_value("VF15.1", imp);
+ {
+ add_value("VF17.1", imp);
+ add_value("VF35.2", iva); // VF35.1 IVA non assolta sugli acquisti e importazioni indicati al rigo VF14
+ }
}
- if (esente)
- {
- if (tipo_iva11_acq == "14A")
- add_value("VF16.2", imp);
- else
- if (int_tipo_iva11_acq == 14)
- add_value("VF16.1", imp);
- }
- if (non_soggetto)
+ // if (esente)
+ {
+ if (tipo_iva11_acq == "14A")
+ add_value("VF18.1", imp);
+ else
+ if (int_tipo_iva11_acq == 14)
+ add_value("VF18.2", imp);
+ }
+// if (non_soggetto)
{
if (int_tipo_iva11_acq == 15)
{
if (tipo_iva11_acq == "15B")
- add_value("VF17.2", imp);
- add_value("VF17.1", imp);
+ add_value("VF19.2", imp);
+ add_value("VF19.1", imp);
}
}
if (terremotati)
- add_value("VF18.1", imp);
+ add_value("VF20.1", imp);
}
}
@@ -358,9 +371,10 @@ void TQuadro_VF_recordset::load()
}
}
imp211.normalize('A');
- add_value("VF21.1", imp211.valore()); // VE37.1 2 iva sospensione da pagare
+ add_value("VF23.1", imp211.valore());
+ add_value("VF37.1", imp211.valore()); // VF37.1 2 iva sospensione da pagare
imp212.normalize('A');
- add_value("VF21.2", imp212.valore()); // VE37.2 iva per cassa da pagare
+ add_value("VF23.2", imp212.valore());
query.zap();
@@ -396,7 +410,7 @@ void TQuadro_VF_recordset::load()
}
}
imp221.normalize('D');
- add_value("VF22.1", imp221.valore()); // VE22.1 iva differita pagamenti di anni precedenti
+ add_value("VF24.1", imp221.valore()); // VE22.1 iva differita pagamenti di anni precedenti
// V24.2 Variazioni e arrotondamenti d’imposta (indicare con il segno +/–)
// V50.2 Variazioni e arrotondamenti d’imposta (indicare con il segno +/–)
@@ -406,7 +420,6 @@ void TQuadro_VF_recordset::load()
query << year() << "13\nTO CODTAB==" << year() << "13";
TISAM_recordset lim(query);
- good |= lim.items() > 0;
for (lim.move_first(); !lim.eof(); lim.move_next())
{
@@ -414,49 +427,58 @@ void TQuadro_VF_recordset::load()
if (var_cred < ZERO) // ???
{
- add_value("VF24.2", -var_cred);
+ add_value("VF26.2", -var_cred);
add_value("VF51.2", -var_cred);
}
add_value("VF70.2", var_cred);
}
- val = evaluate_recordset_imponibile(REP_INTRA, year());
- add_value("VF26.1", val);
- val = evaluate_recordset_imposta(REP_INTRA, year());
- add_value("VF26.2", val);
- val = evaluate_recordset_imponibile(REP_IMPORTAZIONI, year());
- add_value("VF26.3", val);
- val = evaluate_recordset_imposta(REP_IMPORTAZIONI, year());
- add_value("VF26.4", val);
- val = evaluate_recordset_imponibile(REP_SANMARINO, year());
- add_value("VF26.5", val);
- val = evaluate_recordset_imposta(REP_SANMARINO, year());
- add_value("VF24.6", val);
+ if (repid == 'a')
+ {
+ val = evaluate_recordset_imponibile(REP_INTRA, year());
+ add_value("VF28.1", val);
+ val = evaluate_recordset_imposta(REP_INTRA, year());
+ add_value("VF28.2", val);
+ val = evaluate_recordset_imponibile(REP_IMPORTAZIONI, year());
+ add_value("VF28.3", val);
+ val = evaluate_recordset_imposta(REP_IMPORTAZIONI, year());
+ add_value("VF28.4", val);
+ val = evaluate_recordset_imponibile(REP_SANMARINO, year());
+ add_value("VF28.5", val);
+ val = evaluate_recordset_imposta(REP_SANMARINO, year());
+ add_value("VF26.6", val);
- val = evaluate_recordset_imponibile(REP_RIPACQ, year(), "RMOVIVA.TIPOCR==2");
- 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)||(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);
+ val = evaluate_recordset_imponibile(REP_RIPACQ, year(), "RMOVIVA.TIPOCR==2");
+ add_value("VF29.1", val);
+ val = evaluate_recordset_imponibile(REP_RIPACQ, year(), "RMOVIVA.TIPOCR==8");
+ add_value("VF29.2", val);
+ val = evaluate_recordset_imponibile(REP_RIPACQ, year(), "(RMOVIVA.TIPOCR==1)||(RMOVIVA.TIPOCR==51)");
+ add_value("VF29.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("VF29.4", val);
+ }
+ else
+ {
+ // VF32.1 Se per l’anno 2016 sono state effettuate esclusivamente operazioni esenti barrare la casella
+ set_bool("VF32.1", prorata100);
+ // VF33.1 Se per l’anno 2016 ha avuto effetto l’opzione di cui all’art. 36-bis barrare la casella
+ set_bool("VF33.1");
+ // VF34.1-9 Dati per il calcolo della percentuale di detrazione
- // VF32.1 Se per l’anno 2016 sono state effettuate esclusivamente operazioni esenti barrare la casella
- set_bool("VF32.1", prorata100);
- // VF33.1 Se per l’anno 2016 ha avuto effetto l’opzione di cui all’art. 36-bis barrare la casella
- set_bool("VF33.1");
- // VF34.1-9 Dati per il calcolo della percentuale di detrazione
+ // VF36.1 IVA detraibile per gli acquisti relativi all’oro effettuati dai soggetti diversi dai produttori e trasformatori ai sensi dell’art. 19, comma 5 bis
+ // VF54.2 Importo detraibile per le cessioni, anche intracomunitarie, dei prodotti agricoli di cui all’art.34, primo comma, effettuate ai sensi degli articoli 8, primo comma, 38 quater e 72 ???
+ // VF60.1 Se le operazioni esenti effettuate sono occasionali ovvero riguardano esclusivamente operazioni di cui ai nn. da 1 a 9 dell’art.10, non rientranti nell’attività propria dell’impresa o accessorie ad operazioni imponibili barrare la casella
+ set_bool("VF60.1", prorata && !prorataprev);
+ // VF60.2 Se le operazioni imponibili effettuate sono occasionali barrare la casella
+ set_bool("VF60.2", prorataprev);
+ // VF61.1 Se sono state effettuate cessioni occasionali di beni usati con l’applicazione del regime del margine (d.l. n. 41/1995) barrare la casella
+ set_bool("VF61.1");
+ // VF62.1 2 Operazioni occasionali rientranti nel regime previsto dall’art. 34-bis per le attività agricole connesse
+ for (int i = 1; i < 14; i++)
+ add_value("VF71.0", get_real_value(format("VF%02d.2", i)));
+ add_value("VF71.0", get_real_value("VF26.2"));
+ }
- // VF36.1 IVA detraibile per gli acquisti relativi all’oro effettuati dai soggetti diversi dai produttori e trasformatori ai sensi dell’art. 19, comma 5 bis
- // VF54.2 Importo detraibile per le cessioni, anche intracomunitarie, dei prodotti agricoli di cui all’art.34, primo comma, effettuate ai sensi degli articoli 8, primo comma, 38 quater e 72 ???
- // VF60.1 Se le operazioni esenti effettuate sono occasionali ovvero riguardano esclusivamente operazioni di cui ai nn. da 1 a 9 dell’art.10, non rientranti nell’attività propria dell’impresa o accessorie ad operazioni imponibili barrare la casella
- set_bool("VF60.1", prorata && !prorataprev);
- // VF60.2 Se le operazioni imponibili effettuate sono occasionali barrare la casella
- set_bool("VF60.2", prorataprev);
- // VF61.1 Se sono state effettuate cessioni occasionali di beni usati con l’applicazione del regime del margine (d.l. n. 41/1995) barrare la casella
- set_bool("VF61.1");
- // VF62.1 2 Operazioni occasionali rientranti nel regime previsto dall’art. 34-bis per le attività agricole connesse
}
class TQuadro_VF_app : public TQuadro_IVA_app
@@ -466,7 +488,7 @@ protected:
virtual char last_quadro_report() const { return 'b';}
public:
- virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year) { return new TQuadro_VF_recordset(mask(), use, year); }
+ virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year, const char repid) { return new TQuadro_VF_recordset(mask(), use, year, repid); }
virtual void load_sheet(TSheet_field & sf);
TQuadro_VF_app() : TQuadro_IVA_app("Stampa Quadro VF", "cg7700a") {}
diff --git a/src/cg/cg7700a.png b/src/cg/cg7700a.png
index 59e0b7cdf..a7df46802 100644
Binary files a/src/cg/cg7700a.png and b/src/cg/cg7700a.png differ
diff --git a/src/cg/cg7700a.rep b/src/cg/cg7700a.rep
index aae4a9805..4300dd2ad 100644
--- a/src/cg/cg7700a.rep
+++ b/src/cg/cg7700a.rep
@@ -88,7 +88,7 @@
-
+
@@ -102,86 +102,80 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-
+
-
+
+
+
+
-
+
-
+
-
-
-
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/cg/cg7700b.png b/src/cg/cg7700b.png
index 5db8171a1..831acae95 100644
Binary files a/src/cg/cg7700b.png and b/src/cg/cg7700b.png differ
diff --git a/src/cg/cg7700b.rep b/src/cg/cg7700b.rep
index d29fb0709..01c8100b3 100644
--- a/src/cg/cg7700b.rep
+++ b/src/cg/cg7700b.rep
@@ -5,7 +5,7 @@
@@ -89,6 +89,9 @@
+
+
+
@@ -170,50 +173,67 @@
-
-
-
-
-
-
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
+
+
+ MON #7100 @
+#5502 @
++
+#7002 @
++
+#6001 @
+1
+C;E;
+IF
+#6202 @
++
+ELSE
+#6002 @
+1
+C;E;
+IF
+#6202 @
++
+THEN
+THEN
+#THIS !
diff --git a/src/cg/cg7800.cpp b/src/cg/cg7800.cpp
index e8825b3b1..892889377 100644
--- a/src/cg/cg7800.cpp
+++ b/src/cg/cg7800.cpp
@@ -17,14 +17,14 @@ class TQuadro_VJ_recordset : public TQuadro_IVA_recordset
TQuadro_IVA_mask * _mask;
protected:
- virtual void load();
+ virtual void load(const char repid);
public:
- TQuadro_VJ_recordset(TQuadro_IVA_mask * mask, const char* use, const int year) : TQuadro_IVA_recordset(mask, use, year) { load(); }
+ TQuadro_VJ_recordset(TQuadro_IVA_mask * mask, const char* use, const int year, const char repid) : TQuadro_IVA_recordset(mask, use, year, repid) { load(repid); }
virtual ~TQuadro_VJ_recordset() {}
};
-void TQuadro_VJ_recordset::load()
+void TQuadro_VJ_recordset::load(const char repid)
{
clear();
@@ -148,7 +148,7 @@ protected:
virtual void load_sheet(TSheet_field & sf);
public:
- virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year) { return new TQuadro_VJ_recordset(mask(), use, year); }
+ virtual TQuadro_IVA_recordset * app_recordset(const char* use, const int year, const char repid) { return new TQuadro_VJ_recordset(mask(), use, year,repid); }
TQuadro_VJ_app() : TQuadro_IVA_app("Stampa Quadro VJ", "cg7800a") {}
virtual ~TQuadro_VJ_app() {}
diff --git a/src/cg/cg7800a.png b/src/cg/cg7800a.png
index 9f0ff6989..15e96293e 100644
Binary files a/src/cg/cg7800a.png and b/src/cg/cg7800a.png differ
diff --git a/src/cg/cg7900a.png b/src/cg/cg7900a.png
index 339d13403..eb0bf4a07 100644
Binary files a/src/cg/cg7900a.png and b/src/cg/cg7900a.png differ
diff --git a/src/cg/cg7900b.png b/src/cg/cg7900b.png
index d1dffba91..c8eebd8e4 100644
Binary files a/src/cg/cg7900b.png and b/src/cg/cg7900b.png differ
diff --git a/src/cg/cg7a00a.png b/src/cg/cg7a00a.png
index d0e463e28..77baa7b68 100644
Binary files a/src/cg/cg7a00a.png and b/src/cg/cg7a00a.png differ
diff --git a/src/cg/cg7b00a.png b/src/cg/cg7b00a.png
index 6ff9bacc9..20a6833bd 100644
Binary files a/src/cg/cg7b00a.png and b/src/cg/cg7b00a.png differ
diff --git a/src/cg/cg7c00a.png b/src/cg/cg7c00a.png
index 22d636b73..735a72b77 100644
Binary files a/src/cg/cg7c00a.png and b/src/cg/cg7c00a.png differ
diff --git a/src/cg/cg7d00a.png b/src/cg/cg7d00a.png
index 219522f28..cd37514b5 100644
Binary files a/src/cg/cg7d00a.png and b/src/cg/cg7d00a.png differ
diff --git a/src/cg/cg7d00b.png b/src/cg/cg7d00b.png
index 5d8d21360..778e1b3f6 100644
Binary files a/src/cg/cg7d00b.png and b/src/cg/cg7d00b.png differ
diff --git a/src/cg/cg7e00a.png b/src/cg/cg7e00a.png
index 9c7c3ae33..dd8ddd9c0 100644
Binary files a/src/cg/cg7e00a.png and b/src/cg/cg7e00a.png differ
diff --git a/src/cg/cg7f00a.png b/src/cg/cg7f00a.png
index ee9fe57ca..c2fe4506c 100644
Binary files a/src/cg/cg7f00a.png and b/src/cg/cg7f00a.png differ
diff --git a/src/cg/cg7f00b.png b/src/cg/cg7f00b.png
index 8e06d6e82..7cf0d0bc7 100644
Binary files a/src/cg/cg7f00b.png and b/src/cg/cg7f00b.png differ
diff --git a/src/cg/cg7g00a.png b/src/cg/cg7g00a.png
index 2e58a3add..63706921c 100644
Binary files a/src/cg/cg7g00a.png and b/src/cg/cg7g00a.png differ
diff --git a/src/cg/cg7g00b.png b/src/cg/cg7g00b.png
index ebb3d732c..417c8861d 100644
Binary files a/src/cg/cg7g00b.png and b/src/cg/cg7g00b.png differ
diff --git a/src/cg/cg7h00a.png b/src/cg/cg7h00a.png
index 9a2c095ce..ed78787e8 100644
Binary files a/src/cg/cg7h00a.png and b/src/cg/cg7h00a.png differ
diff --git a/src/cg/cg7l00a.png b/src/cg/cg7l00a.png
new file mode 100644
index 000000000..49a62ef16
Binary files /dev/null and b/src/cg/cg7l00a.png differ
diff --git a/src/cg/cgpagame.cpp b/src/cg/cgpagame.cpp
index d98f63f61..30b60b90f 100755
--- a/src/cg/cgpagame.cpp
+++ b/src/cg/cgpagame.cpp
@@ -925,7 +925,11 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
{
TToken_string& tt = rata(row);
TToken_string& ss = (TToken_string&)srate[row];
- lastdate = scad;
+
+ lastdate = scad;
+
+ TDate ddd(scad);
+
int lastscad = oldscad;
// controlla errore sulla data scadenza
if (i > 0)
@@ -939,16 +943,19 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
return P_INIZIO; // _inizio
lastscad = scad_rata(0);
}
- tt.add(scad,3); tt.add(lastscad, 0);
- ss.add(scad,3); ss.add(lastscad, 0);
+ if (a_fine_mese())
+ ddd.set_end_month();
+ tt.add(ddd.string(),3); tt.add(lastscad, 0);
+ ss.add(ddd.string(),3); ss.add(lastscad, 0);
// ricalcola rate successive: se si vuole modificarne solo una
// ci si fotte e si disabilita il ricalcolo
- TDate ddd (lastdate);
for (int j = row+1; j < srate.items(); j++)
{
TToken_string& ttt = rata(j);
TToken_string& sss = (TToken_string&)srate[j];
next_scad(ddd,scad_rata(j), mcomm,j);
+ if (a_fine_mese())
+ ddd.set_end_month();
ttt.add(ddd.string(),3);
sss.add(ddd.string(),3);
need_recalc = true;
@@ -1009,7 +1016,6 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
}
}
}
-
adjust_fixed_scad();
return P_OK;
}
@@ -1480,7 +1486,8 @@ bool TPagamento::read(TTable* t, TTable* r)
// set everything
- _rdiff = t->get_bool("B1");
+ _a_fine_mese = t->get_bool("B2");
+ _rdiff = t->get_bool("B1");
_mcomm = t->get_bool("B0");
_tpr = t->get_int("S3");
_inscad = t->get_char("S1");
@@ -1979,7 +1986,7 @@ TPagamento::TPagamento(const char* codtab, const char* data) :
_code(codtab), _imponval(0.0), _imposval(0.0), _speseval(0.0),
_imponlit(0.0), _imposlit(0.0), _speselit(0.0), _new(false), _mcomm(false), // _cambio(1.0),
_rdiff(false), _tpr(0), _dirty(false), _inited(false), _roundlit(0), _roundval(3), _int_rate(30),
- _def_tpr(1), _def_ulc(""), _was_tpr4(false), _in_valuta(false), _tipocf('C'), _codcf(0L)
+ _def_tpr(1), _def_ulc(""), _was_tpr4(false), _in_valuta(false), _tipocf('C'), _codcf(0L), _a_fine_mese(false)
{
_fixd[0] = _fixd[1] = _fixd[2] = 0;
if (data != nullptr && *data)
diff --git a/src/cg/cgpagame.h b/src/cg/cgpagame.h
index 1576162eb..aed162945 100755
--- a/src/cg/cgpagame.h
+++ b/src/cg/cgpagame.h
@@ -79,6 +79,7 @@ class TPagamento : public TObject
bool _was_tpr4;
bool _in_valuta; // in valuta o non
+ bool _a_fine_mese;
char _tipocf;
long _codcf;
@@ -141,7 +142,8 @@ public:
char inizio_scadenza() const { return _inscad; }
bool mese_commerciale() const { return _mcomm; }
bool rate_differenziate() const { return _rdiff; }
- int tipo_prima_rata() const { return _tpr; }
+ bool a_fine_mese() const { return _a_fine_mese; }
+ int tipo_prima_rata() const { return _tpr; }
int intervallo_rate() const { return _int_rate; }
int round(bool v) const { return v ? _roundval : _roundlit; }
@@ -159,7 +161,8 @@ public:
// con il parametro modificato
void set_intervallo_rate(int i);
void set_mese_commerciale(bool v, int& sscad);
- void set_rate_differenziate(int v);
+ void set_rate_differenziate(int v);
+ void set_a_fine_mese(bool on = true) { _a_fine_mese = on; }
void set_tipo_prima_rata(int v, int sscad = -1);
void set_percrata(int n, real r);
void set_datarata(int n, const TDate & d);
diff --git a/src/cg/cgpim.cpp b/src/cg/cgpim.cpp
index 26532936e..a9b587f82 100755
--- a/src/cg/cgpim.cpp
+++ b/src/cg/cgpim.cpp
@@ -5,6 +5,22 @@
// funzione per classificare i PIM e sommare tutto cio' che contengono
#include "cgpim.h"
+void classify_pim_array(const TRectype& pimr, TArray & imponibili, TArray & imposte, bool tipost, const bool dich)
+{
+ real imp;
+ real iva;
+ tiporec tprec;
+ int last_tprec = -1;
+
+ imponibili.destroy();
+ imposte.destroy();
+ while (classify_pim(pimr, imp, iva, tprec, tipost, last_tprec, dich))
+ {
+ imponibili.add(imp, tprec);
+ imposte.add(iva, tprec);
+ }
+}
+
bool classify_pim(const TRectype& pimr, real& imp, real& iva, tiporec& t, bool tipost, int & last_tiporec, const bool dich)
{
// parse CODTAB of pim record
@@ -24,18 +40,27 @@ bool classify_pim(const TRectype& pimr, real& imp, real& iva, tiporec& t, bool t
// cominciamo cosi'
imp = ZERO; iva = ZERO;
bool found = false;
+
+
+
+#ifdef DBG
+ TString8 codiva = ctab.mid(16, 4);
+ static const char * codici[] = { "22", "22R", nullptr };
+
+ codiva.trim();
+ for (int i = 0; codici[i] != nullptr; i++)
+ if (strcmp(codiva, codici[i]) == 0)
+ int z = 1;
+#endif
- for (int i = last_tiporec + 1; i <= stop_tiporec; i++)
+ for (int i = ++last_tiporec; i <= stop_tiporec; i++)
{
tiporec tocheck = (tiporec)i;
- switch(tocheck)
+ switch (tocheck)
{
case acq_norm:
- //found = tipomov == 2 && tipoiva != "NS";
- found = tipomov == 2;
- found &= (tipodet == 0 /* || tipodet == 1 || tipodet == 3 ||
- tipodet == 5 || tipodet == 9 */);
+ found = tipomov == 2 && tipodet == 0;
if (found)
{
if (tipost) //stampa
@@ -56,8 +81,7 @@ bool classify_pim(const TRectype& pimr, real& imp, real& iva, tiporec& t, bool t
}
break;
case vend_norm:
- //found = tipomov == 1 /* && corrisp == 1 */ && tipoiva != "NS";
- found = tipomov == 1 /* && corrisp == 1 */;
+ found = tipomov == 1;
if (found)
{
imp = pimr.get_real("R0");
@@ -214,7 +238,7 @@ bool classify_pim(const TRectype& pimr, real& imp, real& iva, tiporec& t, bool t
{
imp = pimr.get_real("R0");
iva = pimr.get_real("R1");
- found &= (!imp.is_zero() || !iva.is_zero());
+ found &= /*(*/!imp.is_zero();// || !iva.is_zero());
}
break;
case vend_rimborso:
@@ -252,6 +276,5 @@ bool classify_pim(const TRectype& pimr, real& imp, real& iva, tiporec& t, bool t
break;
}
}
-
return found;
}
diff --git a/src/cg/cgpim.h b/src/cg/cgpim.h
index 6fb8957da..3659fae04 100755
--- a/src/cg/cgpim.h
+++ b/src/cg/cgpim.h
@@ -37,6 +37,21 @@ enum tiporec { acq_norm = 0, vend_norm = 1, // acquisti e vendite normali
// ACHTUNG: se si aggiunge, cambiare sotto!!!
};
+// ---------------------------------------------------------------
+// "classifica" un record progressivo IVA passato per reference
+// mette gli imponibili in imp, l'imposta in iva, nell' elemento corrispondente
+// dell'enum di cui sopra, che dice di che tipo e'
+// l'importo ritornato
+// ---------------------------------------------------------------
+// RITORNA TRUE SE gli array conengono valori
+// ---------------------------------------------------------------
+// mese, anno, attivita' vanno gestiti esternamente. Quando un pim
+// contiene dati che valgono per piu' di un caso, ritorna TRUE
+// finche' i casi possibili non sono esauriti
+// ---------------------------------------------------------------
+
+void classify_pim_array(const TRectype& pimr, TArray & imponibili, TArray & imposte, bool tipost, const bool dich);
+
// ---------------------------------------------------------------
// "classifica" un record progressivo IVA passato per reference
// mette l'imponibile in imp, l'imposta in iva, e in t mette