diff --git a/src/view/StatsPanel.cpp b/src/view/StatsPanel.cpp index 2349174..da766eb 100644 --- a/src/view/StatsPanel.cpp +++ b/src/view/StatsPanel.cpp @@ -163,17 +163,18 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT std::vector::iterator accountIt; std::map::iterator categoriesIt; std::map >::iterator accountYearIt; + std::map::iterator accountMonthIt; int total; - int account, size, i, a, b, nbDays; + int account, i, nbDays; QString value, v; User* user = _kiss->GetUser(); - QDate date; - bool failed; + QDate date, start, end; QLineSeries * series = new QLineSeries(); QLineSeries * series0 = series; QDateTimeAxis *axisX = new QDateTimeAxis; QDateTime xValue; - + double previous; + if (_chartView) { _plot->removeAllSeries(); @@ -189,9 +190,9 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT _kiss->GetMonthStats(monthFrom, yearFrom, nbDays, &operations, &categories, &tags); // Line on 0 all over the years - for (a=0; aappend(xValue.toMSecsSinceEpoch(), 0.0); } @@ -201,20 +202,19 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT axisX->setFormat("dd"); _plot->addSeries(series); - i=0; - for (account = 0, i = 0, accountIt = user->_accounts.begin(); accountIt != user->_accounts.end(); + for (account = 0, accountIt = user->_accounts.begin(); accountIt != user->_accounts.end(); account++, accountIt++) { if (_account->item(account)->checkState() != Qt::Checked) continue; series = new QLineSeries(); - for (a=0; aappend(xValue.toMSecsSinceEpoch(), - (double) operations[accountIt->id][a] / 100); + (double) operations[accountIt->id][i] / 100); } series->setName(user->GetAccountName(accountIt->id)); @@ -226,15 +226,14 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT _kiss->GetStats(monthFrom, yearFrom, monthTo, yearTo, &accountAmounts, &categories, &tags); // Line on 0 all over the years - nbDays = ((yearTo - yearFrom) + 1) * 12; - for (a=0; a<(nbDays/12); a++) + start = QDate(yearFrom, monthFrom+1, 1); + end = QDate(yearTo, monthTo+1, 1); + end = end.addMonths(1).addMonths(-1); + date = start; + for (date = start; date <= end; date = date.addMonths(1)) { - for(b=0; b<12; b++) - { - date = QDate(yearFrom+a, monthFrom+b+1, 1); - xValue.setDate(date); - series->append(xValue.toMSecsSinceEpoch(), 0.0); - } + xValue.setDate(date); + series->append(xValue.toMSecsSinceEpoch(), 0.0); } axisX->setLabelsAngle(-60); @@ -254,38 +253,24 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT } series = new QLineSeries(); - for(a = 0, accountYearIt = accountAmounts[accountIt->id].begin(); + previous = 0.0; + for(accountYearIt = accountAmounts[accountIt->id].begin(); accountYearIt != accountAmounts[accountIt->id].end(); - accountYearIt++, a++) + accountYearIt++) { - for(b = 0; b<=12; b++) - { - date = QDate(yearFrom+a, b+1, 1); + for(accountMonthIt = accountAmounts[accountIt->id][accountYearIt->first].begin(); + accountMonthIt != accountAmounts[accountIt->id][accountYearIt->first].end(); + accountMonthIt++) + { + date = QDate(accountYearIt->first, accountMonthIt->first+1, 1); xValue.setDate(date); - if (!accountAmounts[accountIt->id][accountYearIt->first].count(b)) - { - /* - If previously failed, continue to avoid to set - account to 0 (only for display) - */ - if (!b || failed) continue; - /* - Compute cur month value (if there are operations) - as next month value - */ - *series << QPointF(xValue.toMSecsSinceEpoch(), - (double) (accountAmounts[accountIt->id][accountYearIt->first][b-1] - + _kiss->CalcAccountAmount(accountIt->id, b-1, accountYearIt->first, 0)) / 100); - failed = true; - } - else - { - *series << QPointF(xValue.toMSecsSinceEpoch(), - (double) accountAmounts[accountIt->id][accountYearIt->first][b] / 100); - failed = false; - } - size++; + previous = accountMonthIt->second / 100; + *series << QPointF(xValue.toMSecsSinceEpoch(), previous); } + previous += _kiss->CalcAccountAmount(accountIt->id, date.month()-1, date.year(), 0)/100; + date = date.addMonths(1); + xValue.setDate(date); + *series << QPointF(xValue.toMSecsSinceEpoch(), previous) ; } series->setName(user->GetAccountName(accountIt->id)); _plot->addSeries(series);