Exemplo n.º 1
0
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);
        }
    }
}
Exemplo n.º 2
0
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);
    }

}