Patch level : 12.0 812
Files correlati : cg2.exe Commento : cg2300 Reimplementato ordinamento
This commit is contained in:
parent
2a026fa2dd
commit
7092add9e5
@ -16,19 +16,26 @@
|
||||
|
||||
class TCompetenze_mask : public TAutomask
|
||||
{
|
||||
struct cont_contr_t
|
||||
{
|
||||
int gruppo;
|
||||
int conto;
|
||||
int s_conto;
|
||||
real importo;
|
||||
};
|
||||
std::vector<int> _regs;
|
||||
std::map<TToken_string*, real> _conts;
|
||||
std::vector<cont_contr_t> _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<TToken_string*, real>& 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<TToken_string*, real>::iterator& it, map<TToken_string*, real>::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<TToken_string*, real>& 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<TToken_string*, real>::iterator& it,
|
||||
map<TToken_string*, real>::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();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user