diff --git a/src/ve/velib.h b/src/ve/velib.h index 715927662..9fdc20911 100755 --- a/src/ve/velib.h +++ b/src/ve/velib.h @@ -748,8 +748,9 @@ class TDocumento : public TMultiple_rectype // velib03 TString8 _old_agente; // Agente originale TString8 _old_agente1; // Secondo Agente originale - TRiga_documento * _sconto; // Riga per lo sconto di testata + TRiga_documento * _sconto; // Riga per lo sconto di testata TRiga_documento * _esenzione; // Riga per l' esenzione iva + TRiga_documento * _valfisc; // Riga di valenza fiscale per fatture 2019+ bool _dirty_deny; @@ -820,7 +821,7 @@ public: void sort_rows(const char * key); int physical_rows() const { return body().rows(); } - virtual int rows() const { return physical_rows() + (ha_riga_sconto() ? 1 : 0) + (ha_riga_esenzione() ? 1 : 0); } + virtual int rows() const { return physical_rows() + (ha_riga_sconto() ? 1 : 0) + (ha_riga_esenzione() ? 1 : 0) + (ha_riga_valfisc() ? 1 : 0); } const TRiga_documento& operator[](int index) const { return (const TRiga_documento&)((TDocumento *)this)->row(index); } TRiga_documento& operator[](int index) { return (TRiga_documento&)row(index); } @@ -890,9 +891,11 @@ public: void set_fields(TAuto_variable_rectype & rec); void update_esenzione(); void set_riga_esenzione(); + void set_riga_valfisc(); const TRiga_documento& get_riga_esenzione() const { return *_esenzione; } bool ha_riga_sconto() const { return _sconto != NULL; } bool ha_riga_esenzione() const { return _esenzione != NULL; } + bool ha_riga_valfisc() const { return _valfisc != NULL; } void iva_esente(TString & codiva_es) const; real spese_incasso(real &imp, int ndec, TTipo_importo netto = _lordo) const ; diff --git a/src/ve/velib03.cpp b/src/ve/velib03.cpp index 682958339..94701edbb 100755 --- a/src/ve/velib03.cpp +++ b/src/ve/velib03.cpp @@ -250,7 +250,7 @@ void TDocumento::init() _codcf = new TRecfield(*this, DOC_CODCF); _cod_occas = new TRecfield(*this, DOC_OCFPI); - _sconto = _esenzione = NULL; + _sconto = _esenzione = _valfisc = NULL; _stato_originale = ' '; _dirty_deny = false; @@ -306,6 +306,7 @@ TDocumento::~TDocumento() if (_sconto != NULL) delete _sconto; if (_esenzione != NULL) delete _esenzione; + if (_valfisc != NULL) delete _valfisc; } const TString& TDocumento::codiva_spese() const @@ -819,8 +820,11 @@ void TDocumento::on_read(int err, word lockop) _occas.zero(); set_riga_sconto(); - if (is_fattura()) - set_riga_esenzione(); + if (is_fattura()) + { + set_riga_esenzione(); + set_riga_valfisc(); + } _stato_originale = stato(); #ifdef LIVE_STATISTICS @@ -1004,15 +1008,15 @@ void TDocumento::set_riga_esenzione() TString16 v_data_esenzione; TString16 n_registrazione; TString16 n_data_registrazione; - bool multiPlaf = c.use_lettere() && get("PLAFOND").full(); // Gestione multiplafond su documento - if (codes.codice().full() && !multiPlaf) + const bool multi_plaf = c.use_lettere() && get("PLAFOND").full(); // Gestione multiplafond su documento + if (codes.codice().full() && !multi_plaf) { get_protocolli_esenzione(v_esenzione, v_data_esenzione, n_registrazione, n_data_registrazione); } // Tradotto: se ha il cod. esenzione AND (i protocolli pieni OR multiplaf) bool esente = codes.tipo().not_empty() && ((v_esenzione.not_empty() && v_data_esenzione.not_empty() && n_registrazione.not_empty() && - n_data_registrazione.not_empty()) || multiPlaf); + n_data_registrazione.not_empty()) || multi_plaf); if (esente) { esente = false; @@ -1054,7 +1058,7 @@ void TDocumento::set_riga_esenzione() _esenzione = new TRiga_documento(this, _tipo_riga_es); TString d = _des_esenz; - if(multiPlaf) + if(multi_plaf) { d << " come dalle vostre dichiarazioni:\n"; TToken_string lePlafs(get("PLAFOND"), ','); @@ -1076,6 +1080,19 @@ void TDocumento::set_riga_esenzione() _esenzione->set_descr(d); } } + +void TDocumento::set_riga_valfisc() +{ + static TDate anno_fatt_elett = TDate(01, 01, 2019); + if(is_fattura() && tipo().tipo_doc_sdi().full() && data() >= anno_fatt_elett) + { + if (_valfisc == nullptr) + _valfisc = new TRiga_documento(this, "05"); + + // Uno \n all'inizio per staccarla dal resto, ATTENZIONE!!! Senza lo spazio iniziale scrive solo una parte di questo messaggio! + _valfisc->set_descr(" \nStampa priva di valenza giuridico-fiscale ai sensi dell'art.21 DPR 633/72, salvo per i soggetti non titolari di partita iva e/o non residenti ai sensi del comma 909 art.1 L.205/2017."); + } +} void TDocumento::dirty_fields() { @@ -1932,15 +1949,31 @@ TRiga_documento & TDocumento::row(int index) r = &((TRiga_documento &) b.row(index, FALSE)); } else - { - CHECKD((index == nrows + 1 && (_sconto != NULL || _esenzione != NULL)) || (index == nrows + 2 && _sconto != NULL && _esenzione != NULL), - "Riga documento non esistente ", index); - if (index == nrows + 1) - { - r = _sconto != NULL ? _sconto : _esenzione; - } else - if (index == nrows + 2) - r = _esenzione; + { + + CHECKD(index <= rows(), "Riga documento non esistente ", index); + + switch (index - nrows) + { + case 1: + if (_sconto != NULL) + { + r = _sconto; + break; + } + case 2: + if (_esenzione != NULL) + { + r = _esenzione; + break; + } + case 3: + { + r = _valfisc; + break; + } + } + } return *r; } @@ -2729,8 +2762,11 @@ TDocumento& TDocumento::copy(const TDocumento & d) r.set_fields(((TAuto_variable_rectype &)d[i])); } set_riga_sconto(); - if (is_fattura()) - set_riga_esenzione(); + if (is_fattura()) + { + set_riga_esenzione(); + set_riga_valfisc(); + } _occas = d.occas(); return *this; }