diff --git a/kmymoney/mymoney/mymoneytransactionfilter.h b/kmymoney/mymoney/mymoneytransactionfilter.h --- a/kmymoney/mymoney/mymoneytransactionfilter.h +++ b/kmymoney/mymoney/mymoneytransactionfilter.h @@ -293,6 +293,16 @@ */ void setReportAllSplits(const bool report = true); + /** + * Consider splits in categories + * + * With this setting, splits in categories that are not considered + * by default are taken into account. + * + * @param check check state + */ + void setConsiderCategorySplits(const bool check = true); + /** * Consider income and expense categories * diff --git a/kmymoney/mymoney/mymoneytransactionfilter.cpp b/kmymoney/mymoney/mymoneytransactionfilter.cpp --- a/kmymoney/mymoney/mymoneytransactionfilter.cpp +++ b/kmymoney/mymoney/mymoneytransactionfilter.cpp @@ -48,6 +48,7 @@ MyMoneyTransactionFilterPrivate() : m_reportAllSplits(false) , m_considerCategory(false) + , m_considerCategorySplits(false) , m_matchOnly(false) , m_treatTransfersAsIncomeExpense(false) , m_matchingSplitsCount(0) @@ -59,6 +60,7 @@ MyMoneyTransactionFilter::FilterSet m_filterSet; bool m_reportAllSplits; bool m_considerCategory; + bool m_considerCategorySplits; bool m_matchOnly; bool m_treatTransfersAsIncomeExpense; @@ -267,6 +269,12 @@ d->m_reportAllSplits = report; } +void MyMoneyTransactionFilter::setConsiderCategorySplits(const bool check) +{ + Q_D(MyMoneyTransactionFilter); + d->m_considerCategorySplits = check; +} + void MyMoneyTransactionFilter::setConsiderCategory(const bool check) { Q_D(MyMoneyTransactionFilter); @@ -418,7 +426,8 @@ break; } - if (!isCategory) { + bool includeSplit = d->m_considerCategorySplits || (!d->m_considerCategorySplits && !isCategory); + if (includeSplit) { // check the payee list if (filter.payeeFilter) { if (!d->m_payees.isEmpty()) { diff --git a/kmymoney/mymoney/tests/mymoneytransactionfilter-test.cpp b/kmymoney/mymoney/tests/mymoneytransactionfilter-test.cpp --- a/kmymoney/mymoney/tests/mymoneytransactionfilter-test.cpp +++ b/kmymoney/mymoney/tests/mymoneytransactionfilter-test.cpp @@ -521,7 +521,7 @@ QVERIFY(filter.match(transaction)); QCOMPARE(filter.matchingSplits(transaction).size(), 1); - // check no category support + // check disabled category splits support MyMoneySplit split4; split4.setAccountId(acExpenseId); split4.setShares(MyMoneyMoney(123.00)); @@ -535,7 +535,10 @@ QVERIFY(!filter.match(transaction2)); QCOMPARE(filter.matchingSplits(transaction2).size(), 0); - qDebug() << "tags on categories could not be tested"; + // check enabled category splits support + filter.setConsiderCategorySplits(true); + QVERIFY(filter.match(transaction2)); + QCOMPARE(filter.matchingSplits(transaction2).size(), 1); } void MyMoneyTransactionFilterTest::testMatchTransactionTypeAllTypes() diff --git a/kmymoney/views/ktagsview.cpp b/kmymoney/views/ktagsview.cpp --- a/kmymoney/views/ktagsview.cpp +++ b/kmymoney/views/ktagsview.cpp @@ -301,6 +301,7 @@ // setup the list and the pointer vector MyMoneyTransactionFilter filter; + filter.setConsiderCategorySplits(); filter.addTag(d->m_tag.id()); filter.setDateFilter(KMyMoneySettings::startDate().date(), QDate());