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() { }