void mmReportPayeeExpenses::RefreshData() { data_.clear(); valueList_.clear(); positiveTotal_ = 0.0; negativeTotal_ = 0.0; std::map<int, std::pair<double, double> > payeeStats; getPayeeStats(payeeStats, date_range_ , mmIniOptions::instance().ignoreFutureTransactions_); data_holder line; for (const auto& entry : payeeStats) { positiveTotal_ += entry.second.first; negativeTotal_ += entry.second.second; Model_Payee::Data* payee = Model_Payee::instance().get(entry.first); if (payee) line.name = payee->PAYEENAME; line.incomes = entry.second.first; line.expenses = entry.second.second; data_.push_back(line); if (line.incomes + line.expenses < 0) { ValuePair vp; vp.label = line.name; vp.amount = line.incomes + line.expenses; valueList_.push_back(vp); } } }
void mmReportPayeeExpenses::RefreshData() { data_.clear(); valueList_.clear(); positiveTotal_ = 0.0; negativeTotal_ = 0.0; std::map<int, std::pair<double, double> > payeeStats; getPayeeStats(payeeStats, const_cast<mmDateRange*>(m_date_range) , Option::instance().IgnoreFutureTransactions()); data_holder line; mmHTMLBuilder hb; for (const auto& entry : payeeStats) { positiveTotal_ += entry.second.first; negativeTotal_ += entry.second.second; Model_Payee::Data* payee = Model_Payee::instance().get(entry.first); line.name = payee ? payee->PAYEENAME : ""; line.incomes = entry.second.first; line.expenses = entry.second.second; line.color = hb.getRandomColor((line.incomes + line.expenses) > 0); data_.push_back(line); } //Order by expenses + deposits diff std::stable_sort(data_.begin(), data_.end() , [](const data_holder& x, const data_holder& y) { if (x.expenses + x.incomes != y.expenses + y.incomes) return x.expenses + x.incomes < y.expenses + y.incomes; else return x.name < y.name; } ); for (const auto& entry : data_) { ValueTrio vt; vt.label = entry.name; vt.amount = fabs(entry.incomes + entry.expenses); vt.color = entry.color; valueList_.push_back(vt); } }