Patch level :4.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :riportate modifiche al calcolo dei cespiti dalla 3.1


git-svn-id: svn://10.65.10.50/trunk@15892 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2007-12-17 11:09:27 +00:00
parent 50d9454013
commit a7038abcc0
6 changed files with 184 additions and 82 deletions

View File

@ -926,8 +926,12 @@ void TAnacespi::init_insert_mode(TMask& m)
{ {
m.set(F_SPEMAN, 1); m.set(F_SPEMAN, 1);
m.disable(F_SPEMAN); m.disable(F_SPEMAN);
TDitta_cespiti& dc = ditta_cespiti();
const TRectype& cac = dc.categoria(0, NULL, m.get_int(F_CATEGORIA));
m.set(F_ANNIRIC, cac.get("I3"));
} }
m.set(F_ESCLPR, _emask->tipo_cespite() != tc_pluriennale ? "X" : ""); m.set(F_ESCLPR, _emask->tipo_cespite() != tc_pluriennale ? "X" : "");
// Extra: non richiesti da analisi, ma obbligatori // Extra: non richiesti da analisi, ma obbligatori
m.set(F_VEICOLO, 1); m.set(F_VEICOLO, 1);
m.set(F_USOPROM, 1); m.set(F_USOPROM, 1);
@ -1011,16 +1015,22 @@ int TAnacespi::write(const TMask& m)
} }
else // Anni else // Anni
{ {
const int anni = cac.get_int("I3");
((TMask&)m).set(F_ANNIRIC, anni);
curr.zero(CESPI_PIMM); curr.zero(CESPI_PIMM);
curr.put(CESPI_ANNIRIC, cac.get("I3")); curr.put(CESPI_ANNIRIC, anni);
curr.put(CESPI_VINCOLO, 2); curr.put(CESPI_VINCOLO, 2);
} }
break; break;
case tc_pluriennale: case tc_pluriennale:
curr.put(CESPI_VINCOLO, cac.get("I2")); {
curr.put(CESPI_PMINP, cac.get("R14")); const int anni = cac.get_int("I3");
curr.put(CESPI_PMAXP, cac.get("R15")); ((TMask&)m).set(F_ANNIRIC, anni);
curr.put(CESPI_ANNIRIC, cac.get("I3")); curr.put(CESPI_VINCOLO, cac.get("I2"));
curr.put(CESPI_PMINP, cac.get("R14"));
curr.put(CESPI_PMAXP, cac.get("R15"));
curr.put(CESPI_ANNIRIC, anni);
}
break; break;
default: default:
{ {

View File

@ -95,7 +95,7 @@ real TCespite::un_milione() const
if (million.is_zero()) if (million.is_zero())
{ {
million = 1000000.0; million = 1000000.0;
if (is_euro_value("")) if (is_euro_value("")) // Se la ditta corrente e' in Euro
{ {
million /= 1936.27; million /= 1936.27;
million.round(2); million.round(2);
@ -138,8 +138,9 @@ void TCespite::read_sal(int esercizio)
if (!_salini.get_real(SALCE_VNONAMM).is_zero() && if (!_salini.get_real(SALCE_VNONAMM).is_zero() &&
_salini.get_real(SALCE_VNONAMMC).is_zero()) _salini.get_real(SALCE_VNONAMMC).is_zero())
{ {
TEsercizi_contabili esc; TDate di, df;
if (esc[esercizio].inizio() < TDate(4,7,2006)) ditta_cespiti().esercizio_corrente(di, df);
if (di < TDate(4,7,2006))
_salini.put(SALCE_VNONAMMC, _salini.get(SALCE_VNONAMM)); _salini.put(SALCE_VNONAMMC, _salini.get(SALCE_VNONAMM));
} }
} }
@ -158,18 +159,19 @@ void TCespite::read_sal(int esercizio)
void TCespite::read_amm(int esercizio) void TCespite::read_amm(int esercizio)
{ {
TLocalisamfile ammce(LF_AMMCE); TLocalisamfile ammce(LF_AMMCE);
fill_amm_key(ammce.curr(), esercizio, 1); TRectype& curr = ammce.curr();
fill_amm_key(curr, esercizio, 1);
if (ammce.read() == NOERR) if (ammce.read() == NOERR)
_ammini = ammce.curr(); _ammini = curr;
else else
{ {
fill_amm_key(_ammini, esercizio, 1); fill_amm_key(_ammini, esercizio, 1);
_ammini.write(ammce); _ammini.write(ammce);
} }
fill_amm_key(ammce.curr(), esercizio, 2); fill_amm_key(curr, esercizio, 2);
if (ammce.read() == NOERR) if (ammce.read() == NOERR)
_ammpro = ammce.curr(); _ammpro = curr;
else else
{ {
fill_amm_key(_ammpro, esercizio, 2); fill_amm_key(_ammpro, esercizio, 2);
@ -199,26 +201,44 @@ void TCespite::read_amm(int esercizio)
// Certified 100% // Certified 100%
void TCespite::save_sal() const void TCespite::save_sal() const
{ {
TLocalisamfile salce(LF_SALCE); if (!_in_memory)
int err = _salpro.rewrite(salce); {
if (err != NOERR) TLocalisamfile salce(LF_SALCE);
err = _salpro.write(salce); int err = _salpro.rewrite_write(salce);
if (err != NOERR) if (err != NOERR)
error_box(FR("Errore %d durante la scrittura sui saldi del cespite %s"), err, (const char*)get(CESPI_IDCESPITE)); error_box(FR("Errore %d durante la scrittura sui saldi del cespite %s"), err, (const char*)get(CESPI_IDCESPITE));
log(FR("- Scrittura salpro %d: errore %d"), _tipo_sit, err); log(FR("- Scrittura salpro %d: errore %d"), _tipo_sit, err);
}
} }
// Salva AMMPRO // Salva AMMPRO
// Certified 100% // Certified 100%
void TCespite::save_amm() const void TCespite::save_amm() const
{ {
TLocalisamfile ammce(LF_AMMCE); if (_in_memory)
int err = _ammpro.rewrite(ammce); {
if (err != NOERR) if (_fraction > ZERO && _fraction < UNO) // Simulazione con data limite operazioni
err = _ammpro.write(ammce); {
if (err != NOERR) const TDitta_cespiti& cce = ditta_cespiti();
error_box(TR("Errore %d durante la scrittura sugli ammortamenti del cespite %s"), err, (const char*)get(CESPI_IDCESPITE)); const char* field[] = { AMMCE_QNOR, AMMCE_QANT, AMMCE_QACC,
log(TR("- Scrittura ammpro %d: errore %d"), _tipo_sit, err); AMMCE_QPERSE, AMMCE_FPRIVATO, AMMCE_QPPRIVATE, NULL };
for (int i = 0; field[i]; i++)
{
real val = _ammpro.get(field[i]);
val *= _fraction;
cce.arrotonda(val);
((TRectype&)_ammpro).put(field[i], val);
}
}
}
else
{
TLocalisamfile ammce(LF_AMMCE);
int err = _ammpro.rewrite_write(ammce);
if (err != NOERR)
error_box(TR("Errore %d durante la scrittura sugli ammortamenti del cespite %s"), err, (const char*)get(CESPI_IDCESPITE));
log(TR("- Scrittura ammpro %d: errore %d"), _tipo_sit, err);
}
} }
// Ritorna il record della categoria del cespite // Ritorna il record della categoria del cespite
@ -250,6 +270,7 @@ TTipoFabbricato TCespite::fabbricato() const
case 2: tf = tf_altro; break; case 2: tf = tf_altro; break;
default: break; default: break;
} }
CHECK(tf == tf_nessuno || veicolo() == tv_nessuno, "Fabbricato veicolato");
return tf; return tf;
} }
@ -264,6 +285,7 @@ TTipoVeicolo TCespite::veicolo() const
case 5: tv = tv_altro; break; case 5: tv = tv_altro; break;
default: break; default: break;
} }
CHECK(tv == tv_nessuno || fabbricato() == tf_nessuno, "Veicolo fabbricato");
return tv; return tv;
} }
@ -383,7 +405,11 @@ real TCespite::val_amm() const
} }
// Novita' 2006: gestione VNONAMM06 e VNONAMMC // Novita' 2006: gestione VNONAMM06 e VNONAMMC
val -= _salpro.get_real(SALCE_VNONAMM06); if (_tipo_sit == 1)
{
val -= _salpro.get_real(SALCE_VNONAMM06); // Considero i fabbricati solo in fiscale
}
if (_tipo_sit == 2) if (_tipo_sit == 2)
{ {
val += _salpro.get_real(SALCE_VNONAMM); // Metto nuovamente il VNONAMM fiscale ... val += _salpro.get_real(SALCE_VNONAMM); // Metto nuovamente il VNONAMM fiscale ...
@ -744,7 +770,8 @@ void TCespite::rip_jolly(TRelation& rel, const real& num, const real& den, int m
} }
movsem.put(flm[i], n); movsem.put(flm[i], n);
} }
rel.lfile(LF_MOVCE).rewrite(); if (!_in_memory)
rel.lfile(LF_MOVCE).rewrite();
} }
if (mode & 0x2) if (mode & 0x2)
@ -764,7 +791,8 @@ void TCespite::rip_jolly(TRelation& rel, const real& num, const real& den, int m
} }
movam.put(fla[i], n); movam.put(fla[i], n);
} }
rel.lfile(LF_MOVAM).rewrite(); if (!_in_memory)
rel.lfile(LF_MOVAM).rewrite();
} }
} }
@ -863,12 +891,10 @@ real TCespite::calc_quota(const real& valamm, const real& perric,
real quota = valamm * perric / CENTO; real quota = valamm * perric / CENTO;
pereff = perric; pereff = perric;
const TDitta_cespiti& cce = ditta_cespiti(); const TDitta_cespiti& cce = ditta_cespiti();
if (mov != NULL && cce.ragguaglio_ammortamenti_parti_vendute()) if (mov != NULL && cce.ragguaglio_ammortamenti_parti_vendute())
{ {
TRectype& ammmv = mov->curr(LF_AMMMV); TRectype& ammmv = mov->curr(LF_AMMMV);
TString note;
if (!ammmv.get_bool(AMMMV_FZQUO) && !ammmv.get_bool(AMMMV_FZPER)) if (!ammmv.get_bool(AMMMV_FZQUO) && !ammmv.get_bool(AMMMV_FZPER))
{ {
TDate inies, fines; TDate inies, fines;
@ -878,11 +904,14 @@ real TCespite::calc_quota(const real& valamm, const real& perric,
const long giorni_possesso = dtmov - fnc_max(inies, dtcomp) + 1; const long giorni_possesso = dtmov - fnc_max(inies, dtcomp) + 1;
const long giorni_esercizio = fines - inies + 1; const long giorni_esercizio = fines - inies + 1;
quota = quota * giorni_possesso / giorni_esercizio; quota = quota * giorni_possesso / giorni_esercizio;
TString256 note;
note.format( note.format(
FR("Ammortamenti ragguagliati a %d giorni di possesso su %d d'esercizio"), FR("Ammortamenti ragguagliati a %d giorni di possesso su %d d'esercizio"),
giorni_possesso, giorni_esercizio); giorni_possesso, giorni_esercizio);
ammmv.put(AMMMV_NOTE, note);
} }
ammmv.put(AMMMV_NOTE, note); else
ammmv.zero(AMMMV_NOTE); // nessuna nota da registrare
} }
const real coeff_durata = cce.coefficiente_durata_esercizio(); const real coeff_durata = cce.coefficiente_durata_esercizio();
@ -902,7 +931,6 @@ real TCespite::calc_quote_perse(const real& valamm, const real& peric, const rea
{ {
const TDitta_cespiti& cce = ditta_cespiti(); const TDitta_cespiti& cce = ditta_cespiti();
const real coeff_durata = cce.coefficiente_durata_esercizio(); const real coeff_durata = cce.coefficiente_durata_esercizio();
real quota = valamm * coeff_durata * peric / CENTO; real quota = valamm * coeff_durata * peric / CENTO;
if (mov_vend) if (mov_vend)
{ {
@ -968,10 +996,13 @@ void TCespite::agg_quota(const real& movvalamm, TRectype& rec, const char* field
HIDDEN const TString& catdi_get(const TRectype* pcatdi, const char* name, int sit) HIDDEN const TString& catdi_get(const TRectype* pcatdi, const char* name, int sit)
{ {
CHECK(pcatdi, "NULL CATDI record"); CHECK(pcatdi, "NULL CATDI record");
TString16 fname(name);
if (sit != 1) if (sit != 1)
{
TString16 fname(name);
fname.overwrite("PC", 0); fname.overwrite("PC", 0);
return pcatdi->get(fname); return pcatdi->get(fname);
}
return pcatdi->get(name);
} }
// Non sempre basta prendere un campo da AMMINI così com'è: // Non sempre basta prendere un campo da AMMINI così com'è:
@ -985,6 +1016,7 @@ const TString& TCespite::ammini_get(const char* pstar) const
const int fld = special.get_pos(pstar); const int fld = special.get_pos(pstar);
if (fld >= 0) // Should ALWAYS happen: tuttavia non è affatto grave! if (fld >= 0) // Should ALWAYS happen: tuttavia non è affatto grave!
{ {
const TDitta_cespiti& dc = ditta_cespiti();
const TRectype* pcatdi = NULL; const TRectype* pcatdi = NULL;
const TRectype* pcac = NULL; const TRectype* pcac = NULL;
@ -992,7 +1024,7 @@ const TString& TCespite::ammini_get(const char* pstar) const
int scelte = _ammini.get_int(AMMCE_SCELTE); int scelte = _ammini.get_int(AMMCE_SCELTE);
if (scelte != 1) // Cerco se esiste un record appropriato su CATDI if (scelte != 1) // Cerco se esiste un record appropriato su CATDI
{ {
const int anno = ditta_cespiti().esercizio_corrente(); const int anno = dc.esercizio_corrente();
const int gruppo = get_int(CESPI_CODCGRA); const int gruppo = get_int(CESPI_CODCGRA);
const TString4 specie = get(CESPI_CODSPA); const TString4 specie = get(CESPI_CODSPA);
const int categ = get_int(CESPI_CODCAT); const int categ = get_int(CESPI_CODCAT);
@ -1033,7 +1065,7 @@ const TString& TCespite::ammini_get(const char* pstar) const
if (!dtfunz.ok()) if (!dtfunz.ok())
{ {
TDate dtdummy; TDate dtdummy;
ditta_cespiti().esercizio_corrente(dtfunz, dtdummy); dc.esercizio_corrente(dtfunz, dtdummy);
} }
const int anno_funz = dtfunz.year(); const int anno_funz = dtfunz.year();
if (scelte == 2) if (scelte == 2)
@ -1074,7 +1106,7 @@ const TString& TCespite::ammini_get(const char* pstar) const
if (!dtfunz.ok()) if (!dtfunz.ok())
{ {
TDate dtdummy; TDate dtdummy;
ditta_cespiti().esercizio_corrente(dtfunz, dtdummy); dc.esercizio_corrente(dtfunz, dtdummy);
} }
const int anno_funz = dtfunz.year(); const int anno_funz = dtfunz.year();
if (anno_funz < 1988) if (anno_funz < 1988)
@ -1095,7 +1127,7 @@ const TString& TCespite::ammini_get(const char* pstar) const
bool TCespite::ammini_get_bool(const char* pfield) const bool TCespite::ammini_get_bool(const char* pfield) const
{ {
const TString& val = ammini_get(pfield); const TString& val = ammini_get(pfield);
return !val.blank(); return val.full();
} }
real TCespite::ammini_get_real(const char* pfield) const real TCespite::ammini_get_real(const char* pfield) const
@ -1473,7 +1505,8 @@ void TCespite::elabora_mov_neg(TRelation& rel, TRectype& tmv, TRectype& tmvam)
if (tmc.get_bool("B5")) // Calcolo plus/minus valenza if (tmc.get_bool("B5")) // Calcolo plus/minus valenza
cal_valenza(tmv, tmvam, ammmv); cal_valenza(tmv, tmvam, ammmv);
rel.lfile(LF_AMMMV).rewrite(); if (!_in_memory)
rel.lfile(LF_AMMMV).rewrite();
} }
// Scandisce tutti i movimenti del cespite fino alla data_limite // Scandisce tutti i movimenti del cespite fino alla data_limite
@ -1575,15 +1608,20 @@ void TCespite::scansione_movimenti(const TDate& data_limite, bool is_valid)
bool TCespite::controllo_fringe_benefit() bool TCespite::controllo_fringe_benefit()
{ {
const real fringe_benefit = ammini_get_real(AMMCE_FRINGEBEN); real fringe_benefit = ammini_get_real(AMMCE_FRINGEBEN);
if (fringe_benefit <= ZERO) if (fringe_benefit <= ZERO)
return false; // Niente fringe benefit: inutile continuare! return false; // Niente fringe benefit: inutile continuare!
const TDitta_cespiti& dc = ditta_cespiti();
// SOLO situazione fiscale di veicoli in uso a dipendenti dal 2006 // SOLO situazione fiscale di veicoli in uso a dipendenti dal 2006
if (_tipo_sit != 1 || !get_bool(CESPI_VEIDIP) || !auto_o_moto() || if (_tipo_sit != 1 || !get_bool(CESPI_VEIDIP) || !auto_o_moto() ||
!ditta_cespiti().legge_223_06()) !dc.legge_223_06())
return false; return false;
fringe_benefit *= dc.coefficiente_durata_esercizio();
dc.arrotonda(fringe_benefit);
const real quote = sum_fields(_ammpro, AMMCE_QNOR, AMMCE_QACC, AMMCE_QANT); const real quote = sum_fields(_ammpro, AMMCE_QNOR, AMMCE_QACC, AMMCE_QANT);
if (quote > fringe_benefit) if (quote > fringe_benefit)
{ {
@ -1804,7 +1842,7 @@ void TCespite::calc_amm_residui(bool is_valid)
const int uso_promiscuo = get_int(CESPI_USOPROM); const int uso_promiscuo = get_int(CESPI_USOPROM);
if (_tipo_sit == 1 && uso_promiscuo > 1) if (_tipo_sit == 1 && uso_promiscuo > 1)
agg_quota(valamm, _ammpro, "QNOR", true); agg_quota(valamm, _ammpro, AMMCE_QNOR, true);
else else
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);
@ -1816,7 +1854,7 @@ void TCespite::calc_amm_residui(bool is_valid)
_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, "QACC", false); agg_quota(valamm, _ammpro, AMMCE_QACC, false);
else else
_ammpro.zero(AMMCE_FPRIVATO); _ammpro.zero(AMMCE_FPRIVATO);
resamm -= qacc; resamm -= qacc;
@ -1838,7 +1876,7 @@ void TCespite::calc_amm_residui(bool is_valid)
_ammpro.put(AMMCE_QANT, qant); _ammpro.put(AMMCE_QANT, qant);
ammpro_put_perc(AMMCE_PANT, per_eff); ammpro_put_perc(AMMCE_PANT, per_eff);
if (_tipo_sit == 1 && uso_promiscuo > 1) if (_tipo_sit == 1 && uso_promiscuo > 1)
agg_quota(valamm, _ammpro, "QANT", false); agg_quota(valamm, _ammpro, AMMCE_QANT, false);
else else
_ammpro.zero(AMMCE_FPRIVATO); _ammpro.zero(AMMCE_FPRIVATO);
} }
@ -1917,7 +1955,7 @@ void TCespite::calc_amm_residui(bool is_valid)
void TCespite::agg_spe_man(bool is_valid) void TCespite::agg_spe_man(bool is_valid)
{ {
if (_tipo_sit != 1 || !is_valid || tipo() != tc_materiale) if (_tipo_sit != 1 || !is_valid || tipo() != tc_materiale || _in_memory)
return; return;
const real vspmanu = _salpro.get(SALCE_VSPMANU); const real vspmanu = _salpro.get(SALCE_VSPMANU);
@ -1925,7 +1963,7 @@ void TCespite::agg_spe_man(bool is_valid)
{ {
log(TR("- Aggiornamento spese di manutenzione")); log(TR("- Aggiornamento spese di manutenzione"));
TDitta_cespiti& cce = ditta_cespiti(); TDitta_cespiti& cce = ditta_cespiti();
const int tpspeman = get_int(CESPI_TPSPEMAN); const int tpspeman = get_int(CESPI_TPSPEMAN);
const char* field = NULL; // Nome del campo da incrementare const char* field = NULL; // Nome del campo da incrementare
if (tpspeman == 2 || (tpspeman == 4 && !cce.esente_art14())) if (tpspeman == 2 || (tpspeman == 4 && !cce.esente_art14()))
@ -1941,7 +1979,7 @@ void TCespite::agg_spe_man(bool is_valid)
TString16 key; TString16 key;
key.format("%04d%s%s", es, (const char*)gr, (const char*)sp); key.format("%04d%s%s", es, (const char*)gr, (const char*)sp);
TTable ccb("CCB"); // Uso TTable e non cache perche' devo anche aggiornare TTable ccb("CCB");
ccb.put("CODTAB", key); ccb.put("CODTAB", key);
const int err = ccb.read(); const int err = ccb.read();
if (err != NOERR) if (err != NOERR)
@ -1955,6 +1993,7 @@ void TCespite::agg_spe_man(bool is_valid)
speman += vspmanu * 0.25; // 25% speman += vspmanu * 0.25; // 25%
else else
speman += vspmanu * 0.05; // 5% speman += vspmanu * 0.05; // 5%
cce.arrotonda(speman);
ccb.put(field, speman); ccb.put(field, speman);
ccb.put("D0", TDate(TODAY)); ccb.put("D0", TDate(TODAY));
@ -1967,9 +2006,30 @@ void TCespite::agg_spe_man(bool is_valid)
} }
} }
bool TCespite::calc_amm(int tipo_sit, const TDate& data_limite, bool recalc_spe_man) bool TCespite::calc_amm(int tipo_sit, const TDate& data_limite,
bool recalc_spe_man, bool in_memory)
{ {
_tipo_sit = tipo_sit; _tipo_sit = tipo_sit;
_in_memory = in_memory;
if (in_memory)
{
TDate ini_es, fin_es;
const int cod_es = ditta_cespiti().esercizio_corrente(ini_es, fin_es);
if (data_limite >= ini_es && data_limite < fin_es)
{
real giorni = data_limite - ini_es + 1;
real totali = fin_es - ini_es + 1;
// se sono a fine mese di un anno normale approssimo al mese commerciale
if ((totali == 365 || totali == 366) && data_limite.is_end_month())
{
giorni /= 30; giorni.round();
totali = 12; // totali /= 30; totali.round();
}
_fraction = giorni / totali;
}
}
const TString16 idcespite = get(CESPI_IDCESPITE); // Keep it handy for debug purposes const TString16 idcespite = get(CESPI_IDCESPITE); // Keep it handy for debug purposes
log(FR("* Inizio calcolo situazione %d cespite %s"), tipo_sit, (const char*)idcespite); log(FR("* Inizio calcolo situazione %d cespite %s"), tipo_sit, (const char*)idcespite);
@ -2042,7 +2102,6 @@ void TCespite::load_saldi(const int tiposit, const int esercizio)
_ammpro = _ammini; _ammpro = _ammini;
} }
TCespite::TCespite() TCespite::TCespite()
: TRectype(LF_CESPI), _salini(LF_SALCE), _salpro(LF_SALCE), _ammini(LF_AMMCE), _ammpro(LF_AMMCE) : TRectype(LF_CESPI), _salini(LF_SALCE), _salpro(LF_SALCE), _ammini(LF_AMMCE), _ammpro(LF_AMMCE)
{ {

View File

@ -14,6 +14,8 @@ class TCespite : public TRectype
int _tipo_sit; int _tipo_sit;
TRectype _salini, _salpro; TRectype _salini, _salpro;
TRectype _ammini, _ammpro; TRectype _ammini, _ammpro;
bool _in_memory;
real _fraction;
protected: protected:
real un_milione() const; real un_milione() const;
@ -73,7 +75,8 @@ protected:
bool controllo_fringe_benefit(); bool controllo_fringe_benefit();
public: public:
bool calc_amm(int tipo_sit, const TDate& data_limite, bool calc_spe_man = FALSE); bool calc_amm(int tipo_sit, const TDate& data_limite,
bool calc_spe_man = false, bool in_memory = false);
const TRectype& categoria() const; const TRectype& categoria() const;
TTipo_cespite tipo() const; TTipo_cespite tipo() const;

View File

@ -38,36 +38,54 @@ TOpenesc_mask::TOpenesc_mask()
// Controlla che siano stati stampati i bollati e chiuse le attivita // Controlla che siano stati stampati i bollati e chiuse le attivita
bool TOpenesc_mask::check_oldes() bool TOpenesc_mask::check_oldes()
{ {
bool ok = TRUE; bool ok = true;
const TString& oldes = get(F_OLDES);
TRelation rel("CCB"); TRelation rel("CCB");
TRectype& ccb = rel.curr(); TRectype& ccb = rel.curr();
ccb.put("CODTAB", get(F_OLDES)); ccb.put("CODTAB", oldes);
TCursor cur(&rel, "", 1, &ccb, &ccb); TCursor cur(&rel, "", 1, &ccb, &ccb);
const long items = cur.items(); const long items = cur.items();
cur.freeze(); cur.freeze();
TString msg;
int error = 0;
for (cur = 0L; cur.pos() < items; ++cur) for (cur = 0L; cur.pos() < items; ++cur)
{ {
const bool b1 = ccb.get_bool("B1"); const bool b1 = ccb.get_bool("B1");
const bool b2 = ccb.get_bool("B2"); const bool b2 = ccb.get_bool("B2");
if (!b1 || b2) if (!b1 || b2)
{ {
TString msg;
msg << TR("Non è possibile aprire il nuovo esercizio in quanto ");
if (!b1) if (!b1)
msg << TR("non è stato stampato il bollato"); {
msg << TR("Non è stato stampato il bollato dell'attività");
error |= 0x1;
}
else else
msg << TR("è già stata effettuata la chiusura"); {
msg << TR("E' già stata effettuata la chiusura dell'attività");
error |= 0x2;
}
const TString8 codatt = ccb.get("CODTAB").mid(4); const TString8 codatt = ccb.get("CODTAB").mid(4);
msg << TR("\ndell'attività ") << cache().get("%CAT", codatt, "S0"); msg << ' ' << oldes << ' ' << cache().get("%CAT", codatt, "S0") << ".\n";
#ifdef DBG
msg << "\nSi desidera forzare la riapertura?";
ok = yesno_box(msg);
#else
ok = error_box(msg);
#endif
break;
} }
} }
if (error)
{
if (get_int(F_NEWES) >= _dc.esercizio_corrente())
{
if (error & 0x1)
{
msg << TR("Verra' effettuata un'apertura provvisoria.") << '\n';
set(F_PROVVIS, true);
}
msg << TR("Si desidera proseguire ugualmente?");
ok = yesno_box(msg);
}
else
ok = error_box(msg);
}
return ok; return ok;
} }
@ -135,7 +153,7 @@ protected:
public: public:
bool crea_esercizio(int oldes, int newes, const TDate& ies, const TDate& fes) const; bool crea_esercizio(int oldes, int newes, const TDate& ies, const TDate& fes) const;
void crea_attivita(int oldes, int newes) const; void crea_attivita(int oldes, int newes, bool provvis) const;
void crea_registro(int oldes, int newes) const; void crea_registro(int oldes, int newes) const;
void crea_categorie(int oldes, int newes) const; void crea_categorie(int oldes, int newes) const;
void crea_saldi(int oldes, int newes) const; void crea_saldi(int oldes, int newes) const;
@ -224,7 +242,7 @@ bool TOpenesc::crea_esercizio(int oldes, int newes, const TDate& ies, const TDat
return true; return true;
} }
void TOpenesc::crea_attivita(int oldes, int newes) const void TOpenesc::crea_attivita(int oldes, int newes, bool provvis) const
{ {
TRelation rel("CCB"); TRelation rel("CCB");
TRectype& ccb = rel.curr(); TRectype& ccb = rel.curr();
@ -234,12 +252,14 @@ void TOpenesc::crea_attivita(int oldes, int newes) const
cur.freeze(); cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur) for (cur = 0L; cur.pos() < items; ++cur)
{ {
ccb.put("B2", TRUE); // Setta flag di chiusa if (!provvis)
rel.rewrite(); {
ccb.put("B2", true); // Setta flag di chiusa
rel.rewrite();
}
// Crea nuova attività // Crea nuova attività
TString16 codtab = ccb.get("CODTAB"); TString16 codtab = ccb.get("CODTAB");
TString8 str; str.format("%04d", newes); TString4 str; str.format("%04d", newes);
codtab.overwrite(str); codtab.overwrite(str);
const bool leasing = ccb.get_bool("B0"); const bool leasing = ccb.get_bool("B0");
const TString8 codreg = ccb.get("S6"); const TString8 codreg = ccb.get("S6");
@ -247,7 +267,9 @@ void TOpenesc::crea_attivita(int oldes, int newes) const
ccb.put("CODTAB", codtab); ccb.put("CODTAB", codtab);
ccb.put("B0", leasing); ccb.put("B0", leasing);
ccb.put("S6", codreg); ccb.put("S6", codreg);
rel.write(); int err = rel.write();
if (err != NOERR)
rel.rewrite();
} }
} }
@ -287,7 +309,9 @@ void TOpenesc::crea_categorie(int oldes, int newes) const
cat.put(CATDI_CODES, newes); cat.put(CATDI_CODES, newes);
cat.zero(CATDI_DATE); cat.zero(CATDI_DATE);
cat.zero(CATDI_TPOP); cat.zero(CATDI_TPOP);
rel.write(); int err = rel.write();
if (err != NOERR)
rel.rewrite();
} }
} }
@ -302,7 +326,8 @@ void TOpenesc::incr_riv(TRectype& rec, const char* riv, const char* anni) const
void TOpenesc::test_alien(const TRectype& salce, const TDate& fines) const void TOpenesc::test_alien(const TRectype& salce, const TDate& fines) const
{ {
if (null_fields(salce, SALCE_NUMELE, SALCE_CSTO, SALCE_RIV75, SALCE_RIV83, SALCE_RIV90, SALCE_RIV91, SALCE_RIVGF)) if (null_fields(salce, SALCE_NUMELE, SALCE_CSTO, SALCE_RIV75, SALCE_RIV83,
SALCE_RIV90, SALCE_RIV91, SALCE_RIVGF, SALCE_RIVGC))
{ {
const TString16 idcespite = salce.get(SALCE_IDCESPITE); const TString16 idcespite = salce.get(SALCE_IDCESPITE);
TLocalisamfile cespiti(LF_CESPI); TLocalisamfile cespiti(LF_CESPI);
@ -334,7 +359,7 @@ void TOpenesc::crea_saldi(int oldes, int newes) const
TEsercizi_contabili esc; TEsercizi_contabili esc;
const TDate fines = esc[oldes].fine(); const TDate fines = esc[oldes].fine();
TProgind pi(items, "Apertura saldi", FALSE, TRUE); TProgind pi(items, TR("Apertura saldi"), FALSE, TRUE);
for (cur = 0; cur.pos() < items; ++cur) for (cur = 0; cur.pos() < items; ++cur)
{ {
pi.addstatus(1); pi.addstatus(1);
@ -359,9 +384,7 @@ void TOpenesc::crea_saldi(int oldes, int newes) const
const int err = rel.write(); const int err = rel.write();
if (err != NOERR) // Should never happen! if (err != NOERR) // Should never happen!
{
rel.rewrite(); rel.rewrite();
}
} }
} }
@ -423,9 +446,10 @@ void TOpenesc::main_loop()
const int newes = m.get_int(F_NEWES); const int newes = m.get_int(F_NEWES);
const TDate ies(m.get(F_NEWINIZIO)); const TDate ies(m.get(F_NEWINIZIO));
const TDate fes(m.get(F_NEWFINE)); const TDate fes(m.get(F_NEWFINE));
const bool provvis = m.get_bool(F_PROVVIS);
if (crea_esercizio(oldes, newes, ies, fes)) if (crea_esercizio(oldes, newes, ies, fes))
{ {
crea_attivita(oldes, newes); crea_attivita(oldes, newes, provvis);
crea_registro(oldes, newes); crea_registro(oldes, newes);
crea_categorie(oldes, newes); crea_categorie(oldes, newes);
crea_saldi(oldes, newes); crea_saldi(oldes, newes);
@ -438,6 +462,6 @@ void TOpenesc::main_loop()
int ce2200(int argc, char* argv[]) int ce2200(int argc, char* argv[])
{ {
TOpenesc a; TOpenesc a;
a.run(argc, argv, TR("Cambio esercizio")); a.run(argc, argv, TR("Apertura esercizio cespiti"));
return 0; return 0;
} }

View File

@ -6,3 +6,4 @@
#define F_NEWES 106 #define F_NEWES 106
#define F_NEWINIZIO 107 #define F_NEWINIZIO 107
#define F_NEWFINE 108 #define F_NEWFINE 108
#define F_PROVVIS 109

View File

@ -88,6 +88,11 @@ BEGIN
WARNING "La data di fine esercizio deve essere successiva a quella di inizio" WARNING "La data di fine esercizio deve essere successiva a quella di inizio"
END END
BOOLEAN F_PROVVIS
BEGIN
PROMPT 2 5 "Apertura provvisoria (per simulazioni)"
END
BUTTON DLG_OK 12 2 BUTTON DLG_OK 12 2
BEGIN BEGIN
PROMPT -12 -1 "" PROMPT -12 -1 ""