diff --git a/src/cg/cg2100.cpp b/src/cg/cg2100.cpp index 1bcaa5039..208a91553 100755 --- a/src/cg/cg2100.cpp +++ b/src/cg/cg2100.cpp @@ -2634,8 +2634,10 @@ int TPrimanota_application::save_fppro() const TDate data_documento(msk.get(F_DATADOC)); const TString& numero_docext = msk.get(F_NUMDOCEXT); real tot_doc = msk.get_real(F_TOTALE); - const real ritenute = msk.get_real(F_RITFIS); - tot_doc += ritenute; + const real ritfis = msk.get_real(F_RITFIS); + const real ritsoc = msk.get_real(F_RITSOC); + const real revcharge = msk.get_real(F_REVCHARGE); + tot_doc = tot_doc + ritfis + ritsoc + revcharge; TToken_string fppro_keys(msk.get(F_PROKEY), ';'); const TString& keyprginvio = fppro_keys.get(); const TString& keyheaderfatt = fppro_keys.get(); diff --git a/src/cg/cg2102.cpp b/src/cg/cg2102.cpp index e82fb6745..3f89df35f 100755 --- a/src/cg/cg2102.cpp +++ b/src/cg/cg2102.cpp @@ -3897,7 +3897,7 @@ void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const shared_ptr< bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr& msk) { TSheet_field& sf = cg_msk.sfield(FS_RATESHEET); - int items = sf.items(); + const int items = sf.items(); const vector& righe = msk->get_scadenze(); int i = 0; for (auto it = righe.begin(); it != righe.end(); ++it, ++i) @@ -3968,12 +3968,14 @@ void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptrget_ritenute(); - if(rit != ZERO) + if (rit != ZERO) { totale -= rit; cg_msk.set(F_RITFIS, rit); app().add_cgs_ritenute('F'); } + else if (msk->is_doc_split()) + totale = msk->get_tot_imp_riva(); cg_msk.set(F_TOTALE, totale); } @@ -4251,11 +4253,21 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) return true; } +bool TPro_msk::is_doc_split() +{ + for(riga_iva_s const& riga : _righe_iva) + { + if (riga.esigibilita == 'S') + return true; + } + return false; +} + void TPro_msk::set_righeiva(const char* fpprokeys) { TToken_string keys(fpprokeys, ';'); TString query; - query << "SELECT PL_ALIQUOTAIVA AS ALIQUOTA, PL_NATURA AS NATURA, PL_IMPONIBILE AS IMPONIBILE, PL_IMPOSTA AS IMPOSTA \nFROM PAA2200F\n" << + query << "SELECT PL_ALIQUOTAIVA AS ALIQUOTA, PL_NATURA AS NATURA, PL_IMPONIBILE AS IMPONIBILE, PL_IMPOSTA AS IMPOSTA, PL_ESIGIVA AS ESIGIBILITA\nFROM PAA2200F\n" << "WHERE PL_KEYPRGINVIO = '" << keys.get(0) << "' AND PL_KEYHEADERFATT = '" << keys.get(1) << "' AND PL_KEYBODYFATT = '" << keys.get(2) << "';"; fp_db().sq_set_exec(query, false); for(bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) @@ -4263,7 +4275,8 @@ void TPro_msk::set_righeiva(const char* fpprokeys) add_rigaiva(real(fp_db().sq_get("IMPONIBILE")), real(fp_db().sq_get("IMPOSTA")), real(fp_db().sq_get("ALIQUOTA")), - fp_db().sq_get("NATURA")); + fp_db().sq_get("NATURA"), + fp_db().sq_get("ESIGIBILITA")[0]); } } @@ -4293,9 +4306,20 @@ void TPro_msk::set_doc(const char* numero, const char* datadoc, const char* totd set_scadenze(fpprokeys); } -void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura) +real TPro_msk::get_tot_imp_riva() { - _righe_iva.insert(_righe_iva.end(), { imponibile, imposta, aliquota, natura }); + real tot = ZERO; + for(riga_iva_s const& riga : _righe_iva) + { + if (riga.imposta > ZERO) + tot += riga.imponibile; + } + return tot; +} + +void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib) +{ + _righe_iva.insert(_righe_iva.end(), { imponibile, imposta, aliquota, natura, esigib }); } void TPro_msk::add_scad(const TDate& date, const real& importo) diff --git a/src/cg/cg2102.h b/src/cg/cg2102.h index c3007a273..3839dd387 100755 --- a/src/cg/cg2102.h +++ b/src/cg/cg2102.h @@ -443,6 +443,7 @@ public: real imposta; real aliquota; TString4 natura; + char esigibilita; }; struct scadenza_s { @@ -450,34 +451,40 @@ public: real importo; }; + bool should_bring_back() const { return _riporta; } + bool is_doc_split(); + void set_righeiva(const char* fpprokeys); void set_scadenze(const char* fpprokeys); void set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* codforn, const char* piva); - TString get_numdoc() const { return _numero; } - TDate get_datadoc() const { return _datadoc; } - real get_totdoc() const { return _totdoc; } - real get_ritenute() { return _ritenute; } - TProtocollo& get_protocollo() { return _protfppro; } - TString get_fpprokeys() const { return _fpprokeys; } - TString get_codforn() const { return _codforn; } + TString get_numdoc() const { return _numero; } + TDate get_datadoc() const { return _datadoc; } + real get_totdoc() const { return _totdoc; } + real get_ritenute() const { return _ritenute; } + TString get_fpprokeys() const { return _fpprokeys; } + TString get_codforn() const { return _codforn; } + TString get_piva() const { return _piva; } + const vector& get_righeiva() const { return _righe_iva; } + TProtocollo& get_protocollo() { return _protfppro; } + vector& get_scadenze() { return _scadenze; } + real get_tot_imp_riva(); - TString get_piva() const { return _piva; } - const vector& get_righeiva() { return _righe_iva; } - vector& get_scadenze() { return _scadenze; } - void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura); + + void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib); void add_scad(const TDate& date, const real& importo); - bool should_bring_back() const { return _riporta; } static TString& query_fppro(const TString& codforn, const TString& date); static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date); static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false); static TString& query_string(); + static void abilita_piva(TMask* msk); - //bool is_fp(); + // Carica documenti FPPRO sulla maschera static bool load_fppro_mask(TMask* msk, KEY k = 32); + TPro_msk() = delete; TPro_msk(TMask& cg_msk); };