diff --git a/kmymoney/reports/kreportchartview.cpp b/kmymoney/reports/kreportchartview.cpp --- a/kmymoney/reports/kreportchartview.cpp +++ b/kmymoney/reports/kreportchartview.cpp @@ -315,7 +315,7 @@ legendText.clear(); //set the cell value and tooltip - rowNum = drawPivotRowSet(it_row.key().id(), rowNum, it_row.value(), rowTypeList[i], legendText, 1, numColumns() - 1); + rowNum = drawPivotRowSet(it_row.key().id(), rowNum, it_row.value(), rowTypeList[i], legendText, 0, numColumns()); } } } @@ -359,7 +359,7 @@ legendText.clear(); //set the cell value and tooltip - rowNum = drawPivotRowSet(QString(), rowNum, (*it_innergroup).m_total, rowTypeList[i], legendText, 1, numColumns() - 1); + rowNum = drawPivotRowSet(QString(), rowNum, (*it_innergroup).m_total, rowTypeList[i], legendText, 0, numColumns()); } } ++it_innergroup; @@ -396,7 +396,7 @@ legendText.clear(); //set the cell value and tooltip - rowNum = drawPivotRowSet(QString(), rowNum, (*it_outergroup).m_total, rowTypeList[i], legendText, 1, numColumns() - 1); + rowNum = drawPivotRowSet(QString(), rowNum, (*it_outergroup).m_total, rowTypeList[i], legendText, 0, numColumns()); } } ++it_outergroup; @@ -424,7 +424,7 @@ legendText.clear(); //set the cell value - rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, 1, numColumns() - 1); + rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, 0, numColumns()); } } } @@ -455,15 +455,15 @@ if (config.isMixedTime() && (rowTypeList[i] == eActual || rowTypeList[i] == eForecast)) { if (rowTypeList[i] == eActual) { - rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, 1, config.currentDateColumn()); + rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, 0, config.currentDateColumn()); } else if (rowTypeList[i] == eForecast) { - rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, config.currentDateColumn(), numColumns() - 1); + rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, config.currentDateColumn(), numColumns() - config.currentDateColumn()); } else { - rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, 1, numColumns() - 1); + rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, 0, numColumns()); } } else { //set cell value - rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, 1, numColumns() - 1); + rowNum = drawPivotRowSet(QString(), rowNum, grid.m_total, rowTypeList[i], legendText, 0, numColumns()); } } } @@ -478,7 +478,7 @@ // Set up X axis labels (ie "abscissa" to use the technical term) QStringList abscissaNames; if (accountSeries()) { // if not, we will set these up while putting in the chart values. - int column = 1; + int column = 0; while (column < numColumns()) { abscissaNames += QString(columnHeadings[column++]).replace(" ", " "); } @@ -595,24 +595,23 @@ barDiagram->axes().at(1)->setLabels(labels); } -unsigned KReportChartView::drawPivotRowSet(const QString& rowAcc, int rowNum, const PivotGridRowSet& rowSet, const ERowType rowType, const QString& legendText, int startColumn, int endColumn) +unsigned KReportChartView::drawPivotRowSet(const QString& rowAcc, int rowNum, const PivotGridRowSet& rowSet, const ERowType rowType, const QString& legendText, int startColumn, int columnsToDraw) { if (coordinatePlane()->diagram()->datasetDimension() != 1) return ++rowNum; - //if endColumn is invalid, make it the same as numColumns - if (endColumn == 0) - endColumn = numColumns(); + //if columnsToDraw is invalid, make it the same as numColumns + if (columnsToDraw == 0) + columnsToDraw = numColumns(); MyMoneyFile* file = MyMoneyFile::instance(); double value; QString toolTip; if (( accountSeries() && !seriesTotals()) || - (!accountSeries() && seriesTotals())) { - justifyModelSize(endColumn > numColumns() - 1 ? endColumn + 1 : numColumns(), rowNum + 1); - } else { - justifyModelSize(rowNum + 1, endColumn > numColumns() - 1 ? endColumn + 1 : numColumns()); - } + (!accountSeries() && seriesTotals())) + justifyModelSize(columnsToDraw, rowNum + 1); + else + justifyModelSize(rowNum + 1, columnsToDraw); int precision = 0; if (!rowAcc.isEmpty()) { @@ -628,7 +627,7 @@ } } if (precision == 0) - precision = file->baseCurrency().pricePrecision(); + precision = MyMoneyMoney::denomToPrec(file->baseCurrency().smallestAccountFraction()); // Columns if (seriesTotals()) { @@ -647,7 +646,7 @@ this->setDataCell(0, rowNum, value, toolTip); } else { int column = startColumn; - while (column <= endColumn && column < numColumns()) { + while (column <= columnsToDraw && column < numColumns()) { //if zero and set to skip, increase column and continue with next value if (m_skipZero && rowSet[rowType][column].isZero()) { ++column; diff --git a/kmymoney/reports/pivottable.h b/kmymoney/reports/pivottable.h --- a/kmymoney/reports/pivottable.h +++ b/kmymoney/reports/pivottable.h @@ -127,7 +127,7 @@ QDate m_beginDate; QDate m_endDate; bool m_runningSumsCalculated; - + int m_startColumn; /** * For budget-vs-actual reports only, maps each account to the account which holds * the budget for it. If an account is not contained in this map, it is not included diff --git a/kmymoney/reports/pivottable.cpp b/kmymoney/reports/pivottable.cpp --- a/kmymoney/reports/pivottable.cpp +++ b/kmymoney/reports/pivottable.cpp @@ -115,15 +115,17 @@ if (m_config_f.isRunningSum()) m_config_f.setShowingRowTotals(false); - // if this is a months-based report - if (! m_config_f.isColumnsAreDays()) { - // strip out the 'days' component of the begin and end dates. - // we're only using these variables to contain year and month. - m_beginDate = QDate(m_beginDate.year(), m_beginDate.month(), 1); - m_endDate = QDate(m_endDate.year(), m_endDate.month(), 1); - } + if (m_config_f.isRunningSum() && + !m_config_f.isIncludingPrice() && + !m_config_f.isIncludingAveragePrice() && + !m_config_f.isIncludingMovingAverage() && + !m_config_f.isIncludingForecast() && + !m_config_f.isIncludingSchedules()) + m_startColumn = 1; + else + m_startColumn = 0; - m_numColumns = columnValue(m_endDate) - columnValue(m_beginDate) + 2; + m_numColumns = columnValue(m_endDate) - columnValue(m_beginDate) + 1 + m_startColumn; // 1 for m_beginDate values and m_startColumn for opening balance values //Load what types of row the report is going to show loadRowTypeList(); @@ -152,10 +154,13 @@ // // Get opening balances - // (for running sum reports only) - // - - if (m_config_f.isRunningSum()) + // Only net worth report qualifies + if (m_config_f.isRunningSum() && + !m_config_f.isIncludingPrice() && + !m_config_f.isIncludingAveragePrice() && + !m_config_f.isIncludingMovingAverage() && + !m_config_f.isIncludingForecast() && + !m_config_f.isIncludingSchedules()) calculateOpeningBalances(); // @@ -239,7 +244,7 @@ QMap loanBalances; QList::const_iterator it_transaction = transactions.constBegin(); - int colofs = columnValue(m_beginDate) - 1; + int colofs = columnValue(m_beginDate) - m_startColumn; while (it_transaction != transactions.constEnd()) { MyMoneyTransaction tx = (*it_transaction); QDate postdate = tx.postDate(); @@ -422,8 +427,8 @@ // use the user's locale to determine the week's start ? (m_beginDate.dayOfWeek() + 8 - QLocale().firstDayOfWeek()) % 7 : m_beginDate.month(); - int sourcecolumn = 1; - int destcolumn = 1; + int sourcecolumn = m_startColumn; + int destcolumn = m_startColumn; while (sourcecolumn < m_numColumns) { if (sourcecolumn != destcolumn) { #if 0 @@ -507,7 +512,13 @@ DEBUG_ENTER(Q_FUNC_INFO); // one column for the opening balance - m_columnHeadings.append("Opening"); + if (m_config_f.isRunningSum() && + !m_config_f.isIncludingPrice() && + !m_config_f.isIncludingAveragePrice() && + !m_config_f.isIncludingMovingAverage() && + !m_config_f.isIncludingForecast() && + !m_config_f.isIncludingSchedules()) + m_columnHeadings.append("Opening"); int columnpitch = m_config_f.columnPitch(); @@ -521,7 +532,7 @@ if (m_config_f.isColumnsAreDays()) { if (columnpitch == 1) { QDate columnDate = m_beginDate; - int column = 1; + int column = m_startColumn; while (column++ < m_numColumns) { QString heading = QLocale().monthName(columnDate.month(), QLocale::ShortFormat) + ' ' + QString::number(columnDate.day()); columnDate = columnDate.addDays(1); @@ -553,14 +564,14 @@ else { if (columnpitch == 12) { int year = m_beginDate.year(); - int column = 1; + int column = m_startColumn; while (column++ < m_numColumns) m_columnHeadings.append(QString::number(year++)); } else { int year = m_beginDate.year(); bool includeyear = (m_beginDate.year() != m_endDate.year()); int segment = (m_beginDate.month() - 1) / columnpitch; - int column = 1; + int column = m_startColumn; while (column++ < m_numColumns) { QString heading = QLocale().monthName(1 + segment * columnpitch, QLocale::ShortFormat); if (columnpitch != 1) @@ -672,7 +683,7 @@ void PivotTable::calculateRunningSums(PivotInnerGroup::iterator& it_row) { MyMoneyMoney runningsum = it_row.value()[eActual][0].calculateRunningSum(MyMoneyMoney()); - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { if (it_row.value()[eActual].count() <= column) throw MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::calculateRunningSums").arg(column).arg(it_row.value()[eActual].count())); @@ -697,7 +708,7 @@ while (it_row != (*it_innergroup).end()) { #if 0 MyMoneyMoney runningsum = it_row.value()[0]; - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { if (it_row.value()[eActual].count() <= column) throw MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::calculateRunningSums").arg(column).arg(it_row.value()[eActual].count())); @@ -754,7 +765,7 @@ else balance = m_grid[outergroup][innergroup][row][eActual][0].cellBalance(MyMoneyMoney()); - int column = 1; + int column = m_startColumn; while (column < _column) { if (m_grid[outergroup][innergroup][row][eActual].count() <= column) throw MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::cellBalance").arg(column).arg(m_grid[outergroup][innergroup][row][eActual].count())); @@ -886,7 +897,7 @@ } MyMoneyMoney value = (*periods.begin()).amount() * reverse; - int column = 1; + int column = m_startColumn; // based on the kind of budget it is, deal accordingly switch ((*it_bacc).budgetLevel()) { @@ -969,7 +980,7 @@ while (it_innergroup != (*it_outergroup).end()) { PivotInnerGroup::iterator it_row = (*it_innergroup).begin(); while (it_row != (*it_innergroup).end()) { - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { if (it_row.value()[eActual].count() <= column) throw MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::convertToBaseCurrency").arg(column).arg(it_row.value()[eActual].count())); @@ -1014,7 +1025,7 @@ while (it_innergroup != (*it_outergroup).end()) { PivotInnerGroup::iterator it_row = (*it_innergroup).begin(); while (it_row != (*it_innergroup).end()) { - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { if (it_row.value()[eActual].count() <= column) throw MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::convertToDeepCurrency").arg(column).arg(it_row.value()[eActual].count())); @@ -1098,7 +1109,7 @@ // Columns // - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { for (int i = 0; i < m_rowTypeList.size(); ++i) { if (it_row.value()[ m_rowTypeList[i] ].count() <= column) @@ -1120,7 +1131,7 @@ // Inner Row Group Totals // - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { for (int i = 0; i < m_rowTypeList.size(); ++i) { if ((*it_innergroup).m_total[ m_rowTypeList[i] ].count() <= column) @@ -1145,7 +1156,7 @@ const bool isIncomeExpense = (m_config_f.rowType() == MyMoneyReport::eExpenseIncome); const bool invert_total = (*it_outergroup).m_inverted; - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { for (int i = 0; i < m_rowTypeList.size(); ++i) { if (m_grid.m_total[ m_rowTypeList[i] ].count() <= column) @@ -1173,7 +1184,7 @@ // Report Totals // - int totalcolumn = 1; + int totalcolumn = m_startColumn; while (totalcolumn < m_numColumns) { for (int i = 0; i < m_rowTypeList.size(); ++i) { if (m_grid.m_total[ m_rowTypeList[i] ].count() <= totalcolumn) @@ -1310,7 +1321,7 @@ result += i18n("Account"); - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { result += QString(",%1").arg(QString(m_columnHeadings[column++])); if (m_rowTypeList.size() > 1) { @@ -1328,7 +1339,7 @@ // Row Type Header if (m_rowTypeList.size() > 1) { - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { for (int i = 0; i < m_rowTypeList.size(); ++i) { result += QString(",%1").arg(m_columnTypeHeaderList[i]); @@ -1380,7 +1391,7 @@ // QString rowdata; - int column = 1; + int column = m_startColumn; bool isUsed = false; for (int i = 0; i < m_rowTypeList.size(); ++i) @@ -1455,7 +1466,7 @@ // Finish the row started above, unless told not to if (finishrow) { - int column = 1; + int column = m_startColumn; for (int i = 0; i < m_rowTypeList.size(); ++i) isUsed |= (*it_innergroup).m_total[ m_rowTypeList[i] ][0].isUsed(); @@ -1489,7 +1500,7 @@ if (m_config_f.isShowingColumnTotals()) { result += QString("%1 %2").arg(i18nc("Total balance", "Total")).arg(it_outergroup.key()); - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { for (int i = 0; i < m_rowTypeList.size(); ++i) result += QString(",\"%1\"").arg((*it_outergroup).m_total[ m_rowTypeList[i] ][column].formatMoney(fraction, false)); @@ -1513,7 +1524,7 @@ if (m_config_f.isShowingColumnTotals()) { result += i18n("Grand Total"); - int totalcolumn = 1; + int totalcolumn = m_startColumn; while (totalcolumn < m_numColumns) { for (int i = 0; i < m_rowTypeList.size(); ++i) result += QString(",\"%1\"").arg(m_grid.m_total[ m_rowTypeList[i] ][totalcolumn].formatMoney(fraction, false)); @@ -1579,7 +1590,7 @@ headerspan = QString(" colspan=\"%1\"").arg(span); - int column = 1; + int column = m_startColumn; while (column < m_numColumns) result += QString("%2").arg(headerspan, QString(m_columnHeadings[column++]).replace(QRegExp(" "), "
")); @@ -1594,10 +1605,10 @@ if (span > 1) { result += ""; - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { QString lb; - if (column != 1) + if (column != m_startColumn) lb = leftborder; for (int i = 0; i < m_rowTypeList.size(); ++i) { @@ -1674,13 +1685,13 @@ // QString rowdata; - int column = 1; + int column = m_startColumn; pricePrecision = 0; // new row => new account => new precision currencyPrecision = 0; bool isUsed = it_row.value()[eActual][0].isUsed(); while (column < m_numColumns) { QString lb; - if (column > 1) + if (column > m_startColumn) lb = leftborder; foreach (const auto rowType, m_rowTypeList) { @@ -1790,11 +1801,11 @@ // Finish the row started above, unless told not to if (finishrow) { - int column = 1; + int column = m_startColumn; isUsed |= (*it_innergroup).m_total[eActual][0].isUsed(); while (column < m_numColumns) { QString lb; - if (column != 1) + if (column != m_startColumn) lb = leftborder; for (int i = 0; i < m_rowTypeList.size(); ++i) { @@ -1834,10 +1845,10 @@ if (m_config_f.isShowingColumnTotals()) { result += QString("%1 %2").arg(i18nc("Total balance", "Total")).arg((*it_outergroup).m_displayName); - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { QString lb; - if (column != 1) + if (column != m_startColumn) lb = leftborder; for (int i = 0; i < m_rowTypeList.size(); ++i) { @@ -1872,10 +1883,10 @@ if (m_config_f.isShowingColumnTotals()) { result += QString(" \n"); result += QString("%1").arg(i18n("Grand Total")); - int totalcolumn = 1; + int totalcolumn = m_startColumn; while (totalcolumn < m_numColumns) { QString lb; - if (totalcolumn != 1) + if (totalcolumn != m_startColumn) lb = leftborder; for (int i = 0; i < m_rowTypeList.size(); ++i) { @@ -1940,7 +1951,7 @@ while (it_innergroup != (*it_outergroup).end()) { PivotInnerGroup::iterator it_row = (*it_innergroup).begin(); while (it_row != (*it_innergroup).end()) { - int column = 1; + int column = m_startColumn; switch (it_row.key().accountGroup()) { case MyMoneyAccount::Income: case MyMoneyAccount::Asset: @@ -2008,7 +2019,7 @@ while (it_innergroup != (*it_outergroup).end()) { PivotInnerGroup::iterator it_row = (*it_innergroup).begin(); while (it_row != (*it_innergroup).end()) { - int column = 1; + int column = m_startColumn; QDate forecastDate = m_beginDate; //check whether columns are days or months if (m_config_f.isColumnsAreDays()) { @@ -2098,7 +2109,7 @@ while (it_innergroup != (*it_outergroup).end()) { PivotInnerGroup::iterator it_row = (*it_innergroup).begin(); while (it_row != (*it_innergroup).end()) { - int column = 1; + int column = m_startColumn; //check whether columns are days or months if (m_config_f.columnType() == MyMoneyReport::eDays) { @@ -2200,7 +2211,7 @@ while (it_innergroup != (*it_outergroup).end()) { PivotInnerGroup::iterator it_row = (*it_innergroup).begin(); while (it_row != (*it_innergroup).end()) { - int column = 1; + int column = m_startColumn; //if it is a base currency fill all the values bool firstPriceExists = false; @@ -2297,7 +2308,7 @@ //check the date of each column and return if it is the one for the current date //if columns are not days, return the one for the current month or year - int column = 1; + int column = m_startColumn; while (column < m_numColumns) { if (columnDate(column) >= QDate::currentDate()) { diff --git a/kmymoney/reports/tests/pivottable-test.cpp b/kmymoney/reports/tests/pivottable-test.cpp --- a/kmymoney/reports/tests/pivottable-test.cpp +++ b/kmymoney/reports/tests/pivottable-test.cpp @@ -203,10 +203,10 @@ PivotTable spending_f(filter); writeTabletoHTML(spending_f, "Spending with Single Transaction.html"); - QVERIFY(spending_f.m_grid["Expense"]["Solo"][acSolo][eActual][2] == moSolo); - QVERIFY(spending_f.m_grid["Expense"]["Solo"].m_total[eActual][2] == moSolo); - QVERIFY(spending_f.m_grid["Expense"]["Solo"].m_total[eActual][1] == moZero); - QVERIFY(spending_f.m_grid.m_total[eActual][2] == (-moSolo)); + QVERIFY(spending_f.m_grid["Expense"]["Solo"][acSolo][eActual][1] == moSolo); + QVERIFY(spending_f.m_grid["Expense"]["Solo"].m_total[eActual][1] == moSolo); + QVERIFY(spending_f.m_grid["Expense"]["Solo"].m_total[eActual][0] == moZero); + QVERIFY(spending_f.m_grid.m_total[eActual][1] == (-moSolo)); QVERIFY(spending_f.m_grid.m_total[eActual].m_total == (-moSolo)); filter.clearTransactionFilter(); @@ -234,12 +234,12 @@ PivotTable spending_f(filter); writeTabletoHTML(spending_f, "Spending with Sub-Account.html"); - QVERIFY(spending_f.m_grid["Expense"]["Parent"][acParent][eActual][3] == moParent); - QVERIFY(spending_f.m_grid["Expense"]["Parent"][acChild][eActual][3] == moChild); - QVERIFY(spending_f.m_grid["Expense"]["Parent"].m_total[eActual][3] == moParent + moChild); - QVERIFY(spending_f.m_grid["Expense"]["Parent"].m_total[eActual][2] == moZero); + QVERIFY(spending_f.m_grid["Expense"]["Parent"][acParent][eActual][2] == moParent); + QVERIFY(spending_f.m_grid["Expense"]["Parent"][acChild][eActual][2] == moChild); + QVERIFY(spending_f.m_grid["Expense"]["Parent"].m_total[eActual][2] == moParent + moChild); + QVERIFY(spending_f.m_grid["Expense"]["Parent"].m_total[eActual][1] == moZero); QVERIFY(spending_f.m_grid["Expense"]["Parent"].m_total[eActual].m_total == moParent + moChild); - QVERIFY(spending_f.m_grid.m_total[eActual][3] == (-moParent - moChild)); + QVERIFY(spending_f.m_grid.m_total[eActual][2] == (-moParent - moChild)); QVERIFY(spending_f.m_grid.m_total[eActual].m_total == (-moParent - moChild)); filter.clearTransactionFilter(); @@ -269,8 +269,8 @@ XMLandback(filter); PivotTable spending_f(filter); - QVERIFY(spending_f.m_grid["Expense"]["Parent"].m_total[eActual][3] == moChild); - QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][2] == moSolo); + QVERIFY(spending_f.m_grid["Expense"]["Parent"].m_total[eActual][2] == moChild); + QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][1] == moSolo); QVERIFY(spending_f.m_grid.m_total[eActual].m_total == -moSolo - moChild); } @@ -290,7 +290,7 @@ filter.addCategory(acSolo); XMLandback(filter); PivotTable networth_f(filter); - QVERIFY(networth_f.m_grid.m_total[eActual][3] == -moSolo + moCheckingOpen); + QVERIFY(networth_f.m_grid.m_total[eActual][2] == -moSolo + moCheckingOpen); } void PivotTableTest::testFilterALvsIE() @@ -309,8 +309,8 @@ XMLandback(filter); PivotTable spending_f(filter); - QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][3] == moZero); - QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][2] == moSolo); + QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][2] == moZero); + QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][1] == moSolo); QVERIFY(spending_f.m_grid.m_total[eActual].m_total == -moSolo); } @@ -329,8 +329,8 @@ filter.addCategory(acChild); PivotTable spending_f(filter); - QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][2] == moZero); - QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][3] == moChild); + QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][1] == moZero); + QVERIFY(spending_f.m_grid["Expense"].m_total[eActual][2] == moChild); QVERIFY(spending_f.m_grid.m_total[eActual].m_total == -moChild); } @@ -371,15 +371,15 @@ void PivotTableTest::testMultipleCurrencies() { - MyMoneyMoney moCanOpening(0.0, 100); - MyMoneyMoney moJpyOpening(0.0, 100); + MyMoneyMoney moCanOpening(0.0, 10); + MyMoneyMoney moJpyOpening(0.0, 10); MyMoneyMoney moCanPrice(0.75, 100); - MyMoneyMoney moJpyPrice(0.010, 100); - MyMoneyMoney moJpyPrice2(0.011, 100); - MyMoneyMoney moJpyPrice3(0.014, 100); - MyMoneyMoney moJpyPrice4(0.0395, 100); - MyMoneyMoney moCanTransaction(100.0, 100); - MyMoneyMoney moJpyTransaction(100.0, 100); + MyMoneyMoney moJpyPrice(0.010, 1000); + MyMoneyMoney moJpyPrice2(0.011, 1000); + MyMoneyMoney moJpyPrice3(0.014, 1000); + MyMoneyMoney moJpyPrice4(0.0395, 10000); + MyMoneyMoney moCanTransaction(100.0, 10); + MyMoneyMoney moJpyTransaction(100.0, 10); QString acCanChecking = makeAccount(QString("Canadian Checking"), MyMoneyAccount::Checkings, moCanOpening, QDate(2003, 11, 15), acAsset, "CAD"); QString acJpyChecking = makeAccount(QString("Japanese Checking"), MyMoneyAccount::Checkings, moJpyOpening, QDate(2003, 11, 15), acAsset, "JPY"); @@ -421,15 +421,15 @@ writeTabletoCSV(spending_f); // test single foreign currency + QVERIFY(spending_f.m_grid["Expense"]["Foreign"][acCanCash][eActual][1] == (moCanTransaction*moCanPrice)); QVERIFY(spending_f.m_grid["Expense"]["Foreign"][acCanCash][eActual][2] == (moCanTransaction*moCanPrice)); QVERIFY(spending_f.m_grid["Expense"]["Foreign"][acCanCash][eActual][3] == (moCanTransaction*moCanPrice)); - QVERIFY(spending_f.m_grid["Expense"]["Foreign"][acCanCash][eActual][4] == (moCanTransaction*moCanPrice)); // test multiple foreign currencies under a common parent + QVERIFY(spending_f.m_grid["Expense"]["Foreign"][acJpyCash][eActual][1] == (moJpyTransaction*moJpyPrice)); QVERIFY(spending_f.m_grid["Expense"]["Foreign"][acJpyCash][eActual][2] == (moJpyTransaction*moJpyPrice)); QVERIFY(spending_f.m_grid["Expense"]["Foreign"][acJpyCash][eActual][3] == (moJpyTransaction*moJpyPrice)); - QVERIFY(spending_f.m_grid["Expense"]["Foreign"][acJpyCash][eActual][4] == (moJpyTransaction*moJpyPrice)); - QVERIFY(spending_f.m_grid["Expense"]["Foreign"].m_total[eActual][2] == (moJpyTransaction*moJpyPrice + moCanTransaction*moCanPrice)); + QVERIFY(spending_f.m_grid["Expense"]["Foreign"].m_total[eActual][1] == (moJpyTransaction*moJpyPrice + moCanTransaction*moCanPrice)); QVERIFY(spending_f.m_grid["Expense"]["Foreign"].m_total[eActual].m_total == (moJpyTransaction*moJpyPrice + moCanTransaction*moCanPrice + moJpyTransaction*moJpyPrice + moCanTransaction*moCanPrice + moJpyTransaction*moJpyPrice + moCanTransaction*moCanPrice)); // Test the report type where we DO NOT convert the currency @@ -440,12 +440,12 @@ PivotTable spending_fnc(filter); writeTabletoCSV(spending_fnc); + QVERIFY(spending_fnc.m_grid["Expense"]["Foreign"][acCanCash][eActual][1] == (moCanTransaction)); QVERIFY(spending_fnc.m_grid["Expense"]["Foreign"][acCanCash][eActual][2] == (moCanTransaction)); QVERIFY(spending_fnc.m_grid["Expense"]["Foreign"][acCanCash][eActual][3] == (moCanTransaction)); - QVERIFY(spending_fnc.m_grid["Expense"]["Foreign"][acCanCash][eActual][4] == (moCanTransaction)); + QVERIFY(spending_fnc.m_grid["Expense"]["Foreign"][acJpyCash][eActual][1] == (moJpyTransaction)); QVERIFY(spending_fnc.m_grid["Expense"]["Foreign"][acJpyCash][eActual][2] == (moJpyTransaction)); QVERIFY(spending_fnc.m_grid["Expense"]["Foreign"][acJpyCash][eActual][3] == (moJpyTransaction)); - QVERIFY(spending_fnc.m_grid["Expense"]["Foreign"][acJpyCash][eActual][4] == (moJpyTransaction)); filter.setConvertCurrency(true); filter.clearTransactionFilter(); @@ -514,7 +514,7 @@ PivotTable spending_f(filter); writeTabletoHTML(spending_f, "Spending with Payee Filter.html"); - QVERIFY(spending_f.m_grid["Expense"]["Parent"][acParent][eActual][11] == moThomas); + QVERIFY(spending_f.m_grid["Expense"]["Parent"][acParent][eActual][10] == moThomas); QVERIFY(spending_f.m_grid.m_total[eActual].m_total == -moThomas); } // payee (no payee) @@ -530,7 +530,7 @@ filter.addPayee(QString()); XMLandback(filter); PivotTable spending_f(filter); - QVERIFY(spending_f.m_grid["Expense"]["Parent"][acParent][eActual][11] == moNoPayee); + QVERIFY(spending_f.m_grid["Expense"]["Parent"][acParent][eActual][10] == moNoPayee); QVERIFY(spending_f.m_grid.m_total[eActual].m_total == -moNoPayee); } @@ -584,8 +584,8 @@ QVERIFY(networth_f4.m_grid["Asset"].m_total[eActual][11] == moCheckingOpen + moChild); QVERIFY(networth_f4.m_grid["Liability"].m_total[eActual][11] == - moCreditOpen + moChild); + QVERIFY(networth_f4.m_grid.m_total[eActual][9] == moCheckingOpen + moCreditOpen); QVERIFY(networth_f4.m_grid.m_total[eActual][10] == moCheckingOpen + moCreditOpen); - QVERIFY(networth_f4.m_grid.m_total[eActual][11] == moCheckingOpen + moCreditOpen); } // state (reconciled, cleared, not) @@ -734,33 +734,33 @@ XMLandback(filter); PivotTable spending_b(filter); - QVERIFY(spending_b.m_grid.m_total[eActual][1] == moZero); - QVERIFY(spending_b.m_grid.m_total[eActual][2] == -moParent1 - moSolo); - QVERIFY(spending_b.m_grid.m_total[eActual][3] == -moParent2 - moSolo); - QVERIFY(spending_b.m_grid.m_total[eActual][4] == -moParent); + QVERIFY(spending_b.m_grid.m_total[eActual][0] == moZero); + QVERIFY(spending_b.m_grid.m_total[eActual][1] == -moParent1 - moSolo); + QVERIFY(spending_b.m_grid.m_total[eActual][2] == -moParent2 - moSolo); + QVERIFY(spending_b.m_grid.m_total[eActual][3] == -moParent); + QVERIFY(spending_b.m_grid.m_total[eActual][4] == moZero); QVERIFY(spending_b.m_grid.m_total[eActual][5] == moZero); QVERIFY(spending_b.m_grid.m_total[eActual][6] == moZero); - QVERIFY(spending_b.m_grid.m_total[eActual][7] == moZero); - QVERIFY(spending_b.m_grid.m_total[eActual][8] == -moSolo); - QVERIFY(spending_b.m_grid.m_total[eActual][9] == moZero); - QVERIFY(spending_b.m_grid.m_total[eActual][10] == -moParent1); - QVERIFY(spending_b.m_grid.m_total[eActual][11] == moZero); - QVERIFY(spending_b.m_grid.m_total[eActual][12] == -moParent2); - QVERIFY(spending_b.m_grid.m_total[eActual][13] == moZero); + QVERIFY(spending_b.m_grid.m_total[eActual][7] == -moSolo); + QVERIFY(spending_b.m_grid.m_total[eActual][8] == moZero); + QVERIFY(spending_b.m_grid.m_total[eActual][9] == -moParent1); + QVERIFY(spending_b.m_grid.m_total[eActual][10] == moZero); + QVERIFY(spending_b.m_grid.m_total[eActual][11] == -moParent2); + QVERIFY(spending_b.m_grid.m_total[eActual][12] == moZero); filter.setColumnType(MyMoneyReport::eQuarters); XMLandback(filter); PivotTable spending_q(filter); - QVERIFY(spending_q.m_grid.m_total[eActual][1] == moZero); + QVERIFY(spending_q.m_grid.m_total[eActual][0] == moZero); + QVERIFY(spending_q.m_grid.m_total[eActual][1] == -moSolo - moParent); QVERIFY(spending_q.m_grid.m_total[eActual][2] == -moSolo - moParent); - QVERIFY(spending_q.m_grid.m_total[eActual][3] == -moSolo - moParent); + QVERIFY(spending_q.m_grid.m_total[eActual][3] == moZero); QVERIFY(spending_q.m_grid.m_total[eActual][4] == moZero); - QVERIFY(spending_q.m_grid.m_total[eActual][5] == moZero); - QVERIFY(spending_q.m_grid.m_total[eActual][6] == -moSolo); - QVERIFY(spending_q.m_grid.m_total[eActual][7] == -moParent1); - QVERIFY(spending_q.m_grid.m_total[eActual][8] == -moParent2); - QVERIFY(spending_q.m_grid.m_total[eActual][9] == moZero); + QVERIFY(spending_q.m_grid.m_total[eActual][5] == -moSolo); + QVERIFY(spending_q.m_grid.m_total[eActual][6] == -moParent1); + QVERIFY(spending_q.m_grid.m_total[eActual][7] == -moParent2); + QVERIFY(spending_q.m_grid.m_total[eActual][8] == moZero); filter.setRowType(MyMoneyReport::eAssetLiability); filter.setName("Net Worth by Quarter"); @@ -783,9 +783,9 @@ XMLandback(filter); PivotTable spending_y(filter); - QVERIFY(spending_y.m_grid.m_total[eActual][1] == moZero); - QVERIFY(spending_y.m_grid.m_total[eActual][2] == -moSolo - moParent - moSolo - moParent); - QVERIFY(spending_y.m_grid.m_total[eActual][3] == -moSolo - moParent); + QVERIFY(spending_y.m_grid.m_total[eActual][0] == moZero); + QVERIFY(spending_y.m_grid.m_total[eActual][1] == -moSolo - moParent - moSolo - moParent); + QVERIFY(spending_y.m_grid.m_total[eActual][2] == -moSolo - moParent); QVERIFY(spending_y.m_grid.m_total[eActual].m_total == -moSolo - moParent - moSolo - moParent - moSolo - moParent); filter.setRowType(MyMoneyReport::eAssetLiability); @@ -820,8 +820,8 @@ PivotTable spending_days(filter); writeTabletoHTML(spending_days, "Spending by Days.html"); - QVERIFY(spending_days.m_grid.m_total[eActual][3] == -moParent2); - QVERIFY(spending_days.m_grid.m_total[eActual][13] == -moSolo); + QVERIFY(spending_days.m_grid.m_total[eActual][2] == -moParent2); + QVERIFY(spending_days.m_grid.m_total[eActual][12] == -moSolo); QVERIFY(spending_days.m_grid.m_total[eActual].m_total == -moSolo - moParent2); // set the first day of the week to 1 @@ -840,12 +840,11 @@ // restore the locale QLocale::setDefault(QLocale::system()); - QVERIFY(spending_weeks.m_grid.m_total[eActual][0] == moZero); - QVERIFY(spending_weeks.m_grid.m_total[eActual][1] == -moParent2); - QVERIFY(spending_weeks.m_grid.m_total[eActual][2] == moZero); - QVERIFY(spending_weeks.m_grid.m_total[eActual][3] == -moSolo - moParent1); - QVERIFY(spending_weeks.m_grid.m_total[eActual][4] == -moParent2); - QVERIFY(spending_weeks.m_grid.m_total[eActual][5] == moZero); + QVERIFY(spending_weeks.m_grid.m_total[eActual][0] == -moParent2); + QVERIFY(spending_weeks.m_grid.m_total[eActual][1] == moZero); + QVERIFY(spending_weeks.m_grid.m_total[eActual][2] == -moSolo - moParent1); + QVERIFY(spending_weeks.m_grid.m_total[eActual][3] == -moParent2); + QVERIFY(spending_weeks.m_grid.m_total[eActual][4] == moZero); QVERIFY(spending_weeks.m_grid.m_total[eActual].m_total == -moSolo - moParent - moParent2); }