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 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();

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)
{
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();
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_ptr<TPro_msk
if(totale == ZERO)
totale = app().calcola_imp();
const real rit = msk->get_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)

View File

@ -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<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; }
vector<scadenza_s>& 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);
};