Patch level : 12.0 1230
Files correlati : ve0.exe ve1.exe ve5.exe ve6.exe lv2.exe lv3.exe Commento : Nuova gestione dei bolli esenti
This commit is contained in:
parent
a4d69d7754
commit
b6a2fa1021
@ -70,14 +70,14 @@ END
|
||||
|
||||
CURRENCY F_SPADD 11
|
||||
BEGIN
|
||||
PROMPT 2 12 "Spese forfettarie da addebitare "
|
||||
PROMPT 2 12 "Spese forfettarie da addebitare "
|
||||
FIELD SPADD
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
CURRENCY F_MAXADD 15
|
||||
BEGIN
|
||||
PROMPT 2 14 "Importo massimo per addebito "
|
||||
PROMPT 2 14 "Importo massimo per addebito "
|
||||
FIELD MAXADD
|
||||
PICTURE "."
|
||||
END
|
||||
@ -199,6 +199,13 @@ FIELD IMPMINBOLLI
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
DATE F_DATANEWBOLLI
|
||||
BEGIN
|
||||
PROMPT 2 14 "Data inizio nuovi bolli esenti "
|
||||
FIELD DATANEWBOLLI
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Automatismi" 1 1 60 14
|
||||
|
@ -172,6 +172,7 @@
|
||||
#define F_MAXADD 145
|
||||
#define F_IMPMINEFF 146
|
||||
#define F_SEPARA_ESENZ 147
|
||||
#define F_DATANEWBOLLI 148
|
||||
|
||||
// Campi per ve0200g.uml
|
||||
#define F_EXPLODEDB 101
|
||||
|
@ -874,7 +874,7 @@ public:
|
||||
long renum_ndoc(long numdoc = 0);
|
||||
virtual bool renum() { return renum_ndoc() > 0;}
|
||||
const TString& codiva_spese() const ;
|
||||
const TString& codiva_bolli() const ;
|
||||
const TString& codiva_bolli();
|
||||
|
||||
TCodgiac_livelli& livelli() const ;
|
||||
void dirty_fields();
|
||||
@ -982,8 +982,12 @@ public:
|
||||
real spese_incasso(real &imp, int ndec, TTipo_importo netto = _lordo) const ;
|
||||
real imponibile_bolli_esenti() const;
|
||||
bool bolli_esenti_dovuti() const;
|
||||
real bolli(real & imp, int ndec, TTipo_importo netto = _lordo) const ;
|
||||
|
||||
const TDate data_nuovo_calcolo_esenti() const;
|
||||
bool nuovo_calcolo_esenti() const;
|
||||
const char * codiva_bolli_esenti();
|
||||
real bolli_esenti(int ndec, TTipo_importo netto = _lordo);
|
||||
real bolli_incasso(real & imp, int ndec, TTipo_importo netto = _lordo);
|
||||
real bolli(real & imp, int ndec, TTipo_importo netto = _lordo) { return bolli_esenti(ndec, netto) + bolli_incasso(imp, ndec, netto); }
|
||||
real imponibile(bool spese = false, int ndec = AUTO_DECIMALS) const;
|
||||
real imposta(bool spese = false, int ndec = AUTO_DECIMALS) const;
|
||||
real totale_doc() const;
|
||||
|
@ -234,6 +234,7 @@ TString4 TDocumento::_codiva_spese;
|
||||
TString4 TDocumento::_codiva_bolli;
|
||||
short TDocumento::_has_mag = 3;
|
||||
short TDocumento::_has_provv = 3;
|
||||
|
||||
#ifdef LIVE_STATISTICS
|
||||
short TDocumento::_has_stat_ven = 3;
|
||||
#endif
|
||||
@ -316,8 +317,11 @@ TDocumento::~TDocumento()
|
||||
const TString& TDocumento::codiva_spese() const
|
||||
{ ((TDocumento *)this)->test_firm(); return _codiva_spese;}
|
||||
|
||||
const TString& TDocumento::codiva_bolli() const
|
||||
{ ((TDocumento *)this)->test_firm(); return _codiva_bolli;}
|
||||
const TString& TDocumento::codiva_bolli()
|
||||
{
|
||||
test_firm();
|
||||
return _codiva_bolli;
|
||||
}
|
||||
|
||||
void TDocumento::check_modules()
|
||||
{
|
||||
@ -484,13 +488,78 @@ bool TDocumento::bolli_esenti_dovuti() const
|
||||
return imponibile_esente > ZERO && impmin_bolli > ZERO && imponibile_esente >= impmin_bolli;
|
||||
}
|
||||
|
||||
real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const
|
||||
const TDate TDocumento::data_nuovo_calcolo_esenti() const
|
||||
{
|
||||
TDate d = ini_get_date(CONFIG_STUDIO, "ve", "DATANEWBOLLI");
|
||||
|
||||
if (!d.ok())
|
||||
d = eotime;
|
||||
return d;
|
||||
}
|
||||
|
||||
bool TDocumento::nuovo_calcolo_esenti() const
|
||||
{
|
||||
const TDate data_nuovo_calcolo = data_nuovo_calcolo_esenti();
|
||||
|
||||
return data_nuovo_calcolo && data_nuovo_calcolo <= get_date(DOC_DATADOC);
|
||||
}
|
||||
|
||||
const char * TDocumento::codiva_bolli_esenti()
|
||||
{
|
||||
TString & cod = get_tmp_string();
|
||||
|
||||
if (nuovo_calcolo_esenti())
|
||||
{
|
||||
TAssoc_array& table = ((TDocumento*)this)->tabella_iva();
|
||||
real imponibile_max = ZERO;
|
||||
|
||||
table.restart();
|
||||
for (TRiepilogo_iva* riga = (TRiepilogo_iva*)table.get(); riga != NULL; riga = (TRiepilogo_iva*)table.get())
|
||||
{
|
||||
const TCodiceIVA & codiva = riga->cod_iva();
|
||||
|
||||
if (codiva.tipo().not_empty() && codiva.tipo() != REVERSE_CHARGE && !codiva.escluso_esenti())
|
||||
{
|
||||
if (riga->imponibile() > imponibile_max)
|
||||
{
|
||||
cod = codiva.codice();
|
||||
imponibile_max = riga->imponibile();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
cod = ini_get_string(CONFIG_DITTA, "ve", "SPBOCODIVA");
|
||||
return cod;
|
||||
}
|
||||
|
||||
real TDocumento::bolli_esenti(int ndec, TTipo_importo t)
|
||||
{
|
||||
real tot_bolli;
|
||||
|
||||
if (get_bool(DOC_ADDBOLLI) && bolli_esenti_dovuti())
|
||||
{
|
||||
const real bolli_es = ini_get_real(CONFIG_STUDIO, "ve", "BOLLIES");
|
||||
|
||||
tot_bolli = bolli_es;
|
||||
|
||||
real iva_bolli = TRiga_documento::iva(codiva_bolli_esenti()).imposta(tot_bolli, ndec);
|
||||
|
||||
if (t == _lordo)
|
||||
tot_bolli += iva_bolli;
|
||||
else
|
||||
if (t == _imposta)
|
||||
tot_bolli = iva_bolli;
|
||||
}
|
||||
return tot_bolli;
|
||||
}
|
||||
|
||||
real TDocumento::bolli_incasso(real & imp, int ndec, TTipo_importo t)
|
||||
{
|
||||
real tot_bolli;
|
||||
|
||||
if (get_bool(DOC_ADDBOLLI))
|
||||
{
|
||||
const real bolli_es = ini_get_real(CONFIG_STUDIO, "ve", "BOLLIES");
|
||||
TArray sca_bolli;
|
||||
TArray imp_bolli;
|
||||
int nscagl;
|
||||
@ -528,15 +597,12 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const
|
||||
|
||||
for (int j = 0; j < 5 && tot_bolli+iva_bolli != old_bolli; j++)
|
||||
{
|
||||
old_bolli = tot_bolli + iva_bolli;
|
||||
old_bolli = tot_bolli + iva_bolli;
|
||||
|
||||
const real imposte = imp_orig + iva_bolli;
|
||||
const real imp_spese = sp_orig + tot_bolli - iva_bolli;
|
||||
const real imponibile = importo - imposte - imp_spese;
|
||||
|
||||
if (bolli_esenti_dovuti())
|
||||
tot_bolli = bolli_es;
|
||||
else
|
||||
tot_bolli = ZERO;
|
||||
pag.set_total(imponibile, imposte, imp_spese);
|
||||
pag.set_rate_auto();
|
||||
|
||||
@ -596,7 +662,7 @@ real TDocumento::bolli(real & imp, int ndec, TTipo_importo t) const
|
||||
break;
|
||||
}
|
||||
}
|
||||
iva_bolli = TRiga_documento::iva(codiva_bolli()).imposta(tot_bolli, ndec);
|
||||
iva_bolli = TRiga_documento::iva(codiva_bolli()).imposta(tot_bolli, ndec);
|
||||
importo += (tot_bolli + iva_bolli - old_bolli);
|
||||
}
|
||||
if (t == _lordo)
|
||||
@ -2500,13 +2566,15 @@ void TDocumento::update_tabella_iva(bool solo_imponibili)
|
||||
}
|
||||
}
|
||||
|
||||
val = bolli(real(tot_doc - rit), ALL_DECIMALS, doc_al_lordo ? _lordo : _netto);
|
||||
val = bolli_incasso(real(tot_doc - rit), ALL_DECIMALS, doc_al_lordo ? _lordo : _netto);
|
||||
if (val != ZERO)
|
||||
{
|
||||
const TString& codiva = codiva_bolli();
|
||||
|
||||
if (codiva.full())
|
||||
{
|
||||
TRiepilogo_iva* ri = (TRiepilogo_iva*)table.objptr(codiva);
|
||||
|
||||
if (ri == NULL)
|
||||
{
|
||||
ri = new TRiepilogo_iva(TCodiceIVA(codiva));
|
||||
@ -2514,14 +2582,37 @@ void TDocumento::update_tabella_iva(bool solo_imponibili)
|
||||
}
|
||||
if (!doc_al_lordo)
|
||||
{
|
||||
real valiva = bolli(real(tot_doc - rit), ALL_DECIMALS, _imposta);
|
||||
real valiva = bolli_incasso(real(tot_doc - rit), ALL_DECIMALS, _imposta);
|
||||
ri->iva_spese() += valiva;
|
||||
tot_doc += valiva;
|
||||
}
|
||||
ri->imp_spese() += val;
|
||||
}
|
||||
tot_doc += val;
|
||||
val = bolli_esenti(ALL_DECIMALS, doc_al_lordo ? _lordo : _netto);
|
||||
if (val != ZERO)
|
||||
{
|
||||
const TString& codiva = codiva_bolli_esenti();
|
||||
|
||||
tot_doc += val;
|
||||
if (codiva.full())
|
||||
{
|
||||
TRiepilogo_iva* ri = (TRiepilogo_iva*)table.objptr(codiva);
|
||||
|
||||
if (ri == NULL)
|
||||
{
|
||||
ri = new TRiepilogo_iva(TCodiceIVA(codiva));
|
||||
table.add(codiva, ri);
|
||||
}
|
||||
if (!doc_al_lordo)
|
||||
{
|
||||
real valiva = bolli_esenti(ALL_DECIMALS, _imposta);
|
||||
ri->iva_spese() += valiva;
|
||||
tot_doc += valiva;
|
||||
}
|
||||
ri->imp_spese() += val;
|
||||
}
|
||||
}
|
||||
tot_doc += val;
|
||||
}
|
||||
|
||||
// SCORPORO
|
||||
@ -2586,7 +2677,7 @@ real TDocumento::totale_doc() const
|
||||
if (!lordo)
|
||||
r += imposta();
|
||||
r += spese_incasso(real(r - ritenute()), ndec);
|
||||
r += bolli(real(r - ritenute()), ndec);
|
||||
r += ((TDocumento *) this)->bolli(real(r - ritenute()), ndec);
|
||||
}
|
||||
else
|
||||
r = get_real(field);
|
||||
|
@ -704,7 +704,7 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
|
||||
if (_doc)
|
||||
{
|
||||
r += _doc->spese_incasso(real(r - _doc->ritenute()), ndec);
|
||||
r = _doc->bolli(real(r - _doc->ritenute()), ndec, netto ? _netto : _lordo);
|
||||
r = ((TDocumento *)_doc)->bolli(real(r - _doc->ritenute()), ndec, netto ? _netto : _lordo);
|
||||
}
|
||||
else
|
||||
r = ZERO;
|
||||
@ -723,7 +723,7 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
|
||||
{
|
||||
real r1 = _doc->spese_incasso(real(r - _doc->ritenute()), ndec);
|
||||
r += r1;
|
||||
r1 += _doc->bolli(real(r - _doc->ritenute()), ndec);
|
||||
r1 += ((TDocumento *)_doc)->bolli(real(r - _doc->ritenute()), ndec);
|
||||
r = r1;
|
||||
}
|
||||
else
|
||||
|
@ -455,12 +455,16 @@ protected:
|
||||
void split_sp_amount(const real & amount, int decimals) const;
|
||||
// Funzione per ricercare il conto di costo/ricavo
|
||||
error_type search_costo_ricavo(TBill& conto, const TRiga_documento& r, real & amount_to_split, const real & valore);
|
||||
// Funzione per ricercare il conto dei bolli_esenti
|
||||
void conto_bolli_esenti(TBill & bill, TDocumento& d);
|
||||
// Funzione per ricercare il conto di costo/ricavo materiali
|
||||
error_type search_costo_ricavo_mat(TBill&, const TRiga_documento&);
|
||||
// Funzione per aggiungere la riga iva al TAssoc_array _righe_iva
|
||||
// error_type add_iva_row(const TBill&, const TRiga_documento&, const int ndec, const real p = 1.0);
|
||||
// Funzione atomica per aggiungere le righe di spese d'incasso e bolli al TAssoc_array _righe_iva
|
||||
void calculate_spese(const real&, real&, int, bool, const TString &, const TDocumento & );
|
||||
void calculate_spese(const real& spese, real& sp_iva, int ndec, bool is_incasso, const TString& codiva_es, const TDocumento & doc);
|
||||
// Funzione atomica per aggiungere le righe di bolli esenti al TAssoc_array _righe_iva
|
||||
void calculate_spese_esenti(const real& spese, real& sp_iva, int ndec, const TDocumento & doc);
|
||||
// Funzione per aggiungere le righe di spese d'incasso e bolli al TAssoc_array _righe_iva (chiama calculate_spese())
|
||||
error_type add_spese_inbo(TDocumento&, const int);
|
||||
// Aggiorna le righe di sconto importo o percentuale
|
||||
|
@ -1920,6 +1920,58 @@ error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_doc
|
||||
return _error;
|
||||
}
|
||||
|
||||
void TContabilizzazione::conto_bolli_esenti(TBill & bill, TDocumento& d)
|
||||
{
|
||||
int gr;
|
||||
int co;
|
||||
long so;
|
||||
int nrow = 0;
|
||||
|
||||
bill.set();
|
||||
if (d.nuovo_calcolo_esenti())
|
||||
{
|
||||
const TString & cod = d.codiva_bolli_esenti();
|
||||
real imponibile_max = ZERO;
|
||||
|
||||
FOR_EACH_RDOC(d, i, pr)
|
||||
{
|
||||
TRiga_documento & r = *pr;
|
||||
|
||||
if (cod == r.iva().codice())
|
||||
{
|
||||
if (r.imponibile() >= imponibile_max)
|
||||
{
|
||||
imponibile_max = r.imponibile();
|
||||
nrow = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nrow > 0)
|
||||
{
|
||||
TRiga_documento & r = d[nrow];
|
||||
real dummy, dummy1;
|
||||
|
||||
search_costo_ricavo(bill, r, dummy, dummy1);
|
||||
}
|
||||
}
|
||||
if (!bill.ok())
|
||||
{
|
||||
if (_caus->reg().tipo_registro() == acquisto)
|
||||
{
|
||||
gr = ini_get_int(CONFIG_DITTA, "ve", "SPBOCODCONA", 0, 1);
|
||||
co = ini_get_int(CONFIG_DITTA, "ve", "SPBOCODCONA", 0, 2);
|
||||
so = ini_get_long(CONFIG_DITTA, "ve", "SPBOCODCONA", 0L, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
gr = ini_get_int(CONFIG_DITTA, "ve", "SPBOCODCONV", 0, 1);
|
||||
co = ini_get_int(CONFIG_DITTA, "ve", "SPBOCODCONV", 0, 2);
|
||||
so = ini_get_long(CONFIG_DITTA, "ve", "SPBOCODCONV", 0L, 3);
|
||||
}
|
||||
bill.set(gr, co, so);
|
||||
}
|
||||
}
|
||||
|
||||
error_type TContabilizzazione::search_costo_ricavo_mat(TBill& conto, const TRiga_documento& r)
|
||||
{
|
||||
const char t = r.tipo().tipo();
|
||||
@ -1957,13 +2009,45 @@ error_type TContabilizzazione::search_costo_ricavo_mat(TBill& conto, const TRiga
|
||||
}
|
||||
|
||||
void TContabilizzazione::calculate_spese(const real& spese, real& sp_iva, int ndec, bool is_incasso, const TString& codiva_es, const TDocumento & doc)
|
||||
{
|
||||
const bool is_cli = doc.get_char(DOC_TIPOCF) != 'F';
|
||||
const TBill& zio = is_incasso ? (is_cli ? _spin_billv : _spin_billa) : (is_cli ? _spbo_billv : _spbo_billa);
|
||||
|
||||
if (zio.ok())
|
||||
{
|
||||
TRiga_documento r((TDocumento *)&doc, "02"); // il tipo riga 02 spese a valore
|
||||
|
||||
r.put(RDOC_QTA, UNO);
|
||||
r.put(RDOC_PREZZO, spese);
|
||||
r.put(RDOC_CODIVA, codiva_es);
|
||||
_righe_iva->add(r, zio, ndec);
|
||||
sp_iva = r.imposta(false);
|
||||
sp_iva.round(ndec);
|
||||
if (doc.tipo().calcolo_lordo()) // Si ricorda che calcolo_lordo() e fattura_commerciale sono esclusivi.
|
||||
{
|
||||
// Totalizza per ogni codice iva il lordo
|
||||
|
||||
if (!_totali_lordi.is_key(codiva_es))
|
||||
_totali_lordi.add(codiva_es, new real);
|
||||
real& rl = (real&)_totali_lordi[codiva_es];
|
||||
rl += spese + sp_iva;
|
||||
}
|
||||
}
|
||||
else
|
||||
_error = spinbo_error;
|
||||
}
|
||||
|
||||
void TContabilizzazione::calculate_spese_esenti(const real& spese, real& sp_iva, int ndec, const TDocumento & doc)
|
||||
{
|
||||
const bool is_cli = doc.get_char(DOC_TIPOCF) != 'F';
|
||||
const TBill& zio = is_incasso ? (is_cli ? _spin_billv : _spin_billa) : (is_cli ? _spbo_billv : _spbo_billa);
|
||||
|
||||
TBill zio;
|
||||
const TString8 codiva_es = ((TDocumento &)doc).codiva_bolli_esenti();
|
||||
|
||||
conto_bolli_esenti(zio, ((TDocumento &)doc));
|
||||
if (zio.ok())
|
||||
{
|
||||
TRiga_documento r((TDocumento *) &doc, "02"); // il tipo riga 02 spese a valore
|
||||
|
||||
r.put(RDOC_QTA, UNO);
|
||||
r.put(RDOC_PREZZO, spese);
|
||||
r.put(RDOC_CODIVA, codiva_es);
|
||||
@ -1995,20 +2079,24 @@ error_type TContabilizzazione::add_spese_inbo(TDocumento& doc, const int ndec)
|
||||
if (!sp_incasso.is_zero())
|
||||
{
|
||||
TString4 codiva_es; doc.iva_esente(codiva_es);
|
||||
calculate_spese(sp_incasso,iva_sp_incasso,ndec,true,codiva_es.full() ? codiva_es : doc.codiva_spese(), doc);
|
||||
calculate_spese(sp_incasso, iva_sp_incasso, ndec, true, codiva_es.full() ? codiva_es : doc.codiva_spese(), doc);
|
||||
}
|
||||
|
||||
const real rit = doc.ritenute();
|
||||
tot_netto += sp_incasso + iva_sp_incasso - rit;
|
||||
|
||||
// Aggiunge le spese bolli
|
||||
real sp_bolli = doc.bolli(tot_netto, ndec, _netto);
|
||||
if (!sp_bolli.is_zero())
|
||||
{
|
||||
real iva_sp_bolli;
|
||||
calculate_spese(sp_bolli, iva_sp_bolli, ndec, false, doc.codiva_bolli(), doc);
|
||||
}
|
||||
// Aggiunge le spese bolli incasso
|
||||
real sp_bolli_incasso = doc.bolli_incasso(tot_netto, ndec, _netto);
|
||||
real iva_sp_bolli;
|
||||
|
||||
if (!sp_bolli_incasso.is_zero())
|
||||
calculate_spese(sp_bolli_incasso, iva_sp_bolli, ndec, false, doc.codiva_bolli(), doc);
|
||||
|
||||
// Aggiunge le spese bolli
|
||||
real sp_bolli_esenti = doc.bolli_esenti(ndec, _netto);
|
||||
|
||||
if (!sp_bolli_esenti.is_zero())
|
||||
calculate_spese_esenti(sp_bolli_esenti, iva_sp_bolli, ndec, doc);
|
||||
return _error;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user