Patch level : 12.0 862

Files correlati     : cg2.exe
Commento            :
- Corretto calcolo totale contando anche reverse charge
- Aggiunta importazione f1 da 'fatture sdi' se split payment
This commit is contained in:
Simone Palacino 2019-07-31 11:48:16 +02:00
parent 72e3cd23a0
commit 6c730637a1
3 changed files with 54 additions and 21 deletions

View File

@ -2634,8 +2634,10 @@ int TPrimanota_application::save_fppro()
const TDate data_documento(msk.get(F_DATADOC)); const TDate data_documento(msk.get(F_DATADOC));
const TString& numero_docext = msk.get(F_NUMDOCEXT); const TString& numero_docext = msk.get(F_NUMDOCEXT);
real tot_doc = msk.get_real(F_TOTALE); real tot_doc = msk.get_real(F_TOTALE);
const real ritenute = msk.get_real(F_RITFIS); const real ritfis = msk.get_real(F_RITFIS);
tot_doc += ritenute; 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), ';'); TToken_string fppro_keys(msk.get(F_PROKEY), ';');
const TString& keyprginvio = fppro_keys.get(); const TString& keyprginvio = fppro_keys.get();
const TString& keyheaderfatt = fppro_keys.get(); const TString& keyheaderfatt = fppro_keys.get();

View File

@ -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<TPro_msk>& msk) bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
{ {
TSheet_field& sf = cg_msk.sfield(FS_RATESHEET); TSheet_field& sf = cg_msk.sfield(FS_RATESHEET);
int items = sf.items(); const int items = sf.items();
const vector<TPro_msk::scadenza_s>& righe = msk->get_scadenze(); const vector<TPro_msk::scadenza_s>& righe = msk->get_scadenze();
int i = 0; int i = 0;
for (auto it = righe.begin(); it != righe.end(); ++it, ++i) for (auto it = righe.begin(); it != righe.end(); ++it, ++i)
@ -3968,12 +3968,14 @@ void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk
if(totale == ZERO) if(totale == ZERO)
totale = app().calcola_imp(); totale = app().calcola_imp();
const real rit = msk->get_ritenute(); const real rit = msk->get_ritenute();
if(rit != ZERO) if (rit != ZERO)
{ {
totale -= rit; totale -= rit;
cg_msk.set(F_RITFIS, rit); cg_msk.set(F_RITFIS, rit);
app().add_cgs_ritenute('F'); app().add_cgs_ritenute('F');
} }
else if (msk->is_doc_split())
totale = msk->get_tot_imp_riva();
cg_msk.set(F_TOTALE, totale); 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; 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) void TPro_msk::set_righeiva(const char* fpprokeys)
{ {
TToken_string keys(fpprokeys, ';'); TToken_string keys(fpprokeys, ';');
TString query; 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) << "';"; "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); fp_db().sq_set_exec(query, false);
for(bool ok = fp_db().sq_next(); ok; ok = fp_db().sq_next()) 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")), add_rigaiva(real(fp_db().sq_get("IMPONIBILE")),
real(fp_db().sq_get("IMPOSTA")), real(fp_db().sq_get("IMPOSTA")),
real(fp_db().sq_get("ALIQUOTA")), 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); 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) void TPro_msk::add_scad(const TDate& date, const real& importo)

View File

@ -443,6 +443,7 @@ public:
real imposta; real imposta;
real aliquota; real aliquota;
TString4 natura; TString4 natura;
char esigibilita;
}; };
struct scadenza_s struct scadenza_s
{ {
@ -450,34 +451,40 @@ public:
real importo; real importo;
}; };
bool should_bring_back() const { return _riporta; }
bool is_doc_split();
void set_righeiva(const char* fpprokeys); void set_righeiva(const char* fpprokeys);
void set_scadenze(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); 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; } TString get_numdoc() const { return _numero; }
TDate get_datadoc() const { return _datadoc; } TDate get_datadoc() const { return _datadoc; }
real get_totdoc() const { return _totdoc; } real get_totdoc() const { return _totdoc; }
real get_ritenute() { return _ritenute; } real get_ritenute() const { return _ritenute; }
TProtocollo& get_protocollo() { return _protfppro; } TString get_fpprokeys() const { return _fpprokeys; }
TString get_fpprokeys() const { return _fpprokeys; } TString get_codforn() const { return _codforn; }
TString get_codforn() const { return _codforn; } TString get_piva() const { return _piva; }
const vector<riga_iva_s>& get_righeiva() const { return _righe_iva; }
TProtocollo& get_protocollo() { return _protfppro; }
vector<scadenza_s>& get_scadenze() { return _scadenze; }
real get_tot_imp_riva();
TString get_piva() const { return _piva; }
const vector<riga_iva_s>& get_righeiva() { return _righe_iva; } void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib);
vector<scadenza_s>& get_scadenze() { return _scadenze; }
void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura);
void add_scad(const TDate& date, const real& importo); 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& codforn, const TString& date);
static TString& query_fppro(const TString& stato_piva, const TString& piva, 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_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 TString& query_string();
static void abilita_piva(TMask* msk); static void abilita_piva(TMask* msk);
//bool is_fp();
// Carica documenti FPPRO sulla maschera // Carica documenti FPPRO sulla maschera
static bool load_fppro_mask(TMask* msk, KEY k = 32); static bool load_fppro_mask(TMask* msk, KEY k = 32);
TPro_msk() = delete; TPro_msk() = delete;
TPro_msk(TMask& cg_msk); TPro_msk(TMask& cg_msk);
}; };