diff --git a/cd/test/fp0716.txt b/cd/test/fp0716.txt
new file mode 100644
index 000000000..c3374de69
--- /dev/null
+++ b/cd/test/fp0716.txt
@@ -0,0 +1,4 @@
+fp0.exe
+fp0400a.msk
+fp0500a.msk
+fpmenu.men
diff --git a/cd/test/fp0716a.ini b/cd/test/fp0716a.ini
new file mode 100644
index 000000000..b6e13531f
--- /dev/null
+++ b/cd/test/fp0716a.ini
@@ -0,0 +1,22 @@
+[Main]
+Demo=0
+
+[fp1]
+File(0) = fp0.exe|X
+File(4) = fp0400a.msk|X
+File(5) = fp0500a.msk|X
+File(6) = fpmenu.men|X
+Patch = 0716
+Versione = 21511200
+
+[fp]
+Data = 01-03-2019
+Descrizione = Fattura Elettronica
+Dischi = 1
+Moduli = cg,ve
+OEM =
+Patch = 716
+PostProcess =
+PreProcess =
+Versione = 21511200
+
diff --git a/cd/test/fp0716a1.zip b/cd/test/fp0716a1.zip
new file mode 100644
index 000000000..8ad0b0213
Binary files /dev/null and b/cd/test/fp0716a1.zip differ
diff --git a/src/cg/cg0800.cpp b/src/cg/cg0800.cpp
index 7aebf1db4..8b2a68824 100644
--- a/src/cg/cg0800.cpp
+++ b/src/cg/cg0800.cpp
@@ -79,6 +79,7 @@ void TRiepilogoIVA_app::main_loop()
{
damese = 1;
amese = 12;
+ recset->set_annuale(true);
}
const TDate da(1, damese, anno);
diff --git a/src/cg/cg4b00.cpp b/src/cg/cg4b00.cpp
index d8ee42f44..f14980be7 100644
--- a/src/cg/cg4b00.cpp
+++ b/src/cg/cg4b00.cpp
@@ -78,17 +78,19 @@ bool TRiepilogoIVA_mask::on_field_event(TOperable_field& o, TField_event e, long
class TRiepilogoIVAcompetenza_recordset : public TRiepilogoIVA_recordset
{
- bool _senzacompetenza;
+ bool _competenzaperiodo;
bool _competenzadiversa;
bool _registrazioneritardo;
public:
- virtual bool set_senzacompetenzaIVA(bool on) { _senzacompetenza = on; return on; }
+ virtual bool set_competenzaperiodoIVA(bool on) { _competenzaperiodo = on; return on; }
virtual bool set_competenzadiversaIVA(bool on) { _competenzadiversa = on; return on; }
virtual bool set_registrazioneIVAritardo(bool on) { return _registrazioneritardo = on; return on; }
- virtual bool senzacompetenzaIVA() { return _senzacompetenza; }
- virtual bool competenzadiversaIVA() { return _competenzadiversa; }
- virtual bool registrazioneIVAritardo() { return _registrazioneritardo; }
+ virtual bool competenzaperiodoIVA() const { return _competenzaperiodo; }
+ virtual bool competenzadiversaIVA() const { return _competenzadiversa; }
+ virtual bool registrazioneIVAritardo() const { return _registrazioneritardo; }
+ virtual bool is_competenza() const { return true; }
+
TRiepilogoIVAcompetenza_recordset() {}
virtual ~TRiepilogoIVAcompetenza_recordset() { }
@@ -120,16 +122,18 @@ void TRiepilogoIVA_app::main_loop()
if (recset != NULL)
{
recset->freeze();
- recset->set_senzacompetenzaIVA(m.get_bool(F_NOCOMP));
+ recset->set_competenzaperiodoIVA(m.get_bool(F_COMPUG));
recset->set_competenzadiversaIVA(m.get_bool(F_COMPDIV));
recset->set_registrazioneIVAritardo(m.get_bool(F_REGRIT));
recset->set_from(m.get_date(F_DADATA));
recset->set_to(m.get_date(F_ADATA));
+ recset->set_annuale((m.get_date(F_DADATA).month() == 1) && (m.get_date(F_ADATA).month() == 12)
+ );
recset->set_from_conto(m.get_long(F_DAGRUPPO), m.get_long(F_DACONTO), m.get_long(F_DASOTTOC));
if (m.get_long(F_DAGRUPPO) != 0)
recset->set_to_conto(m.get_long(F_AGRUPPO), m.get_long(F_ACONTO), m.get_long(F_ASOTTOC));
- recset->set_var("#NOCOMP", m.get_bool(F_NOCOMP), true);
+ recset->set_var("#COMPUG", m.get_bool(F_COMPUG), true);
recset->set_var("#COMPDIV", m.get_bool(F_COMPDIV), true);
recset->set_var("#REGRIT", m.get_bool(F_REGRIT), true);
recset->set_var("#TODATE", m.get_date(F_ADATA), true);
diff --git a/src/cg/cg4b00a.h b/src/cg/cg4b00a.h
index 192a7a71b..c807659a0 100644
--- a/src/cg/cg4b00a.h
+++ b/src/cg/cg4b00a.h
@@ -10,7 +10,7 @@
#define F_ASOTTOC 110
#define F_DADESCR 111
#define F_ADESCR 112
-#define F_NOCOMP 113
+#define F_COMPUG 113
#define F_COMPDIV 114
#define F_REGRIT 115
diff --git a/src/cg/cg4b00a.rep b/src/cg/cg4b00a.rep
index 38d79b0be..3eb4ec099 100644
--- a/src/cg/cg4b00a.rep
+++ b/src/cg/cg4b00a.rep
@@ -21,78 +21,105 @@
-
+
#FROMDATE
-
+
-
+
#TODATE
-
+
-
+
- #COMPIVA
-
-
-
-
-
+ #THIS
+#COMPUG @
+0
+=
+IF
+HIDE
+ELSE
+SHOW
+THEN
-
+
+
+ #THIS
+#COMPDIV @
+0
+=
+IF
+HIDE
+ELSE
+SHOW
+THEN
+
+
+
+ #THIS
+#REGRIT @
+0
+=
+IF
+HIDE
+ELSE
+SHOW
+THEN
+
+
-
+
#DAGRUPPO
-
+
#DACONTO
-
+
#DASOTTOCONTO
-
+
-
+
#AGRUPPO
-
+
#ACONTO
-
+
#ASOTTOCONTO
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/cg/cg4b00a.uml b/src/cg/cg4b00a.uml
index e267cdf68..7e29a7e83 100644
--- a/src/cg/cg4b00a.uml
+++ b/src/cg/cg4b00a.uml
@@ -176,14 +176,14 @@ BEGIN
CHECKTYPE NORMAL
END
-BOOLEAN F_NOCOMP
+BOOLEAN F_COMPUG
BEGIN
- PROMPT 2 15 "Movimenti senza competenza diversa"
+ PROMPT 2 15 "Movimenti con competenza uguale alla registrazione"
END
BOOLEAN F_COMPDIV
BEGIN
- PROMPT 2 17 "Movimenti con competenza nel periodo"
+ PROMPT 2 17 "Movimenti con competenza diversa dalla registrazione"
END
BOOLEAN F_REGRIT
diff --git a/src/cg/cglib05.cpp b/src/cg/cglib05.cpp
index 8e249deab..77b129e00 100644
--- a/src/cg/cglib05.cpp
+++ b/src/cg/cglib05.cpp
@@ -1,4 +1,16 @@
#include "cglib05.h"
+#include
+
+enum tiporeg {
+ vendita = 1,
+ acquisto = 2,
+ riepilogativo = 3,
+ incassi = 4,
+ giornale = 5,
+ sociale = 6,
+ cespiti = 7
+};
+
///////////////////////////////////////////////////////////
// TRiepilogoIVA_recordset
///////////////////////////////////////////////////////////
@@ -51,7 +63,7 @@ void TRiepilogoIVA_recordset::requery()
TAssoc_array work_array;
TString16 reg_fieldname; reg_fieldname << LF_MOV << "." << MOV_REG;
TString16 datareg_fieldname; datareg_fieldname << LF_MOV << "." << MOV_DATAREG;
- TString16 datacomp_fieldname; datacomp_fieldname << LF_MOV << "." << MOV_MESELIQ;
+ TString16 datadoc_fieldname; datadoc_fieldname << LF_MOV << "." << MOV_DATADOC;
TString16 meseliq_fieldname; meseliq_fieldname << LF_MOV << "." << MOV_MESELIQ;
int p = wrk.find("FROMDATE");
@@ -64,7 +76,7 @@ void TRiepilogoIVA_recordset::requery()
if (p > 0)
{
query << wrk.left(p);
- if (senzacompetenzaIVA() && !competenzadiversaIVA() && !registrazioneIVAritardo())
+ if (competenzaperiodoIVA() && !competenzadiversaIVA() && !registrazioneIVAritardo())
query << _to_date.string();
else
{
@@ -93,31 +105,57 @@ void TRiepilogoIVA_recordset::requery()
((conto >= _from_conto) && (conto <= _to_conto)) &&
((sottoconto >= _from_sottoconto) && (conto <= _to_sottoconto)))
{
- TRegistro codreg(recset.get(reg_fieldname).as_string());
-
- TipoIVA t = codreg.iva();
-
- // filtro competenza
+ TRegistro reg(recset.get(reg_fieldname).as_string());
+ TipoIVA t = reg.iva();
TDate data = recset.get(datareg_fieldname).as_date();
+ const int meseliq = recset.get(meseliq_fieldname).as_int();
+ const TDate datadoc = recset.get(datadoc_fieldname).as_date();
+ const TipoIVA tipo = reg.iva(); // 1=Vendite; 2=Acquisti
+ const bool fatt_rit_2018 = recset.get(TOSTRING(LF_MOV) "." MOV_DATAREG).as_bool() && (data.year() >= 2018);
+ const int year_diff = data.year() - datadoc.year();
+ const bool fattritind = ((tipo == iva_acquisti) && fatt_rit_2018) && ((year_diff > 2) || ((year_diff >= 1) && data.month() >= 5));
+ const bool fattrit = ((tipo == iva_acquisti) && !fattritind && fatt_rit_2018) && (year_diff >= 1);
- if (competenzadiversaIVA())
+ if (is_competenza())
{
- const int meseliq = recset.get(meseliq_fieldname).as_int();
-
if (meseliq != 0)
{
data.set_month(meseliq);
- data.set_end_month();
- if (data < _from_date || data > _to_date)
+ data.set_end_month();
+ if (competenzadiversaIVA())
+ {
+ if (data < _from_date || data > _to_date)
+ continue;
+ }
+ else
+ continue;
+
+ }
+ if (fattrit)
+ {
+ if (registrazioneIVAritardo())
+ {
+ if (!annuale() || _to_date.year() != datadoc.year())
+ continue;
+ }
+ else
continue;
}
+ else
+ if (competenzaperiodoIVA() && (data < _from_date || data > _to_date))
+ continue;
}
- if (registrazioneIVAritardo())
+ else
{
- TDate datacomp = recset.get(datacomp_fieldname).as_date();
+ if (fattrit)
+ {
+ if (!annuale() || _to_date.year() != datadoc.year())
+ continue;
+ }
+ else
+ if (data < _from_date || data > _to_date)
+ continue;
}
- if (senzacompetenzaIVA() && (data < _from_date || data > _to_date))
- continue;
if (rec == NULL)
work_array.add(cod, rec = new TRiepilogoIVA_record(cod));
@@ -131,7 +169,7 @@ void TRiepilogoIVA_recordset::requery()
else
if (t == iva_vendite)
{
- if (codreg.corrispettivi())
+ if (reg.corrispettivi())
{
real & r = rec->impcorr();
r += recset.get(RMI_IMPONIBILE).as_real();
@@ -275,9 +313,9 @@ const TVariant& TRiepilogoIVA_recordset::get(unsigned int column) const
}
TRiepilogoIVA_recordset::TRiepilogoIVA_recordset() : TRecordset(), _pos(0), _from_date(botime), _to_date(eotime),
- _from_gruppo(0), _from_conto(0), _from_sottoconto(0L),
- _to_gruppo(999), _to_conto(999), _to_sottoconto(999999L),
- _freezed(false)
+_from_gruppo(0), _from_conto(0), _from_sottoconto(0L),
+_to_gruppo(999), _to_conto(999), _to_sottoconto(999999L), _freezed(false), _annuale(false)
+
{
add_field(_alfafld, 101, 4, COD);
add_field(_alfafld, 102, 50, DESC);
diff --git a/src/cg/cglib05.h b/src/cg/cglib05.h
index 6db91dcc9..6447a5231 100644
--- a/src/cg/cglib05.h
+++ b/src/cg/cglib05.h
@@ -32,6 +32,7 @@ class TRiepilogoIVA_recordset : public TRecordset
long _to_sottoconto;
TArray _info;
bool _freezed;
+ bool _annuale;
protected:
virtual const TVariant& get_field(int num, const char* field) const;
@@ -56,12 +57,15 @@ public:
void set_from_conto(int gruppo, int conto, long sottoconto) { _from_gruppo = gruppo; _from_conto = conto; _from_sottoconto = sottoconto; }
void set_to_conto(int gruppo, int conto, long sottoconto) { _to_gruppo = gruppo; _to_conto = conto; _to_sottoconto = sottoconto; }
- virtual bool set_senzacompetenzaIVA(bool on) { return true; }
+ virtual bool set_competenzaperiodoIVA(bool on) { return true; }
virtual bool set_competenzadiversaIVA(bool on) { return false; }
virtual bool set_registrazioneIVAritardo(bool on) { return false; }
- virtual bool senzacompetenzaIVA() { return true; }
- virtual bool competenzadiversaIVA() { return false; }
- virtual bool registrazioneIVAritardo() { return false; }
+ virtual bool set_annuale(bool on) { _annuale = on; return _annuale; }
+ virtual bool competenzaperiodoIVA() const { return true; }
+ virtual bool competenzadiversaIVA() const { return false; }
+ virtual bool registrazioneIVAritardo() const { return true; }
+ virtual bool annuale() const { return _annuale; }
+ virtual bool is_competenza() const { return false; }
TRiepilogoIVA_recordset();
virtual ~TRiepilogoIVA_recordset() { }