5a4e83275c
git-svn-id: svn://10.65.10.50/trunk@11857 c028cbd2-c16b-5b4b-a496-9718f37d4682
791 lines
26 KiB
C++
Executable File
791 lines
26 KiB
C++
Executable File
#include <defmask.h>
|
|
#include <recarray.h>
|
|
#include <relapp.h>
|
|
#include <sheet.h>
|
|
#include <utility.h>
|
|
|
|
#include "ce1.h"
|
|
#include "ce2101.h"
|
|
#include "celib.h"
|
|
|
|
#include "ce1301a.h"
|
|
#include "../cg/cglib01.h"
|
|
|
|
|
|
#include "cespi.h"
|
|
#include "salce.h"
|
|
#include "ammce.h"
|
|
#include "catdi.h"
|
|
|
|
/////////////////////////////////////////////////////////
|
|
//Applicazione principale: prima puntata...
|
|
/////////////////////////////////////////////////////////
|
|
class TSelect_ammoces : public TRelation_application
|
|
{
|
|
TRelation* _rel;
|
|
TAutomask* _msk[4];
|
|
int _tipo;
|
|
real _aliqmax, _aliqmin, _aliqant;
|
|
|
|
private:
|
|
|
|
protected:
|
|
virtual bool user_create();
|
|
virtual bool user_destroy();
|
|
virtual TRelation* get_relation() const { return _rel; };
|
|
virtual bool changing_mask(int mode) { return TRUE; }
|
|
virtual TMask* get_mask(int mode);
|
|
|
|
void init_mask(TMask& m);
|
|
virtual void init_query_mode(TMask& m);
|
|
virtual void init_insert_mode(TMask& m);
|
|
virtual void init_modify_mode(TMask& m);
|
|
|
|
public:
|
|
void set_tipo_beni(int t) { _tipo = t; }
|
|
};
|
|
|
|
inline TSelect_ammoces& app() { return (TSelect_ammoces&)main_app(); }
|
|
//Continua piú avanti...
|
|
//-----------------------------------------------------------------------------------------------------------------------//
|
|
/////////////////////////////////////
|
|
//Maschera di query
|
|
/////////////////////////////////////
|
|
class TSelam_qmask : public TAutomask
|
|
{
|
|
int _staat;
|
|
real _residuof, _residuoc, _uniprice;
|
|
bool _ammo100;
|
|
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
void on_search_event(TOperable_field& o);
|
|
|
|
int calcola_stato_attivita();
|
|
bool cespite_ok() const;
|
|
|
|
public:
|
|
int stato_attivita() const { return _staat; }
|
|
real get_residuof() const { return _residuof; }
|
|
real get_residuoc() const { return _residuoc; }
|
|
void calc_res(bool prec);
|
|
|
|
TSelam_qmask();
|
|
};
|
|
|
|
//scelta tipo ordinamento
|
|
void TSelam_qmask::on_search_event(TOperable_field& o)
|
|
{
|
|
TToken_string order, fields, header;
|
|
if (o.dlg() >= F_SEARCH3)
|
|
{
|
|
order.add(CESPI_STABILIM); header.add(TR("Stabilimento"));
|
|
order.add(CESPI_REPARTO); header.add(FR("Reparto@10"));
|
|
}
|
|
if (o.dlg() >= F_SEARCH2)
|
|
{
|
|
order.add(CESPI_CODIMP); header.add(FR("Impianto@10"));
|
|
}
|
|
if (o.dlg() >= F_SEARCH1)
|
|
{
|
|
order.add(CESPI_CODCAT); header.add(TR("Cat"));
|
|
order.add(CESPI_DTCOMP); header.add(FR("Data Acq.@10"));
|
|
}
|
|
|
|
order.add(CESPI_IDCESPITE); header.add(FR("Codice@10"));
|
|
|
|
fields = order;
|
|
fields.add(CESPI_DESC); header.add(FR("Descrizione@50"));
|
|
|
|
TRelation rel(LF_CESPI);
|
|
|
|
TString filter;
|
|
if (!field(F_IMPIANTO).empty())
|
|
filter << CESPI_CODIMP << "==" << get(F_IMPIANTO);
|
|
|
|
TSorted_cursor cur(&rel, order, filter);
|
|
TCursor_sheet sht(&cur, fields, TR("Cespiti"), header, 0, 1);
|
|
if (sht.run() == K_ENTER)
|
|
{
|
|
TToken_string& row = sht.row();
|
|
const int cod_pos = row.items()-2;
|
|
set(F_IDCESPITE, row.get(cod_pos), TRUE);
|
|
stop_run(K_AUTO_ENTER);
|
|
}
|
|
}
|
|
|
|
int TSelam_qmask::calcola_stato_attivita()
|
|
{
|
|
const int ese = get_int(F_ESERCIZIO);
|
|
const int gru = get_int(F_GRUPPO);
|
|
const char* spe = get(F_SPECIE);
|
|
|
|
TString16 str;
|
|
str.format("%04d%02d%-4s", ese, gru, spe);
|
|
|
|
const TRectype& curr_ccb = cache().get("CCB", str);
|
|
if (curr_ccb.get_bool("B1")) // Bollato stampato
|
|
_staat = 1;
|
|
|
|
TDitta_cespiti& dc = ditta_cespiti();
|
|
dc.set_attivita(ese, gru, spe);
|
|
|
|
return _staat;
|
|
}
|
|
|
|
bool TSelam_qmask::cespite_ok() const
|
|
{
|
|
const TRectype & cespi = cache().get(LF_CESPI, get(F_IDCESPITE));
|
|
const bool ok = !cespi.empty();
|
|
return ok;
|
|
}
|
|
|
|
void TSelam_qmask::calc_res(bool prec)
|
|
{
|
|
TCespite ces (get(F_IDCESPITE));
|
|
// calcolo ammortamento sul cespite (per sit. fiscale(1) e civilistica(2))
|
|
TDate fine_es(get(F_FINE_ES));
|
|
ces.calc_amm(1, fine_es);
|
|
const TRectype& salce2=ces.sal_pro(); //rectype giá di "tipo fiscale"
|
|
const TRectype& ammce2=ces.amm_pro();
|
|
// determinazione del residuo fiscale
|
|
_residuof = ZERO;
|
|
_residuof = salce2.get_real(SALCE_CSTO)-salce2.get_real(SALCE_VNONAMM)+salce2.get_real(SALCE_RIV75)+salce2.get_real(SALCE_RIV83)+salce2.get_real(SALCE_RIV90)+salce2.get_real(SALCE_RIV91)+salce2.get_real(SALCE_RIVGF);
|
|
_residuof -= ammce2.get_real(AMMCE_QNORP)+ammce2.get_real(AMMCE_QACCP)+ammce2.get_real(AMMCE_QANTP)+ammce2.get_real(AMMCE_QPERSEP)+ammce2.get_real(AMMCE_FPRIVATOP)+ammce2.get_real(AMMCE_QPPRIVATEP);
|
|
if (!prec)
|
|
_residuof -= ammce2.get_real(AMMCE_QNOR)+ammce2.get_real(AMMCE_QACC)+ammce2.get_real(AMMCE_QANT)+ammce2.get_real(AMMCE_QPERSE)+ammce2.get_real(AMMCE_FPRIVATO)+ammce2.get_real(AMMCE_QPPRIVATE);
|
|
|
|
ces.calc_amm(2, fine_es);
|
|
//rectype giá di "tipo civilistico"
|
|
// determinazione del residuo civilistico
|
|
_residuoc = ZERO;
|
|
_residuoc = salce2.get_real(SALCE_CSTO)+salce2.get_real(SALCE_RIV75)+salce2.get_real(SALCE_RIV83)+salce2.get_real(SALCE_RIV90)+salce2.get_real(SALCE_RIV91)+salce2.get_real(SALCE_RIVGC);
|
|
_residuoc -= ammce2.get_real(AMMCE_QNORP)+ammce2.get_real(AMMCE_QACCP)+ammce2.get_real(AMMCE_QANTP);
|
|
if (!prec)
|
|
_residuoc -= ammce2.get_real(AMMCE_QNOR)+ammce2.get_real(AMMCE_QACC)+ammce2.get_real(AMMCE_QANT);
|
|
}
|
|
|
|
|
|
bool TSelam_qmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F_ESERCIZIO:
|
|
if (e == fe_close)
|
|
calcola_stato_attivita();
|
|
break;
|
|
|
|
case F_SEARCH1:
|
|
case F_SEARCH2:
|
|
case F_SEARCH3:
|
|
if (e == fe_button)
|
|
on_search_event(o);
|
|
break;
|
|
|
|
case F_IDCESPITE: //é come fare l'OR (F_IDCESPITE || F_IDCESPITE_I)
|
|
case F_IDCESPITE_I:
|
|
if (e == fe_close)
|
|
{
|
|
if (!cespite_ok())
|
|
return error_box(TR("Inserire un cespite valido")); //controlla che esista il cespite
|
|
if (stato_attivita() == 1)
|
|
warning_box(TR("E' stato stampato il bollato dell'anno:\nnon sono permesse modifiche")); //il bollato é stato stampato
|
|
|
|
TCespite ces (get(F_IDCESPITE)); // controlla che la categoria del cespite sia ammortizzabile
|
|
const TRectype& categoria = ces.categoria();
|
|
bool non_ammortizzabile = categoria.get_bool("B0");
|
|
if (non_ammortizzabile)
|
|
return error_box(TR("Impossibile effettuare ammortamenti perché il cespite\nappartiene ad una categoria di beni non ammortizzabili"));
|
|
|
|
int materiale = categoria.get_int("I0");
|
|
app().set_tipo_beni(materiale); //inizializza la variabile tipo
|
|
|
|
if (materiale == 0) // controlla che il cespite non sia per caso in leasing
|
|
{ // solo i cespiti materiali possono essere in leasing..
|
|
if (ces.get_bool(CESPI_LEASING) == TRUE)
|
|
return error_box(TR("Impossibile impostare le scelte per cespiti ceduti in leasing"));
|
|
}
|
|
|
|
const TDate& datafunz = ces.get_date("DTFUNZ"); // se la data di entrata in funzione non é nulla....
|
|
if (datafunz.ok())
|
|
{
|
|
calc_res(TRUE); // controllo dei residui fiscale e civilistico in ingresso (prec=TRUE)
|
|
if (_residuof==ZERO)
|
|
{
|
|
message_box(TR("Il valore fiscale del cespite risulta giá completamente ammortizzato"));
|
|
return TRUE;
|
|
}
|
|
|
|
if (_residuoc==ZERO)
|
|
{
|
|
message_box(TR("Il valore civilistico del cespite risulta giá completamente ammortizzato"));
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
TString key;
|
|
|
|
key = get(F_IDCESPITE);
|
|
key << '|' << get(F_ESERCIZIO) << "|2|1";
|
|
|
|
const TRectype & ammce = cache().get(LF_AMMCE, key);
|
|
if (!ammce.empty())
|
|
{
|
|
if (ammce.get_bool(AMMCE_FZPER) == TRUE)
|
|
return error_box(TR("Sul cespite sono state forzate le Percentuali:\nprocedere dalla forzatura ammortamenti su cespite"));
|
|
if (ammce.get_bool(AMMCE_FZQUO) == TRUE)
|
|
return error_box(TR("Sul cespite sono state forzate le Quote:\nprocedere dalla forzatura ammortamenti su cespite"));
|
|
}
|
|
|
|
key = get(F_IDCESPITE);
|
|
key << '|' << get(F_ESERCIZIO) << "|1";
|
|
const TRectype & salce = cache().get(LF_SALCE, key); // controlla se ammesso ammortamento 100% per beni inferiori a 516.46 Euro
|
|
|
|
_ammo100 = FALSE;
|
|
_uniprice = 516.46;
|
|
if (! salce.get_date(SALCE_DTSTBOLL).ok())
|
|
{
|
|
if (datafunz.ok() && (datafunz > get_date(F_INIZIO_ES) && datafunz < get_date(F_FINE_ES)) && salce.get_int(SALCE_ANNIAMM) == 0)
|
|
{
|
|
if (ces.get_bool(CESPI_TUIR) == TRUE)
|
|
{
|
|
const TDate& data_fine_es = get_date(F_FINE_ES);
|
|
ces.calc_amm(2, data_fine_es);
|
|
real valore = salce.get_real(SALCE_CSTO)-salce.get_real(SALCE_VNONAMM)+salce.get_real(SALCE_RIV75)+salce.get_real(SALCE_RIV83)+salce.get_real(SALCE_RIV90)+salce.get_real(SALCE_RIV91)+salce.get_real(SALCE_RIVGF);
|
|
real valoreuni = valore / salce.get_int(SALCE_NUMELE);
|
|
if (valoreuni <= _uniprice)
|
|
_ammo100 = TRUE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
real valore = salce.get_real(SALCE_CSTO)-salce.get_real(SALCE_VNONAMM)+salce.get_real(SALCE_RIV75)+salce.get_real(SALCE_RIV83)+salce.get_real(SALCE_RIV90)+salce.get_real(SALCE_RIV91)+salce.get_real(SALCE_RIVGF);
|
|
real valoreuni = valore / salce.get_int(SALCE_NUMELE);
|
|
if (valoreuni <= _uniprice)
|
|
_ammo100 = TRUE;
|
|
}
|
|
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
TSelam_qmask::TSelam_qmask() : TAutomask("ce1301a")
|
|
{
|
|
first_focus(F_IDCESPITE);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------------//
|
|
//////////////////////////////////////////////////////////////////
|
|
//Maschera BENI MATERIALI
|
|
//////////////////////////////////////////////////////////////////
|
|
class TSelam_mmask : public TAutomask
|
|
{
|
|
int _staat;
|
|
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
bool test_min(short quota, short minimo) const;
|
|
bool test_max(short nor, short ant, short acc) const;
|
|
|
|
public:
|
|
void set_stato_attivita(int sa) { _staat = sa; }
|
|
int stato_attivita() const { return _staat; }
|
|
|
|
TSelam_mmask() : TAutomask("ce1301b") { }
|
|
};
|
|
|
|
bool TSelam_mmask::test_min(short quota, short minimo) const
|
|
{
|
|
bool warning = FALSE;
|
|
const bool ammrit = get_bool(F_AMMRIT_CE);
|
|
if (!ammrit)
|
|
{
|
|
const real perq(get(quota));
|
|
const real minq(get(minimo));
|
|
warning = perq < minq;
|
|
}
|
|
return warning;
|
|
}
|
|
|
|
bool TSelam_mmask::test_max(short nor, short ant, short acc) const
|
|
{
|
|
real tot;
|
|
tot += get_real(nor);
|
|
tot += get_real(ant);
|
|
tot += get_real(acc);
|
|
return tot > 100.0;
|
|
}
|
|
|
|
bool TSelam_mmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F_CATEGORIA:
|
|
{
|
|
TDitta_cespiti& dc = ditta_cespiti();
|
|
dc.on_category_event(o, e, jolly);
|
|
}
|
|
break;
|
|
|
|
case F_AMMFISC_NOR_CE:
|
|
if (e == fe_modify || e == fe_close)
|
|
{
|
|
if (get_bool(F_AMM100_CE) == FALSE)
|
|
{
|
|
if (test_min(F_AMMFISC_NOR_CE, F_NORMIN)) // controlla se si producono quote perse fiscali
|
|
warning_box(TR("L'ammortamento normale è inferiore al minimo della tabella ministeriale:\n"
|
|
"Se non si seleziona l'ammortamento ritardato verranno generate delle quote perse"));
|
|
if (test_max(F_AMMFISC_NOR_CE, F_AMMFISC_ANT_CE, F_AMMFISC_ACC_CE)) // controlla totale percentuali impostate fiscali
|
|
return error_box(TR("Il totale delle percentuali di ammortamento fiscale supera il 100%"));
|
|
}
|
|
}
|
|
break;
|
|
|
|
case F_AMMFISC_ACC_CE:
|
|
if (e == fe_modify || e == fe_close)
|
|
{
|
|
if (test_max(F_AMMFISC_NOR_CE, F_AMMFISC_ANT_CE, F_AMMFISC_ACC_CE)) // controlla totale percentuali impostate fiscali
|
|
return error_box(TR("Il totale delle percentuali di ammortamento fiscale supera il 100%"));
|
|
}
|
|
break;
|
|
|
|
case F_AMMFISC_ANT_CE:
|
|
if (e == fe_modify || e == fe_close)
|
|
{
|
|
if (test_max(F_AMMFISC_NOR_CE, F_AMMFISC_ANT_CE, F_AMMFISC_ACC_CE)) // controlla totale percentuali impostate fiscali
|
|
return error_box(TR("Il totale delle percentuali di ammortamento fiscale supera il 100%"));
|
|
|
|
if (!o.empty() && test_min(F_AMMFISC_NOR_CE, F_NORMAX))
|
|
return error_box(TR("E' necessario completare l'ammortamento normale fiscale prima di calcolare quello anticipato fiscale"));
|
|
}
|
|
break;
|
|
|
|
case F_AMMCIV_NOR_CE:
|
|
if (e == fe_modify || e == fe_close)
|
|
{
|
|
if (test_max(F_AMMCIV_NOR_CE, F_AMMCIV_ANT_CE, F_AMMCIV_ACC_CE)) // controlla totale percentuali impostate civilistiche
|
|
return error_box(TR("Il totale delle percentuali di ammortamento civilistico supera il 100%"));
|
|
}
|
|
break;
|
|
|
|
case F_AMMCIV_ANT_CE:
|
|
if (e == fe_modify || e == fe_close)
|
|
{
|
|
if (test_max(F_AMMCIV_NOR_CE, F_AMMCIV_ANT_CE, F_AMMCIV_ACC_CE)) // controlla totale percentuali impostate civilistiche
|
|
return error_box(TR("Il totale delle percentuali di ammortamento civilistico supera il 100%"));
|
|
|
|
if (!o.empty() && test_min(F_AMMCIV_NOR_CE, F_NORMAX))
|
|
return error_box(TR("E' necessario completare l'ammortamento normale civilistico prima di calcolare quello anticipato civilistico"));
|
|
}
|
|
break;
|
|
|
|
case F_AMMCIV_ACC_CE:
|
|
if (e == fe_modify || e == fe_close)
|
|
{
|
|
if (test_max(F_AMMCIV_NOR_CE, F_AMMCIV_ANT_CE, F_AMMCIV_ACC_CE)) // controlla totale percentuali impostate civilistiche
|
|
return error_box(TR("Il totale delle percentuali di ammortamento civilistico supera il 100%"));
|
|
}
|
|
break;
|
|
|
|
case F_AMMRIT_CE:
|
|
if (e == fe_modify || e == fe_close)
|
|
{
|
|
if (get_bool(F_AMMRIT_CE) == TRUE)
|
|
{
|
|
if ((get_real(F_AMMFISC_NOR_CE) >= get_real(F_NORMIN)) || (get_real(F_AMMCIV_NOR_CE) >= get_real(F_NORMIN)))
|
|
return error_box(TR("Indicata la scelta di ammortamento ritardato ma il Normale supera il Minimo ministeriale"));
|
|
if (get_real(F_AMMFISC_ACC_CE) != 0 || get_real(F_AMMCIV_ACC_CE) != 0)
|
|
return error_box(TR("Impossibile scegliere contemporaneamente ammortamento Accelerato e Ritardato"));
|
|
}
|
|
}
|
|
break;
|
|
|
|
case F_ANTMIN:
|
|
case F_SCELTA:
|
|
if (e == fe_modify || e == fe_init)
|
|
{
|
|
if (((get_int(F_SCELTA) == 1) && (get_real(F_ANTMIN) == 0)) || get_int(F_SCELTA) != 1)
|
|
{
|
|
disable(F_AMMFISC_ANT_CE);
|
|
reset(F_AMMFISC_ANT_CE);
|
|
}
|
|
else
|
|
enable(F_AMMFISC_ANT_CE);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------------//
|
|
////////////////////////////////////////////////////////////////////
|
|
//Maschera BENI IMMATERIALI
|
|
////////////////////////////////////////////////////////////////////
|
|
class TSelam_imask : public TAutomask
|
|
{
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
public:
|
|
TSelam_imask() : TAutomask("ce1301c") { }
|
|
};
|
|
|
|
bool TSelam_imask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F_CATEGORIA:
|
|
case F_DESC_CAT:
|
|
{
|
|
TDitta_cespiti& dc = ditta_cespiti();
|
|
return dc.on_category_event(o, e, jolly);
|
|
}
|
|
break;
|
|
|
|
case F_AMMFISC_CE:
|
|
case F_AMMCIV_CE:
|
|
if (e == fe_modify || e == fe_close)
|
|
{
|
|
TCespite ces(get(F_IDCESPITE));
|
|
if ( (ces.get_int(CESPI_VINCOLO) != 2) && ( (get(F_AMMFISC_CE) > get(F_ALIQMAX)) || (get(F_AMMCIV_CE) > get(F_ALIQMAX)) ) )
|
|
return error_box(TR("L' ammortamento richiesto supera il limite della categoria"));
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------------------------------------------//
|
|
///////////////////////////////////////////////////////////
|
|
// Maschera di costi pluriennali
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TSelam_pmask : public TAutomask
|
|
{
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
public:
|
|
TSelam_pmask() : TAutomask("ce1301d") { }
|
|
};
|
|
|
|
bool TSelam_pmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F_CATEGORIA:
|
|
case F_DESC_CAT:
|
|
{
|
|
TDitta_cespiti& dc = ditta_cespiti();
|
|
return dc.on_category_event(o, e, jolly);
|
|
}
|
|
break;
|
|
|
|
case F_AMMFISC_CE:
|
|
case F_AMMCIV_CE:
|
|
if (e == fe_modify || e == fe_close)
|
|
{
|
|
TCespite ces(get(F_IDCESPITE));
|
|
if (ces.get_int(CESPI_VINCOLO) == 1)
|
|
{
|
|
if (ces.get_int(CESPI_ANNIRIC) == 0)
|
|
{
|
|
real amm_fisc(o.get());
|
|
if (amm_fisc == ZERO) //controlla l'obbligatorietá e la validitá dei campi (fiscale)
|
|
return error_box(TR("Compilare l'ammortamento scelto"));
|
|
else
|
|
{
|
|
if (amm_fisc < get_real(F_ALIQMIN))
|
|
return error_box(TR("L'ammortamento scelto é inferiore al minimo da Tabella"));
|
|
if (amm_fisc > get_real(F_ALIQMAX))
|
|
return error_box(TR("L'ammortamento scelto é superiore al minimo da Tabella"));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
real anni_ammo = get_real(F_ANNIAMMOREQ);
|
|
if ((anni_ammo == ZERO) && ces.get_bool(CESPI_LEASING) == TRUE)
|
|
return error_box(TR("Compilare gli anni ammortamento richiesti"));
|
|
else if (anni_ammo > get_int(F_ENTROANNI))
|
|
return error_box(TR("Il numero di anni di ammortamento scelti supera il limite da tabella"));
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------//
|
|
///////////////////////////////////////////////////////////
|
|
// Applicazione principale: seconda puntata
|
|
///////////////////////////////////////////////////////////
|
|
|
|
TMask* TSelect_ammoces::get_mask(int mode)
|
|
{
|
|
TMask* m = NULL;
|
|
if (mode == MODE_QUERY || mode == MODE_QUERYINS)
|
|
{
|
|
if (_msk[0] == NULL)
|
|
_msk[0] = new TSelam_qmask;
|
|
m = _msk[0];
|
|
}
|
|
else
|
|
{
|
|
switch(_tipo)
|
|
{
|
|
case 1:
|
|
if (_msk[2] == NULL)
|
|
_msk[2] = new TSelam_imask;
|
|
break;
|
|
case 2:
|
|
if (_msk[3] == NULL)
|
|
_msk[3] = new TSelam_pmask;
|
|
break;
|
|
default:
|
|
if (_msk[1] == NULL)
|
|
_msk[1] = new TSelam_mmask;
|
|
break;
|
|
}
|
|
m = _msk[_tipo+1];
|
|
}
|
|
return m;
|
|
}
|
|
|
|
bool TSelect_ammoces::user_create()
|
|
{
|
|
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_SALCE, LF_AMMCE, LF_CATDI, 0);
|
|
_rel = new TRelation (LF_AMMCE); // relazione principale su AMMCE
|
|
TString expr69, expr77;
|
|
expr69 << "IDCESPITE==IDCESPITE|CODES==CODES|TPSALDO==TPSALDO|TPAMM==2"; //seconda relazione su AMMCE (quella con i TPAMM=2)
|
|
_rel->add(LF_AMMCE, expr69, 1, 0, 69); //69 é l'alias di AMMCE
|
|
_rel->write_enable(-69); //abilita la scrittura su secondo AMMCE
|
|
expr77 << "IDCESPITE==IDCESPITE|CODES==CODES|TPSALDO==TPSALDO|TPAMM==3"; //terza relazione su AMMCE (quella con i TPAMM=3)
|
|
_rel->add(LF_AMMCE, expr77, 1, 0, 77); //77 é l'alias di AMMCE
|
|
_rel->write_enable(-77); //abilita la scrittura su terzo AMMCE
|
|
_rel->add(LF_CESPI, "IDCESPITE==IDCESPITE"); //estende la relazione con CESPI
|
|
_rel->add(LF_SALCE, "IDCESPITE==IDCESPITE|CODES==CODES|TPSALDO==TPSALDO");
|
|
memset(_msk, 0, sizeof(_msk));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool TSelect_ammoces::user_destroy()
|
|
{
|
|
for (int m = 3; m >= 0; m--)
|
|
if (_msk[m]) delete _msk[m];
|
|
delete _rel;
|
|
return TRUE;
|
|
}
|
|
|
|
void TSelect_ammoces::init_query_mode(TMask& m)
|
|
{
|
|
ditta_cespiti().init_mask(m);
|
|
}
|
|
|
|
void TSelect_ammoces::init_mask(TMask& m)
|
|
{
|
|
TDitta_cespiti& dc = ditta_cespiti(); //se il bollato dell'esercizio é stato stampato inibisce il REGISTRA
|
|
const int ese = _msk[0]->get_int(F_ESERCIZIO); //prende i dati attivitá dalla maschera di selezione
|
|
const int gru = _msk[0]->get_int(F_GRUPPO);
|
|
const char* spe = _msk[0]->get(F_SPECIE);
|
|
dc.set_attivita(ese, gru, spe);
|
|
dc.init_mask(m);
|
|
const bool can_edit = !dc.bollato_stampato();
|
|
m.enable(DLG_SAVEREC, can_edit); // inibisce la registrazione se bollato stampato
|
|
m.enable(DLG_DELREC, can_edit);
|
|
const TString16 idcespite = m.get(F_IDCESPITE);
|
|
const TCespite ces (idcespite);
|
|
|
|
TString key;
|
|
|
|
key = m.get(F_ESERCIZIO);
|
|
key << '|' << m.get(F_GRUPPO) << '|';
|
|
key << m.get(F_SPECIE) << '|';
|
|
key << m.get(F_CATEGORIA);
|
|
|
|
const TRectype & catdi = cache().get(LF_CATDI, key); //legge i valori dal file CATDI e li mette nei campi solo output delle msk
|
|
const int annofunz = m.get_date(F_DTFUNZ).year(); //getta l'anno di entrata in funzione del cespite
|
|
|
|
key = m.get(F_IDCESPITE);
|
|
key << '|' << m.get(F_ESERCIZIO) << "|1";
|
|
const TRectype & salce1 = cache().get(LF_SALCE, key);
|
|
|
|
switch (_tipo)
|
|
{
|
|
case 1: //immateriali
|
|
if (ces.get_int(CESPI_VINCOLO) == 2) //Controllo tipo ammortamento da categoria
|
|
{
|
|
m.clear(F_ALIQMAX);
|
|
m.clear(F_AMMFISC_CE);
|
|
m.clear(F_AMMCIV_CE);
|
|
m.set(F_ANNIAMMOREQ, ces.get_int(CESPI_ANNIRIC));
|
|
}
|
|
else
|
|
{
|
|
m.set(F_ALIQMAX, ces.get_real(CESPI_PIMM));
|
|
m.set(F_AMMFISC_CE, _rel->curr().get_real(AMMCE_PNOR));
|
|
m.set(F_AMMCIV_CE, _rel->curr(-69).get_real(AMMCE_PNOR));
|
|
m.clear(F_ANNIAMMOREQ);
|
|
}
|
|
|
|
if (annofunz < 1988) //mette i valori di categoria nei campi solo output
|
|
{
|
|
m.set(F_AMMFISC_CT, catdi.get(CATDI_PFNORVN));
|
|
m.set(F_AMMCIV_CT, catdi.get(CATDI_PCNORVN));
|
|
}
|
|
else if (annofunz == 1988)
|
|
{
|
|
m.set(F_AMMFISC_CT, catdi.get(CATDI_PFNORVT));
|
|
m.set(F_AMMCIV_CT, catdi.get(CATDI_PCNORVT));
|
|
}
|
|
else
|
|
{
|
|
m.set(F_AMMFISC_CT, catdi.get(CATDI_PFNORNT));
|
|
m.set(F_AMMCIV_CT, catdi.get(CATDI_PCNORNT));
|
|
}
|
|
|
|
break;
|
|
|
|
case 2: //pluriennali
|
|
m.set(F_ENTROANNI, ces.categoria().get("I3")); //scrive sulla maschera il numero di anni per l'ammortamento
|
|
|
|
if (annofunz < 1988) //mette i valori di categoria nei campi solo output
|
|
{
|
|
m.set(F_AMMFISC_CT, catdi.get(CATDI_PFNORVN));
|
|
m.set(F_AMMCIV_CT, catdi.get(CATDI_PCNORVN));
|
|
}
|
|
else if (annofunz == 1988)
|
|
{
|
|
m.set(F_AMMFISC_CT, catdi.get(CATDI_PFNORVT));
|
|
m.set(F_AMMCIV_CT, catdi.get(CATDI_PCNORVT));
|
|
}
|
|
else
|
|
{
|
|
m.set(F_AMMFISC_CT, catdi.get(CATDI_PFNORNT));
|
|
m.set(F_AMMCIV_CT, catdi.get(CATDI_PCNORNT));
|
|
}
|
|
|
|
if (ces.get_int(CESPI_VINCOLO) == 3) //se il cespite é a quote costanti...
|
|
{
|
|
if (!salce1.empty())
|
|
{
|
|
if (salce1.get_int(SALCE_ANNIAMM) != 0) //controlla la modificabilitá delle scelte dopo il primo anno
|
|
{
|
|
m.disable(DLG_SAVEREC);
|
|
error_box(TR("Ammortamento in quote costanti:\nimpossibile modificare le scelte dopo il primo esercizio di ammortamento"));
|
|
}
|
|
else
|
|
{
|
|
m.disable(F_AMMFISC_CE);
|
|
m.disable(F_AMMCIV_CE);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (m.get_int(F_ENTROANNI) <= m.get_int(F_NUMESERAMM))
|
|
{
|
|
m.disable(DLG_SAVEREC);
|
|
error_box(TR("Impossibile proseguire:\nammortamento oltre il limite di anni della Tabella"));
|
|
}
|
|
}
|
|
break;
|
|
|
|
default: //materiali
|
|
{
|
|
_aliqmax = ces.get_real(CESPI_PMAT); // calcola i valori predefiniti delle aliquote limite per cespiti materiali
|
|
_aliqmin = _aliqmax * 0.5;
|
|
if (!salce1.empty())
|
|
{
|
|
if (ces.get_bool(CESPI_USATO) == FALSE)
|
|
{
|
|
if (salce1.get_int(SALCE_ANNIAMM) <= 2)
|
|
{
|
|
if (ces.get_bool(CESPI_TUIR) == TRUE)
|
|
_aliqant = _aliqmax;
|
|
else
|
|
_aliqant = 15.0;
|
|
}
|
|
else
|
|
_aliqant = 0.0;
|
|
}
|
|
else
|
|
{
|
|
if (salce1.get_int(SALCE_ANNIAMM) != 0)
|
|
_aliqant = 0.0;
|
|
else
|
|
_aliqant = _aliqmax;
|
|
}
|
|
}
|
|
}
|
|
m.set(F_NORMIN, _aliqmin);
|
|
m.set(F_NORMAX, _aliqmax);
|
|
m.set(F_ANTMIN, _aliqant);
|
|
|
|
if (annofunz < 1988) //mette i valori di categoria nei campi solo output
|
|
{
|
|
m.set(F_AMMFISC_NOR_CT, catdi.get(CATDI_PFNORVN));
|
|
m.set(F_AMMFISC_ANT_CT, catdi.get(CATDI_PFANTVN));
|
|
m.set(F_AMMCIV_NOR_CT, catdi.get(CATDI_PCNORVN));
|
|
m.set(F_AMMCIV_ANT_CT, catdi.get(CATDI_PCANTVN));
|
|
}
|
|
else if (annofunz == 1988)
|
|
{
|
|
m.set(F_AMMFISC_NOR_CT, catdi.get(CATDI_PFNORVT));
|
|
m.set(F_AMMFISC_ANT_CT, catdi.get(CATDI_PFANTVT));
|
|
m.set(F_AMMCIV_NOR_CT, catdi.get(CATDI_PCNORVT));
|
|
m.set(F_AMMCIV_ANT_CT, catdi.get(CATDI_PCANTVT));
|
|
}
|
|
else
|
|
{
|
|
m.set(F_AMMFISC_NOR_CT, catdi.get(CATDI_PFNORNT));
|
|
m.set(F_AMMFISC_ANT_CT, catdi.get(CATDI_PFANTNT));
|
|
m.set(F_AMMCIV_NOR_CT, catdi.get(CATDI_PCNORNT));
|
|
m.set(F_AMMCIV_ANT_CT, catdi.get(CATDI_PCANTNT));
|
|
}
|
|
|
|
m.set(F_AMMFISC_ACC_CT, catdi.get(CATDI_PFACC));
|
|
m.set(F_AMMCIV_ACC_CT, catdi.get(CATDI_PCACC));
|
|
m.set(F_AMMRIT_CT, catdi.get(CATDI_AMMRIT));
|
|
m.set(F_AMM100_CT, catdi.get(CATDI_CSCEN));
|
|
break;
|
|
} //chiude lo switch
|
|
|
|
|
|
}
|
|
|
|
void TSelect_ammoces::init_insert_mode(TMask& m)
|
|
{
|
|
init_mask(m);
|
|
}
|
|
|
|
void TSelect_ammoces::init_modify_mode(TMask& m)
|
|
{
|
|
init_mask(m);
|
|
}
|
|
|
|
int ce1300(int argc, char* argv[])
|
|
{
|
|
TSelect_ammoces a;
|
|
a.run(argc, argv, TR("Scelta ammortamento per cespite"));
|
|
return 0;
|
|
}
|
|
|