Compare commits

...

4 Commits

Author SHA1 Message Date
e671d16469 Patch level : 12.00 1410
Files correlati     : ve0.exe
Commento            :
Fringe benefit 70% , cespiti non ammortizzabili
I supervisori possono modificare i documenti bloccati
2026-04-07 21:53:32 +02:00
303b6d3cee Merge branch 'R12.00.1244' of http://192.168.2.5:30000/root/campo-sirio into R12.00.1244 2026-04-07 21:49:29 +02:00
f7b631d52a Patch level : 12.00 1410
Files correlati     : f139.dir f139.trr ce0500b.msk ce2.exe ce3.exe
Commento                :
Fringe benefit 70% , cespiti non ammortizzabili
2026-04-07 21:48:29 +02:00
b3429abf79 Patch level : 12.00 1410
Files correlati     : f139.dir f139.trr
Commento                :
Fringe benefit 70% , cespiti non ammortizzabili
2026-04-07 20:17:45 +02:00
11 changed files with 107 additions and 60 deletions

View File

@ -1,3 +1,3 @@
139 139
0 0
$cespi|0|0|256|0|Anagrafica cespiti||| $cespi|0|0|257|0|Anagrafica cespiti|||

View File

@ -1,5 +1,5 @@
139 139
34 35
IDCESPITE|1|10|0|Codice cespite (ZZZZZZZZZZ) IDCESPITE|1|10|0|Codice cespite (ZZZZZZZZZZ)
CODCGRA|2|2|0|Codice gruppo (da chiarire) (AG0CGR) CODCGRA|2|2|0|Codice gruppo (da chiarire) (AG0CGR)
CODSPA|1|4|0|Codice specie (da chiarire) (ATACSP) CODSPA|1|4|0|Codice specie (da chiarire) (ATACSP)
@ -34,6 +34,7 @@ REPARTO|1|30|0|Reparto
IDIMP|3|5|0|Codice impianto IDIMP|3|5|0|Codice impianto
PERCIMP|4|7|3|% di assegnazione all'impianto PERCIMP|4|7|3|% di assegnazione all'impianto
FABBR06|2|1|0|Fabbr.str. art.43 d.l.223/06(0=Nessuno, 1=Industriale, 2=Altro) FABBR06|2|1|0|Fabbr.str. art.43 d.l.223/06(0=Nessuno, 1=Industriale, 2=Altro)
NONAMM|8|1|0|Cespite non ammortizzabile
3 3
IDCESPITE| IDCESPITE|
CODCGRA+CODSPA+CODCAT+DTCOMP+IDCESPITE| CODCGRA+CODSPA+CODCAT+DTCOMP+IDCESPITE|

View File

@ -31,6 +31,7 @@
#define F_LEASING 139 #define F_LEASING 139
#define F_USATO 140 #define F_USATO 140
#define F_FABBR06 141 #define F_FABBR06 141
#define F_NONAMM 142
#define F_SPEMAN 150 #define F_SPEMAN 150
#define F_VEICOLO 151 #define F_VEICOLO 151

View File

@ -290,6 +290,7 @@ BEGIN
ITEM "2|Deducibilità 50% - Uso promiscuo" ITEM "2|Deducibilità 50% - Uso promiscuo"
ITEM "3|Deducibilità 80% - Uso promiscuo agenti/rappresentanti" ITEM "3|Deducibilità 80% - Uso promiscuo agenti/rappresentanti"
ITEM "4|Deducibilità 40% - Autovettura uso promiscuo" ITEM "4|Deducibilità 40% - Autovettura uso promiscuo"
ITEM "9|Deducibilità 70% - Autovettura in fringe benefit"
ITEM "5|Deducibilità 90% - Autovettura in fringe benefit" ITEM "5|Deducibilità 90% - Autovettura in fringe benefit"
ITEM "6|Deducibilità 80% - Cellulari" ITEM "6|Deducibilità 80% - Cellulari"
ITEM "7|Deducibilità 20% - Uso promiscuo" ITEM "7|Deducibilità 20% - Uso promiscuo"
@ -297,6 +298,12 @@ BEGIN
FIELD USOPROM FIELD USOPROM
END END
BOOLEAN F_NONAMM
BEGIN
PROMPT 1 20 "Cespite non ammortizzabile"
FIELD NONAMM
END
ENDPAGE ENDPAGE
PAGE "Personalizzazioni" -1 -1 78 18 PAGE "Personalizzazioni" -1 -1 78 18

View File

@ -377,7 +377,6 @@ bool TCespite::valido()
return false; return false;
} }
} }
return true; return true;
} }
@ -505,7 +504,8 @@ real TCespite::percentuale_deducibilita() const
{ {
real percento; real percento;
const int uso_promiscuo = get_int(CESPI_USOPROM); const int uso_promiscuo = get_int(CESPI_USOPROM);
switch (uso_promiscuo)
switch (uso_promiscuo)
{ {
case 2: // Beni in uso promiscuo case 2: // Beni in uso promiscuo
percento = 50; percento = 50;
@ -522,10 +522,11 @@ real TCespite::percentuale_deducibilita() const
break; break;
case 3: percento = 80; break; // Agenti/rappresentanti case 3: percento = 80; break; // Agenti/rappresentanti
case 4: percento = 40; break; // Uso promiscuo a dipententi 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 6: percento = 80; break; // Cellulari
case 7: percento = 20; break; // Uso promiscuo 2013 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% default: percento = CENTO; break; // Beni strumentali al 100%
} }
return percento; 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 // Se questa supera il residuo da ammortizzare allora pone la quota uguale al residuo e
// ricalcola la percentuale effettiva // ricalcola la percentuale effettiva
real TCespite::calc_quota(const real& valamm, const real& perric, 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 // Caso anomalo di percentuale o valore nulli
if (perric <= ZERO || valamm <= ZERO) 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 TDitta_cespiti& cce = ditta_cespiti();
const real coeff = cce.coefficiente_durata_esercizio(); const real coeff = cce.coefficiente_durata_esercizio();
const bool nonamm = get_bool(CESPI_NONAMM);
TRectype& ammmv = rel.curr(LF_AMMMV); TRectype& ammmv = rel.curr(LF_AMMMV);
if (ammmv.get_bool(AMMMV_FZQUO)) // Forzatura per quote if (ammmv.get_bool(AMMMV_FZQUO)) // Forzatura per quote
{ {
// Leggo comunque le percentuali teoriche // 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); real resamm = mov_res_amm(tmv, tmvam) - ammmv.get_real(AMMMV_FPRIVATO);
if (resamm > ZERO) if (resamm > ZERO)
{ {
const real penor = ammmv.get_real(AMMMV_PENOR); const real penor = nonamm ? ZERO : ammmv.get_real(AMMMV_PENOR);
real per_eff; real per_eff;
const real qnor = calc_quota(mov_val_amm(tmv), penor, resamm, per_eff, &rel); 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); ammmv.put(AMMMV_PENOR, per_eff);
resamm -= qnor; 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); 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); ammmv.put(AMMMV_PEACC, per_eff);
resamm -= qacc; 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) if (resamm > ZERO && peant > ZERO)
{ {
const real qant = calc_quota(mov_val_amm(tmv), peant, resamm, per_eff, &rel); 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 // Calcolare quota ammortamento normale
const real valamm = mov_val_amm(tmv); 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; real per_eff;
const real qnor = calc_quota(valamm, penor, resamm, per_eff, &rel); 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); ammmv.put(AMMMV_PENOR, per_eff);
// Calcolare quote perse // Calcolare quote perse
@ -1361,9 +1368,10 @@ void TCespite::calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tm
// Calcolare quota ammortamento accelerato // Calcolare quota ammortamento accelerato
if (resamm > ZERO && ammmv.get_real(AMMMV_PEACC) > ZERO && ammmv.get_real(AMMMV_QPERSE) == ZERO) 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); 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); ammmv.put(AMMMV_PEACC, per_eff);
if (_tipo_sit == 1 && get_int(CESPI_USOPROM) > 1) if (_tipo_sit == 1 && get_int(CESPI_USOPROM) > 1)
agg_quota(valamm, ammmv, "QACC", false); 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); resamm -= ammmv.get_real(AMMMV_QACC);
if (tipo() == tc_materiale && _salini.get_int(SALCE_ANNIAMM) <= 2) 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) if (resamm > ZERO && peant > ZERO && ammmv.get_real(AMMMV_QPERSE) == ZERO)
{ {
const real qant = calc_quota(valamm, peant, resamm, per_eff, &rel); 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); ammmv.put(AMMMV_PEANT, per_eff);
if (_tipo_sit == 1 && get_int(CESPI_USOPROM) > 1) if (_tipo_sit == 1 && get_int(CESPI_USOPROM) > 1)
agg_quota(valamm, ammmv, "QANT", false); 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 bool is_forz = fzper || fzquo; // Forzatura sul cespite
const TTipo_cespite tc = tipo(); const TTipo_cespite tc = tipo();
const bool leasing = get_bool(CESPI_LEASING); 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) 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) if (resamm > ZERO)
{ {
const real valamm = val_amm(); 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; real per_eff;
const real qnor = calc_quota(valamm, pnor, resamm, 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); ammpro_put_perc(AMMCE_PNOR, per_eff);
resamm -= qnor; resamm -= qnor;
} }
@ -1807,7 +1819,8 @@ void TCespite::calc_amm_residui(bool is_valid)
AMMCE_QPERSE, AMMCE_FPRIVATO, AMMCE_QPPRIVATE, NULL); 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) if (resamm > ZERO && pacc > ZERO)
{ {
const real valamm = val_amm(); const real valamm = val_amm();
@ -1820,7 +1833,8 @@ void TCespite::calc_amm_residui(bool is_valid)
else else
zero_fields(_ammpro, AMMCE_QACC, AMMCE_PACC, NULL); 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) if (resamm > ZERO && pant > ZERO)
{ {
const real valamm = val_amm(); const real valamm = val_amm();
@ -1836,22 +1850,25 @@ void TCespite::calc_amm_residui(bool is_valid)
else // Nessuna forzatura else // Nessuna forzatura
{ {
// Leggo percentuali teoriche da AMMINI // Leggo percentuali teoriche da AMMINI
_ammpro.put(AMMCE_PNOR, ammini_get_real(AMMCE_PNOR)); _ammpro.put(AMMCE_PNOR, nonamm ? ZERO : ammini_get_real(AMMCE_PNOR));
_ammpro.put(AMMCE_PANT, ammini_get_real(AMMCE_PANT)); _ammpro.put(AMMCE_PANT, nonamm ? ZERO : ammini_get_real(AMMCE_PANT));
_ammpro.put(AMMCE_PACC, ammini_get_real(AMMCE_PACC)); _ammpro.put(AMMCE_PACC, nonamm ? ZERO : ammini_get_real(AMMCE_PACC));
// Percentuale minima quote perse // 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); 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) !cce.professionista() && dtfunz >= inies)
{ {
// Calcolo il valore di un singolo elemento per vedere se e' inferiore al milione di lire // Calcolo il valore di un singolo elemento per vedere se e' inferiore al milione di lire
real vam1 = val_amm(); real vam1 = val_amm();
if (vam1 > ZERO)
if (vam1 > ZERO)
{ {
const real numele = _salpro.get_real(SALCE_NUMELE); const real numele = _salpro.get_real(SALCE_NUMELE);
if (numele > ZERO)
if (numele > ZERO)
vam1 /= numele; vam1 /= numele;
} }
if (ammini_get_bool(AMMCE_CSCEN) && vam1 < un_milione()) 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 durata_esercizio = fines - inies + 1;
const real giorni_possesso = fines - dtfunz + 1; const real giorni_possesso = fines - dtfunz + 1;
const real coeff = giorni_possesso / durata_esercizio; const real coeff = giorni_possesso / durata_esercizio;
ammpro_put_perc(AMMCE_PNOR, ammini_get_real(AMMCE_PNOR)*coeff); ammpro_put_perc(AMMCE_PNOR, nonamm ? ZERO : ammini_get_real(AMMCE_PNOR)*coeff);
ammpro_put_perc(AMMCE_PANT, ammini_get_real(AMMCE_PANT)*coeff); ammpro_put_perc(AMMCE_PANT, nonamm ? ZERO : ammini_get_real(AMMCE_PANT)*coeff);
ammpro_put_perc(AMMCE_PACC, ammini_get_real(AMMCE_PACC)*coeff); ammpro_put_perc(AMMCE_PACC, nonamm ? ZERO : ammini_get_real(AMMCE_PACC)*coeff);
pmat *= coeff; pmat.round(3); pmat *= coeff; pmat.round(3);
_ammpro.put(AMMCE_MSG06, "X"); // Ammortamento proporzionale nel primo esercizio _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())) 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_PNOR, nonamm ? ZERO : ammini_get_real(AMMCE_PNOR)/2.0);
ammpro_put_perc(AMMCE_PANT, ammini_get_real(AMMCE_PANT)/2.0); ammpro_put_perc(AMMCE_PANT, nonamm ? ZERO : ammini_get_real(AMMCE_PANT)/2.0);
ammpro_put_perc(AMMCE_PACC, ammini_get_real(AMMCE_PACC)/2.0); ammpro_put_perc(AMMCE_PACC, nonamm ? ZERO : ammini_get_real(AMMCE_PACC)/2.0);
pmat /= 2.0; pmat.round(3); pmat /= 2.0; pmat.round(3);
_ammpro.put(AMMCE_MSG01, "X"); // Ammortamento al 40-50-80-90% nel primo esercizio _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) if (resamm > ZERO)
{ {
const real valamm = val_amm(); 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; real per_eff;
const real qnor = calc_quota(valamm, pnor, resamm, 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); ammpro_put_perc(AMMCE_PNOR, per_eff);
// non piu' previste dalla legge tolto nel 2021 // 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); zero_fields(_ammpro, AMMCE_FPRIVATO, AMMCE_QPPRIVATE, NULL);
resamm -= qnor + _ammpro.get_real(AMMCE_FPRIVATO); resamm -= qnor + _ammpro.get_real(AMMCE_FPRIVATO);
const real pacc = _ammpro.get_real(AMMCE_PACC); 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())
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); 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); ammpro_put_perc(AMMCE_PACC, per_eff);
if (_tipo_sit == 1 && uso_promiscuo > 1) if (_tipo_sit == 1 && uso_promiscuo > 1)
agg_quota(valamm, _ammpro, AMMCE_QACC, false); agg_quota(valamm, _ammpro, AMMCE_QACC, false);
@ -1930,8 +1950,9 @@ void TCespite::calc_amm_residui(bool is_valid)
} }
else else
{ {
const real pant = _ammpro.get_real(AMMCE_PANT); const real pant = nonamm ? ZERO : _ammpro.get_real(AMMCE_PANT);
if (resamm > ZERO && pant > ZERO)
if (resamm > ZERO && pant > ZERO)
{ {
const real qant = calc_quota(val_amm(), pant, resamm, per_eff); const real qant = calc_quota(val_amm(), pant, resamm, per_eff);
_ammpro.put(AMMCE_QANT, qant); _ammpro.put(AMMCE_QANT, qant);
@ -2101,7 +2122,7 @@ bool TCespite::calc_amm(int tipo_sit, const TDate& data_limite,
#ifdef DBG #ifdef DBG
if (atol(idcespite) == 441) if (atol(idcespite) == 264)
int i = 1; // Put your breakpoint here int i = 1; // Put your breakpoint here
#endif #endif

View File

@ -62,7 +62,7 @@ protected:
void elabora_mov_neg(TRelation& rel, TRectype& tmv, TRectype& tmvam); void elabora_mov_neg(TRelation& rel, TRectype& tmv, TRectype& tmvam);
real calc_quota(const real& valamm, const real& perric, const real& residuo, 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, real calc_quote_perse(const real& valamm, const real& peric, const real& residuo,
const real& quotamm, bool mov_vend, const TDate& dtmov); const real& quotamm, bool mov_vend, const TDate& dtmov);
void agg_quota(const real& valamm, TRectype& rec, const char* field, bool calcq); void agg_quota(const real& valamm, TRectype& rec, const char* field, bool calcq);

View File

@ -770,12 +770,13 @@ void TRegistro_cespiti::print_valorifinali()
const int usoprom = _form->cursor()->curr().get_int(CESPI_USOPROM); const int usoprom = _form->cursor()->curr().get_int(CESPI_USOPROM);
switch (usoprom) switch (usoprom)
{ {
case 2: key=TR("Ammortamento ridotto al 50% per bene in uso promiscuo"); 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 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 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 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 6: key = TR("Ammortamento ridotto all'80% per cellulari in uso promiscuo"); break;
default: 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).set(key);
section.find_field(FR_FE_MSG3).enable(msg); section.find_field(FR_FE_MSG3).enable(msg);

View File

@ -32,3 +32,4 @@
#define CESPI_IDIMP "IDIMP" #define CESPI_IDIMP "IDIMP"
#define CESPI_PERCIMP "PERCIMP" #define CESPI_PERCIMP "PERCIMP"
#define CESPI_FABBR06 "FABBR06" #define CESPI_FABBR06 "FABBR06"
#define CESPI_NONAMM "NONAMM"

View File

@ -618,7 +618,7 @@ int TMotore_application::rewrite( const TMask& m ) // C 90
TDocumento_mask& mask = (TDocumento_mask&) m; TDocumento_mask& mask = (TDocumento_mask&) m;
int err = NOERR; int err = NOERR;
if (!d.bloccato()) if (supervisor() || !d.bloccato())
{ {
mask.mask2doc(); mask.mask2doc();
d = ((TDocumento_mask&)m).doc(); // Trasferisce il documento da maschera a record d = ((TDocumento_mask&)m).doc(); // Trasferisce il documento da maschera a record

View File

@ -1713,9 +1713,18 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
if (!dcons.ok()) if (!dcons.ok())
r.put(RDOC_DATACONS, datacons); r.put(RDOC_DATACONS, datacons);
} }
if (r.get(RDOC_CODCMS).blank()) r.put(RDOC_CODCMS, codcms); if (r.is_descrizione())
if (r.get(RDOC_FASCMS).blank()) r.put(RDOC_FASCMS, fascms); {
if (r.get(RDOC_CODCOSTO).blank()) r.put(RDOC_CODCOSTO, codcos); r.put(RDOC_CODCMS, codcms);
r.put(RDOC_FASCMS, fascms);
r.put(RDOC_CODCOSTO, codcos);
}
else
{
if (r.get(RDOC_CODCMS).blank()) r.put(RDOC_CODCMS, codcms);
if (r.get(RDOC_FASCMS).blank()) r.put(RDOC_FASCMS, fascms);
if (r.get(RDOC_CODCOSTO).blank()) r.put(RDOC_CODCOSTO, codcos);
}
} }
if (is_ordine()) if (is_ordine())
((TDocumento *)this)->put(DOC_DOCEVASO, docevaso); // Tutte le righe evase -> doc evaso ((TDocumento *)this)->put(DOC_DOCEVASO, docevaso); // Tutte le righe evase -> doc evaso
@ -3237,6 +3246,7 @@ TRecord_array& TDocumento::body(int logicnum) const
{ {
TRectype& rec = r[i]; TRectype& rec = r[i];
TRecfield dcons(rec, RDOC_DATACONS); TRecfield dcons(rec, RDOC_DATACONS);
if (order && datacons == dcons) if (order && datacons == dcons)
dcons = ""; dcons = "";
if (can_reset_ca) if (can_reset_ca)

View File

@ -1177,12 +1177,14 @@ bool TDocumento_mask::on_key(KEY key)
if (key == K_SHIFT + K_F12) if (key == K_SHIFT + K_F12)
{ {
TRelation r(LF_DOC); TRelation r(LF_DOC);
r.curr()=doc(); r.curr()=doc();
bool can_save = !doc().bloccato() && !doc().chiuso(); bool can_save = !doc().bloccato() && !doc().chiuso();
if (can_save && ::user_can_write(&r)) if (supervisor() || (can_save && ::user_can_write(&r)))
{ {
TMask_field& stato = field(F_STATO); TMask_field& stato = field(F_STATO);
stato.enable(); stato.enable();
enable(DLG_SAVEREC); enable(DLG_SAVEREC);
enable(DLG_DELREC); enable(DLG_DELREC);
@ -4472,12 +4474,15 @@ bool tip_filter(const TRelation* r)
{ {
if (__codnum.blank()) if (__codnum.blank())
return true; return true;
const TCodice_numerazione & cod_num = cached_numerazione(__codnum); const TCodice_numerazione & cod_num = cached_numerazione(__codnum);
const TString4 tipo = r->curr().get("CODTAB"); const TString4 tipo = r->curr().get("CODTAB");
const int last = cod_num.ntipi_doc(); const int last = cod_num.ntipi_doc();
for (int i = 0; i < last; i++ ) for (int i = 0; i < last; i++ )
{ {
const TString& curtipo = cod_num.tipo_doc(i); const TString& curtipo = cod_num.tipo_doc(i);
if (curtipo == tipo && is_tipodoc_ok(curtipo)) if (curtipo == tipo && is_tipodoc_ok(curtipo))
return true; return true;
} }