Patch level : 12.00 1410
Files correlati : f139.dir f139.trr ce0500b.msk ce2.exe ce3.exe Commento : Fringe benefit 70% , cespiti non ammortizzabili
This commit is contained in:
parent
b3429abf79
commit
f7b631d52a
@ -31,6 +31,7 @@
|
||||
#define F_LEASING 139
|
||||
#define F_USATO 140
|
||||
#define F_FABBR06 141
|
||||
#define F_NONAMM 142
|
||||
|
||||
#define F_SPEMAN 150
|
||||
#define F_VEICOLO 151
|
||||
|
||||
@ -290,6 +290,7 @@ BEGIN
|
||||
ITEM "2|Deducibilità 50% - Uso promiscuo"
|
||||
ITEM "3|Deducibilità 80% - Uso promiscuo agenti/rappresentanti"
|
||||
ITEM "4|Deducibilità 40% - Autovettura uso promiscuo"
|
||||
ITEM "9|Deducibilità 70% - Autovettura in fringe benefit"
|
||||
ITEM "5|Deducibilità 90% - Autovettura in fringe benefit"
|
||||
ITEM "6|Deducibilità 80% - Cellulari"
|
||||
ITEM "7|Deducibilità 20% - Uso promiscuo"
|
||||
@ -297,6 +298,12 @@ BEGIN
|
||||
FIELD USOPROM
|
||||
END
|
||||
|
||||
BOOLEAN F_NONAMM
|
||||
BEGIN
|
||||
PROMPT 1 20 "Cespite non ammortizzabile"
|
||||
FIELD NONAMM
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Personalizzazioni" -1 -1 78 18
|
||||
|
||||
@ -377,7 +377,6 @@ bool TCespite::valido()
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -505,7 +504,8 @@ real TCespite::percentuale_deducibilita() const
|
||||
{
|
||||
real percento;
|
||||
const int uso_promiscuo = get_int(CESPI_USOPROM);
|
||||
switch (uso_promiscuo)
|
||||
|
||||
switch (uso_promiscuo)
|
||||
{
|
||||
case 2: // Beni in uso promiscuo
|
||||
percento = 50;
|
||||
@ -522,10 +522,11 @@ real TCespite::percentuale_deducibilita() const
|
||||
break;
|
||||
case 3: percento = 80; break; // Agenti/rappresentanti
|
||||
case 4: percento = 40; break; // Uso promiscuo a dipententi
|
||||
case 5: percento = 90; break; // Fringe benefit
|
||||
case 5: percento = 90; break; // Fringe benefit90%
|
||||
case 6: percento = 80; break; // Cellulari
|
||||
case 7: percento = 20; break; // Uso promiscuo 2013
|
||||
case 8: percento = 70; break; // Uso promiscuo 2013
|
||||
case 8: percento = 70; break; // Uso promiscuo 2013
|
||||
case 9: percento = 70; break; // Fringe benefit 70%
|
||||
default: percento = CENTO; break; // Beni strumentali al 100%
|
||||
}
|
||||
return percento;
|
||||
@ -878,7 +879,7 @@ int TCespite::test_rip(TRelation& rel)
|
||||
// Se questa supera il residuo da ammortizzare allora pone la quota uguale al residuo e
|
||||
// ricalcola la percentuale effettiva
|
||||
real TCespite::calc_quota(const real& valamm, const real& perric,
|
||||
const real& residuo, real& pereff, TRelation* mov /* =NULL */)
|
||||
const real& residuo, real& pereff, TRelation* mov /* = nullptr */)
|
||||
{
|
||||
// Caso anomalo di percentuale o valore nulli
|
||||
if (perric <= ZERO || valamm <= ZERO)
|
||||
@ -1183,9 +1184,9 @@ void TCespite::calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tm
|
||||
{
|
||||
const TDitta_cespiti& cce = ditta_cespiti();
|
||||
const real coeff = cce.coefficiente_durata_esercizio();
|
||||
|
||||
TRectype& ammmv = rel.curr(LF_AMMMV);
|
||||
|
||||
const bool nonamm = get_bool(CESPI_NONAMM);
|
||||
TRectype& ammmv = rel.curr(LF_AMMMV);
|
||||
|
||||
if (ammmv.get_bool(AMMMV_FZQUO)) // Forzatura per quote
|
||||
{
|
||||
// Leggo comunque le percentuali teoriche
|
||||
@ -1265,23 +1266,28 @@ void TCespite::calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tm
|
||||
real resamm = mov_res_amm(tmv, tmvam) - ammmv.get_real(AMMMV_FPRIVATO);
|
||||
if (resamm > ZERO)
|
||||
{
|
||||
const real penor = ammmv.get_real(AMMMV_PENOR);
|
||||
const real penor = nonamm ? ZERO : ammmv.get_real(AMMMV_PENOR);
|
||||
real per_eff;
|
||||
const real qnor = calc_quota(mov_val_amm(tmv), penor, resamm, per_eff, &rel);
|
||||
ammmv.put(AMMMV_QNOR, qnor);
|
||||
|
||||
ammmv.put(AMMMV_QNOR, qnor);
|
||||
ammmv.put(AMMMV_PENOR, per_eff);
|
||||
|
||||
resamm -= qnor;
|
||||
const real peacc = ammmv.get_real(AMMMV_PEACC);
|
||||
if (resamm > ZERO && peacc > ZERO)
|
||||
|
||||
const real peacc = nonamm ? ZERO : ammmv.get_real(AMMMV_PEACC);
|
||||
|
||||
if (resamm > ZERO && peacc > ZERO)
|
||||
{
|
||||
const real qacc = calc_quota(mov_val_amm(tmv), peacc, resamm, per_eff, &rel);
|
||||
ammmv.put(AMMMV_QACC, qacc);
|
||||
|
||||
ammmv.put(AMMMV_QACC, qacc);
|
||||
ammmv.put(AMMMV_PEACC, per_eff);
|
||||
resamm -= qacc;
|
||||
}
|
||||
|
||||
const real peant = ammmv.get_real(AMMMV_PEANT);
|
||||
const real peant = nonamm ? ZERO : ammmv.get_real(AMMMV_PEANT);
|
||||
|
||||
if (resamm > ZERO && peant > ZERO)
|
||||
{
|
||||
const real qant = calc_quota(mov_val_amm(tmv), peant, resamm, per_eff, &rel);
|
||||
@ -1336,10 +1342,11 @@ void TCespite::calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tm
|
||||
{
|
||||
// Calcolare quota ammortamento normale
|
||||
const real valamm = mov_val_amm(tmv);
|
||||
const real penor = ammmv.get_real(AMMMV_PENOR); // Attenzione: usare PENOR, non PNOR!
|
||||
const real penor = nonamm ? ZERO : ammmv.get_real(AMMMV_PENOR); // Attenzione: usare PENOR, non PNOR!
|
||||
real per_eff;
|
||||
const real qnor = calc_quota(valamm, penor, resamm, per_eff, &rel);
|
||||
ammmv.put(AMMMV_QNOR, qnor);
|
||||
|
||||
ammmv.put(AMMMV_QNOR, qnor);
|
||||
ammmv.put(AMMMV_PENOR, per_eff);
|
||||
|
||||
// Calcolare quote perse
|
||||
@ -1361,9 +1368,10 @@ void TCespite::calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tm
|
||||
// Calcolare quota ammortamento accelerato
|
||||
if (resamm > ZERO && ammmv.get_real(AMMMV_PEACC) > ZERO && ammmv.get_real(AMMMV_QPERSE) == ZERO)
|
||||
{
|
||||
const real peacc = ammmv.get_real(AMMMV_PEACC);
|
||||
const real peacc = nonamm ? ZERO : ammmv.get_real(AMMMV_PEACC);
|
||||
const real qacc = calc_quota(valamm, peacc, resamm, per_eff, &rel);
|
||||
ammmv.put(AMMMV_QACC, qacc);
|
||||
|
||||
ammmv.put(AMMMV_QACC, qacc);
|
||||
ammmv.put(AMMMV_PEACC, per_eff);
|
||||
if (_tipo_sit == 1 && get_int(CESPI_USOPROM) > 1)
|
||||
agg_quota(valamm, ammmv, "QACC", false);
|
||||
@ -1380,11 +1388,13 @@ void TCespite::calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tm
|
||||
resamm -= ammmv.get_real(AMMMV_QACC);
|
||||
if (tipo() == tc_materiale && _salini.get_int(SALCE_ANNIAMM) <= 2)
|
||||
{
|
||||
const real peant = ammmv.get_real(AMMMV_PEANT);
|
||||
const real peant = nonamm ? ZERO : ammmv.get_real(AMMMV_PEANT);
|
||||
|
||||
if (resamm > ZERO && peant > ZERO && ammmv.get_real(AMMMV_QPERSE) == ZERO)
|
||||
{
|
||||
const real qant = calc_quota(valamm, peant, resamm, per_eff, &rel);
|
||||
ammmv.put(AMMMV_QANT, qant);
|
||||
|
||||
ammmv.put(AMMMV_QANT, qant);
|
||||
ammmv.put(AMMMV_PEANT, per_eff);
|
||||
if (_tipo_sit == 1 && get_int(CESPI_USOPROM) > 1)
|
||||
agg_quota(valamm, ammmv, "QANT", false);
|
||||
@ -1737,7 +1747,8 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
const bool is_forz = fzper || fzquo; // Forzatura sul cespite
|
||||
const TTipo_cespite tc = tipo();
|
||||
const bool leasing = get_bool(CESPI_LEASING);
|
||||
const int anniric = get_int(CESPI_ANNIRIC);
|
||||
const int anniric = get_int(CESPI_ANNIRIC);
|
||||
const bool nonamm = get_bool(CESPI_NONAMM);
|
||||
|
||||
if ((tc == tc_materiale && !leasing) || (tc == tc_immateriale && anniric <= 0) || is_forz)
|
||||
{
|
||||
@ -1794,10 +1805,11 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
if (resamm > ZERO)
|
||||
{
|
||||
const real valamm = val_amm();
|
||||
const real pnor = _ammpro.get_real(AMMCE_PNOR);
|
||||
const real pnor = nonamm ? ZERO : _ammpro.get_real(AMMCE_PNOR);
|
||||
real per_eff;
|
||||
const real qnor = calc_quota(valamm, pnor, resamm, per_eff);
|
||||
_ammpro.put(AMMCE_QNOR, qnor);
|
||||
|
||||
_ammpro.put(AMMCE_QNOR, qnor);
|
||||
ammpro_put_perc(AMMCE_PNOR, per_eff);
|
||||
resamm -= qnor;
|
||||
}
|
||||
@ -1807,7 +1819,8 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
AMMCE_QPERSE, AMMCE_FPRIVATO, AMMCE_QPPRIVATE, NULL);
|
||||
}
|
||||
|
||||
const real pacc = _ammpro.get_real(AMMCE_PACC);
|
||||
const real pacc = nonamm ? ZERO : _ammpro.get_real(AMMCE_PACC);
|
||||
|
||||
if (resamm > ZERO && pacc > ZERO)
|
||||
{
|
||||
const real valamm = val_amm();
|
||||
@ -1820,7 +1833,8 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
else
|
||||
zero_fields(_ammpro, AMMCE_QACC, AMMCE_PACC, NULL);
|
||||
|
||||
const real pant = _ammpro.get_real(AMMCE_PANT);
|
||||
const real pant = nonamm ? ZERO : _ammpro.get_real(AMMCE_PANT);
|
||||
|
||||
if (resamm > ZERO && pant > ZERO)
|
||||
{
|
||||
const real valamm = val_amm();
|
||||
@ -1836,22 +1850,25 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
else // Nessuna forzatura
|
||||
{
|
||||
// Leggo percentuali teoriche da AMMINI
|
||||
_ammpro.put(AMMCE_PNOR, ammini_get_real(AMMCE_PNOR));
|
||||
_ammpro.put(AMMCE_PANT, ammini_get_real(AMMCE_PANT));
|
||||
_ammpro.put(AMMCE_PACC, ammini_get_real(AMMCE_PACC));
|
||||
_ammpro.put(AMMCE_PNOR, nonamm ? ZERO : ammini_get_real(AMMCE_PNOR));
|
||||
_ammpro.put(AMMCE_PANT, nonamm ? ZERO : ammini_get_real(AMMCE_PANT));
|
||||
_ammpro.put(AMMCE_PACC, nonamm ? ZERO : ammini_get_real(AMMCE_PACC));
|
||||
|
||||
// Percentuale minima quote perse
|
||||
real pmat = get_real(CESPI_PMAT) / 2.0;
|
||||
real pmat = nonamm ? ZERO : get_real(CESPI_PMAT) / 2.0;
|
||||
const TDate dtfunz = get_date(CESPI_DTFUNZ);
|
||||
if (tc == tc_materiale && _salini.get_int(SALCE_ANNIAMM) == 0 &&
|
||||
|
||||
if (tc == tc_materiale && _salini.get_int(SALCE_ANNIAMM) == 0 &&
|
||||
!cce.professionista() && dtfunz >= inies)
|
||||
{
|
||||
// Calcolo il valore di un singolo elemento per vedere se e' inferiore al milione di lire
|
||||
real vam1 = val_amm();
|
||||
if (vam1 > ZERO)
|
||||
|
||||
if (vam1 > ZERO)
|
||||
{
|
||||
const real numele = _salpro.get_real(SALCE_NUMELE);
|
||||
if (numele > ZERO)
|
||||
|
||||
if (numele > ZERO)
|
||||
vam1 /= numele;
|
||||
}
|
||||
if (ammini_get_bool(AMMCE_CSCEN) && vam1 < un_milione())
|
||||
@ -1867,9 +1884,9 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
const real durata_esercizio = fines - inies + 1;
|
||||
const real giorni_possesso = fines - dtfunz + 1;
|
||||
const real coeff = giorni_possesso / durata_esercizio;
|
||||
ammpro_put_perc(AMMCE_PNOR, ammini_get_real(AMMCE_PNOR)*coeff);
|
||||
ammpro_put_perc(AMMCE_PANT, ammini_get_real(AMMCE_PANT)*coeff);
|
||||
ammpro_put_perc(AMMCE_PACC, ammini_get_real(AMMCE_PACC)*coeff);
|
||||
ammpro_put_perc(AMMCE_PNOR, nonamm ? ZERO : ammini_get_real(AMMCE_PNOR)*coeff);
|
||||
ammpro_put_perc(AMMCE_PANT, nonamm ? ZERO : ammini_get_real(AMMCE_PANT)*coeff);
|
||||
ammpro_put_perc(AMMCE_PACC, nonamm ? ZERO : ammini_get_real(AMMCE_PACC)*coeff);
|
||||
pmat *= coeff; pmat.round(3);
|
||||
_ammpro.put(AMMCE_MSG06, "X"); // Ammortamento proporzionale nel primo esercizio
|
||||
}
|
||||
@ -1877,9 +1894,9 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
{
|
||||
if (!cce.primo_ammortamento_100(dtfunz, _ammpro.get_int(AMMCE_TPAMM), auto_o_moto()))
|
||||
{
|
||||
ammpro_put_perc(AMMCE_PNOR, ammini_get_real(AMMCE_PNOR)/2.0);
|
||||
ammpro_put_perc(AMMCE_PANT, ammini_get_real(AMMCE_PANT)/2.0);
|
||||
ammpro_put_perc(AMMCE_PACC, ammini_get_real(AMMCE_PACC)/2.0);
|
||||
ammpro_put_perc(AMMCE_PNOR, nonamm ? ZERO : ammini_get_real(AMMCE_PNOR)/2.0);
|
||||
ammpro_put_perc(AMMCE_PANT, nonamm ? ZERO : ammini_get_real(AMMCE_PANT)/2.0);
|
||||
ammpro_put_perc(AMMCE_PACC, nonamm ? ZERO : ammini_get_real(AMMCE_PACC)/2.0);
|
||||
pmat /= 2.0; pmat.round(3);
|
||||
_ammpro.put(AMMCE_MSG01, "X"); // Ammortamento al 40-50-80-90% nel primo esercizio
|
||||
}
|
||||
@ -1891,10 +1908,11 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
if (resamm > ZERO)
|
||||
{
|
||||
const real valamm = val_amm();
|
||||
const real pnor = _ammpro.get_real(AMMCE_PNOR);
|
||||
const real pnor = nonamm ? ZERO : _ammpro.get_real(AMMCE_PNOR);
|
||||
real per_eff;
|
||||
const real qnor = calc_quota(valamm, pnor, resamm, per_eff);
|
||||
_ammpro.put(AMMCE_QNOR, qnor);
|
||||
|
||||
_ammpro.put(AMMCE_QNOR, qnor);
|
||||
ammpro_put_perc(AMMCE_PNOR, per_eff);
|
||||
|
||||
// non piu' previste dalla legge tolto nel 2021
|
||||
@ -1908,11 +1926,13 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
zero_fields(_ammpro, AMMCE_FPRIVATO, AMMCE_QPPRIVATE, NULL);
|
||||
resamm -= qnor + _ammpro.get_real(AMMCE_FPRIVATO);
|
||||
|
||||
const real pacc = _ammpro.get_real(AMMCE_PACC);
|
||||
if (resamm > ZERO && pacc > ZERO) // non piu' previste dalla legge tolto nel 2021 && quote_perse.is_zero())
|
||||
const real pacc = nonamm ? ZERO : _ammpro.get_real(AMMCE_PACC);
|
||||
|
||||
if (resamm > ZERO && pacc > ZERO) // non piu' previste dalla legge tolto nel 2021 && quote_perse.is_zero())
|
||||
{
|
||||
const real qacc = calc_quota(val_amm(), pacc, resamm, per_eff);
|
||||
_ammpro.put(AMMCE_QACC, qacc);
|
||||
|
||||
_ammpro.put(AMMCE_QACC, qacc);
|
||||
ammpro_put_perc(AMMCE_PACC, per_eff);
|
||||
if (_tipo_sit == 1 && uso_promiscuo > 1)
|
||||
agg_quota(valamm, _ammpro, AMMCE_QACC, false);
|
||||
@ -1930,8 +1950,9 @@ void TCespite::calc_amm_residui(bool is_valid)
|
||||
}
|
||||
else
|
||||
{
|
||||
const real pant = _ammpro.get_real(AMMCE_PANT);
|
||||
if (resamm > ZERO && pant > ZERO)
|
||||
const real pant = nonamm ? ZERO : _ammpro.get_real(AMMCE_PANT);
|
||||
|
||||
if (resamm > ZERO && pant > ZERO)
|
||||
{
|
||||
const real qant = calc_quota(val_amm(), pant, resamm, per_eff);
|
||||
_ammpro.put(AMMCE_QANT, qant);
|
||||
@ -2101,7 +2122,7 @@ bool TCespite::calc_amm(int tipo_sit, const TDate& data_limite,
|
||||
|
||||
|
||||
#ifdef DBG
|
||||
if (atol(idcespite) == 441)
|
||||
if (atol(idcespite) == 264)
|
||||
int i = 1; // Put your breakpoint here
|
||||
#endif
|
||||
|
||||
|
||||
@ -62,7 +62,7 @@ protected:
|
||||
void elabora_mov_neg(TRelation& rel, TRectype& tmv, TRectype& tmvam);
|
||||
|
||||
real calc_quota(const real& valamm, const real& perric, const real& residuo,
|
||||
real& pereff, TRelation* mov = NULL);
|
||||
real& pereff, TRelation* mov = nullptr);
|
||||
real calc_quote_perse(const real& valamm, const real& peric, const real& residuo,
|
||||
const real& quotamm, bool mov_vend, const TDate& dtmov);
|
||||
void agg_quota(const real& valamm, TRectype& rec, const char* field, bool calcq);
|
||||
|
||||
@ -770,12 +770,13 @@ void TRegistro_cespiti::print_valorifinali()
|
||||
const int usoprom = _form->cursor()->curr().get_int(CESPI_USOPROM);
|
||||
switch (usoprom)
|
||||
{
|
||||
case 2: key=TR("Ammortamento ridotto al 50% per bene in uso promiscuo"); break;
|
||||
case 3: key=TR("Ammortamento ridotto all'80% per bene in uso promiscuo agenti/rappresentanti"); break;
|
||||
case 4: key=TR("Ammortamento ridotto al 40% per auto in uso promiscuo"); break;
|
||||
case 5: key=TR("Ammortamento ridotto al 90% per auto in fringe benefit"); break;
|
||||
case 6: key=TR("Ammortamento ridotto all'80% per cellulari in uso promiscuo"); break;
|
||||
default: break;
|
||||
case 2: key = TR("Ammortamento ridotto al 50% per bene in uso promiscuo"); break;
|
||||
case 3: key = TR("Ammortamento ridotto all'80% per bene in uso promiscuo agenti/rappresentanti"); break;
|
||||
case 4: key = TR("Ammortamento ridotto al 40% per auto in uso promiscuo"); break;
|
||||
case 5: key = TR("Ammortamento ridotto al 90% per auto in fringe benefit"); break;
|
||||
case 6: key = TR("Ammortamento ridotto all'80% per cellulari in uso promiscuo"); break;
|
||||
case 9: key = TR("Ammortamento ridotto al 90% per auto in fringe benefit"); break;
|
||||
default: break;
|
||||
}
|
||||
section.find_field(FR_FE_MSG3).set(key);
|
||||
section.find_field(FR_FE_MSG3).enable(msg);
|
||||
|
||||
@ -32,3 +32,4 @@
|
||||
#define CESPI_IDIMP "IDIMP"
|
||||
#define CESPI_PERCIMP "PERCIMP"
|
||||
#define CESPI_FABBR06 "FABBR06"
|
||||
#define CESPI_NONAMM "NONAMM"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user