diff --git a/src/cg/cg2300.cpp b/src/cg/cg2300.cpp index e12836aa1..c70fd367e 100644 --- a/src/cg/cg2300.cpp +++ b/src/cg/cg2300.cpp @@ -16,19 +16,26 @@ class TCompetenze_mask : public TAutomask { + struct cont_contr_t + { + int gruppo; + int conto; + int s_conto; + real importo; + }; std::vector _regs; - std::map _conts; + std::vector _conts; const char* get_ini(bool dataini) const; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; - static void clear_map(const map& is); - // Funzione becera di ordinamento della mappa _conts + // Funzione becera di ordinamento del vettore _conts void sort_conts(bool sort_by_imp = true); - static void swap_items(map::iterator& it, map::iterator& jt); - static bool is_minor_of(TToken_string* jt, TToken_string* it); + static void swap_items(cont_contr_t* it, cont_contr_t* jt); + static bool is_minor_of(cont_contr_t* jt, cont_contr_t* it); + static TString get_descr(int gruppo, int conto, int s_conto); void fill_contc(); void fill(); @@ -45,7 +52,7 @@ const char* TCompetenze_mask::get_ini(bool dataini) const bool TCompetenze_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { - switch(o.dlg()) + switch (o.dlg()) { case DLG_LINK: if (e == fe_button) @@ -67,7 +74,7 @@ bool TCompetenze_mask::on_field_event(TOperable_field& o, TField_event e, long j fill(); } case F_ANNO: - if(e == fe_init) set(F_ANNO, get_ini(true)); + if (e == fe_init) set(F_ANNO, get_ini(true)); break; case F_MESE: if (e == fe_init) @@ -78,48 +85,39 @@ bool TCompetenze_mask::on_field_event(TOperable_field& o, TField_event e, long j return true; } -void TCompetenze_mask::clear_map(const map& is) +TString TCompetenze_mask::get_descr(int gruppo, int conto, int s_conto) { - for(auto it = is.begin(); it != is.end(); ++it) - delete it->first; + TLocalisamfile pcont(LF_PCON); + pcont.put(PCN_GRUPPO, gruppo); + pcont.put(PCN_CONTO, conto); + pcont.put(PCN_SOTTOCONTO, s_conto); + pcont.read(); + return pcont.get(PCN_DESCR); } -bool TCompetenze_mask::is_minor_of(TToken_string* jt, TToken_string* it) +bool TCompetenze_mask::is_minor_of(cont_contr_t* jt, cont_contr_t* it) { - return jt->get_int(0) < it->get_int(0) - || (jt->get_int(0) == it->get_int(0) && jt->get_int(1) < it->get_int(1)) - || (jt->get_int(0) == it->get_int(0) && jt->get_int(1) == it->get_int(1) - && jt->get_int(2) < it->get_int(2)); + return jt->gruppo < it->gruppo + || (jt->gruppo == it->gruppo && jt->conto < it->conto) + || (jt->gruppo == it->gruppo && jt->conto == it->conto + && jt->s_conto < it->s_conto); } -void TCompetenze_mask::swap_items(map::iterator& it, - map::iterator& jt) +void TCompetenze_mask::swap_items(cont_contr_t* it, cont_contr_t* jt) { - TToken_string* appo = new TToken_string(); - for (int i = 0; i < it->first->items(); i++) - appo->add(it->first->get(i), i); - - const real appo_importo = it->second; - - for (int i = 0; i < jt->first->items(); i++) - it->first->add(jt->first->get(i), i); - it->second = jt->second; - - for (int i = 0; i < appo->items(); i++) - jt->first->add(appo->get(i), i); - jt->second = appo_importo; - - delete appo; + const cont_contr_t appo = *it; + *it = *jt; + *jt = appo; } void TCompetenze_mask::sort_conts(bool sort_by_imp) { - // Sopra cento rischia di essere leggermente lento - if( 1 < _conts.size() && _conts.size() < 100) + // Sopra 100 rischia di essere leggermente lento? + if (1 < _conts.size() && _conts.size() < 100) for (auto it = _conts.begin(); it != _conts.end(); ++it) - for (auto jt = it; jt != _conts.end(); ++jt) - if(sort_by_imp && jt->second > it->second || !sort_by_imp && is_minor_of(jt->first, it->first)) - swap_items(it, jt); + for (auto jt = (it+1); jt != _conts.end(); ++jt) + if (sort_by_imp && jt->importo > it->importo || !sort_by_imp && is_minor_of(&(*jt), &(*it))) + swap_items(&(*it), &(*jt)); } void TCompetenze_mask::fill_contc() @@ -130,10 +128,9 @@ void TCompetenze_mask::fill_contc() sf.hide(); sf.reset(); - clear_map(_conts); _conts.clear(); // Per ogni registrazione - for (int i=0; i < _regs.size(); ++i) + for (int i = 0; i < _regs.size(); ++i) { const int numreg = _regs[i]; rmovs.zero(); @@ -145,10 +142,10 @@ void TCompetenze_mask::fill_contc() // Per ogni riga della registrazione for (; rmovs.get_int(RMV_NUMREG) == numreg; rmovs.next()) { - const int gruppo = rmovs.get_int(RMV_GRUPPOC); - const int numcontc = rmovs.get_int(RMV_CONTOC); - const int sottoconto = rmovs.get_int(RMV_SOTTOCONTOC); - const TString& tipocc = rmovs.get(RMV_TIPOCC); + const int gruppo = rmovs.get_int(RMV_GRUPPOC); + const int numcontc = rmovs.get_int(RMV_CONTOC); + const int s_conto = rmovs.get_int(RMV_SOTTOCONTOC); + const TString& tipocc = rmovs.get(RMV_TIPOCC); const real importo(rmovs.get(RMV_IMPORTO)); if (tipocc.blank()) // Solo se il tipo di conto di contr. e' un conto, cioe' vuoto @@ -157,22 +154,16 @@ void TCompetenze_mask::fill_contc() auto it = _conts.begin(); for (; it != _conts.end(); ++it) { - if (it->first->get_int(0) == gruppo - && it->first->get_int(1) == numcontc - && it->first->get_int(2) == sottoconto) + if (it->gruppo == gruppo + && it->conto == numcontc + && it->s_conto == s_conto) break; } if (it != _conts.end()) - it->second += importo; + it->importo += importo; else - { - TToken_string* contr = new TToken_string(); - contr->add(gruppo); - contr->add(numcontc); - contr->add(sottoconto); - _conts.insert(_conts.end(), { contr, importo }); - } + _conts.insert(_conts.end(), { gruppo, numcontc, s_conto, importo }); } } } @@ -183,22 +174,18 @@ void TCompetenze_mask::fill_contc() real tot; tot = 0; for (auto it = _conts.begin(); it != _conts.end(); ++it) { - TLocalisamfile pcont(LF_PCON); - const char* gruppo = it->first->get(0); - const char* conto = it->first->get(1); - const char* sottoconto = it->first->get(2); - TString tipoc = it->first->get(3); - pcont.put(PCN_GRUPPO, gruppo); - pcont.put(PCN_CONTO, conto); - pcont.put(PCN_SOTTOCONTO, sottoconto); - pcont.read(); + const int gruppo = it->gruppo; + const int conto = it->conto; + const int s_conto = it->s_conto; + const TString& descr = get_descr(gruppo, conto, s_conto); + TToken_string& row = sf.row(-1); row.add(gruppo); row.add(conto); - row.add(sottoconto); - row.add(pcont.get(PCN_DESCR)); - row.add(it->second); - tot += it->second; + row.add(s_conto); + row.add(descr); + row.add(it->importo); + tot += it->importo; } sf.force_update(); @@ -209,9 +196,9 @@ void TCompetenze_mask::fill_contc() void TCompetenze_mask::fill() { - const int anno = get_int(F_ANNO); - const int mese = get_int(F_MESE); - TSheet_field& sf = sfield(F_MOVS); + const int anno = get_int(F_ANNO); + const int mese = get_int(F_MESE); + TSheet_field& sf = sfield(F_MOVS); TLocalisamfile movs(LF_MOV); sf.hide(); @@ -222,16 +209,16 @@ void TCompetenze_mask::fill() const TDate dataini(1, mese, anno); TDate dataend(dataini); dataend.set_end_month(); movs.put(MOV_DATAREG, dataini); - if(movs.read() != NULL) + if (movs.read() != NULL) { for (; movs.next() == NOERR && movs.get_date(MOV_DATAREG) <= dataend; ) { const int month_liq = movs.get_int(MOV_MESELIQ); TDate datareg(movs.get(MOV_DATAREG)); TDate datacomp(movs.get(MOV_DATACOMP)); - if(month_liq == 0 && datacomp < datareg || month_liq != 0 && month_liq < datareg.month()) + if (month_liq == 0 && datacomp < datareg || month_liq != 0 && month_liq < datareg.month()) { - _regs.insert(_regs.end(),movs.get_int(MOV_NUMREG)); + _regs.insert(_regs.end(), movs.get_int(MOV_NUMREG)); TToken_string& row = sf.row(-1); row.add(movs.get(MOV_NUMREG)); @@ -243,7 +230,6 @@ void TCompetenze_mask::fill() row.add(movs.get(MOV_PROTIVA)); row.add(movs.get(MOV_DESCR)); } - } } sf.force_update(); @@ -271,7 +257,7 @@ public: void TCompetenze_app::set_ini(bool dataini, const TString& set) const { - if(!set.empty()) + if (!set.empty()) { if (dataini) ini_set_string(CONFIG_DITTA, "cg", INI_ANNO, set); @@ -289,7 +275,7 @@ void TCompetenze_app::save_fields() const void TCompetenze_app::main_loop() { _msk = new TCompetenze_mask; - while (_msk->run() == K_ENTER) { } + while (_msk->run() == K_ENTER) {} save_fields(); }