#include #include #include "celib.h" #include "../cg/cglib01.h" /////////////////////////////////////////////////////////// // Ditta cespiti /////////////////////////////////////////////////////////// // Carica i dati relativi alla ditta corrente dei cespiti void TDitta_cespiti::load_default() { _ditta = prefix().get_codditta(); TConfig dit(CONFIG_DITTA); _esercizio = dit.get_int("CODESCORR"); if (_esercizio <= 0) { const TDate oggi(TODAY); _esercizio = oggi.year(); } _gruppo = dit.get("GRUPPOCORR"); TString16 str = dit.get("SPECIECORR"); str.strip("\""); _specie = str; _data_primi_ricavi = dit.get("CADTR"); _anno_tuir = dit.get_int("CATSU"); str.format("%04d", _esercizio); _cce = cache().get("CCE", str); } void TDitta_cespiti::update_when_needed() { if (_ditta != prefix().get_codditta()) load_default(); } void TDitta_cespiti::set_attivita(int esercizio, const TString& gruppo, const TString& specie) { if (esercizio <= 0) { const TDate oggi(TODAY); _esercizio = oggi.year(); } else _esercizio = esercizio; _gruppo = gruppo; _specie = specie; TConfig dit(CONFIG_DITTA); dit.set("CODESCORR", _esercizio); dit.set("GRUPPOCORR", _gruppo); TString16 str; str << '"' << _specie << '"'; dit.set("SPECIECORR", str); _data_primi_ricavi = dit.get("CADTR"); _anno_tuir = dit.get_int("CATSU"); _ditta = prefix().get_codditta(); str.format("%d", _esercizio); _cce = cache().get("CCE", str); } void TDitta_cespiti::get_attivita(int& esercizio, TString& gruppo, TString& specie) { esercizio = _esercizio; gruppo = _gruppo; specie = _specie; } int TDitta_cespiti::esercizio_corrente(TDate& inies, TDate& fines) const { TEsercizi_contabili esc; const TEsercizio& e = esc[_esercizio]; inies = e.inizio(); fines = e.fine(); return _esercizio; } void TDitta_cespiti::init_mask(TMask& m) { update_when_needed(); TBit_array found; bool started = FALSE; bool finished = FALSE; for (int i = 0; !finished && i < 12; i++) { TMask_field& f = m.fld(i); if (started) { switch (f.size()) { case 4: if (f.is_kind_of(CLASS_REAL_FIELD)) { if (!found[1]) // Non ho ancora trovato l'esercizio { f.set(_esercizio); found.set(1, TRUE); } } else if (f.is_edit()) { if (found[4] && !found[5]) // Ho trovato gruppo ma non specie { f.set(_specie); found.set(5); finished = TRUE; } } break; case 2: if (!found[4] && f.is_kind_of(CLASS_REAL_FIELD)) // Non ho ancora trovato il gruppo { f.set(_gruppo); found.set(4); } break; default: if (f.is_kind_of(CLASS_GROUPBOX_FIELD)) finished = TRUE; break; } } else started = f.dlg() <= 0 && f.class_id() == CLASS_GROUPBOX_FIELD; } CHECK(started && found.ones(), "Maschera in formato scandaloso"); } // Arrotonda un numero in base ai parametri ditta void TDitta_cespiti::arrotonda(real& n) const { const char tipo = _cce.get_char("S6"); const int dec = TCurrency::get_firm_dec(); switch (tipo) { case '+': n.ceil(dec); break; case '-': n.floor(dec); break; default : n.round(dec); break; } } bool TDitta_cespiti::professionista() const { return _cce.get_bool("B0"); } bool TDitta_cespiti::esercizio_costituzione() const { return _cce.get_bool("B1"); } real TDitta_cespiti::coefficiente_durata_esercizio() const { return _cce.get_real("S5"); } bool TDitta_cespiti::rinvio_ammortamento_ai_primi_ricavi() const { return _cce.get_bool("B2"); } bool TDitta_cespiti::ammortamento_parti_vendute() const { return _cce.get_bool("B3"); } bool TDitta_cespiti::ragguaglio_ammortamenti_parti_vendute() const { return _cce.get_bool("B4"); } bool TDitta_cespiti::esente_art14() const { return _cce.get_bool("B7"); } // Inizializza una ditta cespiti vuota TDitta_cespiti::TDitta_cespiti() : _cce(LF_TAB) { load_default(); } // Ritorna la ditta cespiti corrente // Creandola la prima volta TDitta_cespiti& ditta_cespiti() { static TDitta_cespiti* _firm = NULL; if (_firm == NULL) _firm = new TDitta_cespiti; return *_firm; } /////////////////////////////////////////////////////////// // Form cespiti /////////////////////////////////////////////////////////// bool TForm_cespiti::validate(TForm_item& fld, TToken_string& val) { const TString16 code = val.get(0); if (code == "_DESCAT") { const TString8 fgr = val.get(); const TString8 fsp = val.get(); const TString8 fca = val.get(); TString4 gruppo = fld.find_field(fgr).get(); gruppo.right_just(2, '0'); TString4 specie = fld.find_field(fsp).get(); TString4 categoria = fld.find_field(fca).get(); categoria.right_just(2, '0'); TString16 key; key << gruppo << specie << categoria; const TRectype& cac = cache().get("%CAC", key); if (cac.empty()) { key.overwrite(" "); const TRectype& cac2 = cache().get("%CAC", key); fld.set(cac2.get("S0")); } else fld.set(cac.get("S0")); } return TForm::validate(fld,val); } TForm_cespiti::TForm_cespiti(const char* name) : TForm(name) { }