[Kmymoney-devel] Review Request: Refactoring of matching a transaction-under-import

Łukasz Maszczyński lukasz at maszczynski.net
Wed Dec 5 20:28:01 UTC 2012

This is an automatically generated e-mail. To reply, visit:

(Updated Dec. 5, 2012, 8:28 p.m.)

Review request for KMymoney.


rewritten matching splits to comply with the original functionality


1. please note that dependency on Boost is no longer optional (see changes in CMakeLists.txt)

2. Architectural changes
   Until now, the method MyMoneyStatementReader::processTransactionEntry() handled the whole process of importing a transaction - that is: handling the securities, matching and creating payees, and - at the very end of the method - adding the transaction to the ledger.
   The last step (adding transaction to ledger) is the main target of this refactoring. Its algorithm was as follows:
   1. find a matching transaction (either existing or scheduled) - using TransactionMatcher::findMatch()
   2. If an "existing transaction match" is found - handle it (in the old code it's the block starting with a comment "// it matched a simple transaction. that's the easy case")
   3. Else if a "scheduled transaction match" is found - handle it ("// a match has been found in a pending schedule"...)

   Code "mapping" is as follows:
   - step 2 (above) is extracted to handleMatchingOfExistingTransaction()
   - step 3 (above) is extracted to handleMatchingOfScheduledTransaction()
   - TransactionMatcher::findMatch() is extracted to TransactionMatchFinder::findMatch() (note: there are two pure-virtual functions that are implemented in ExistingTransactionMatchFinder, ScheduledTransactionMatchFinder classes)
   - TransactionMatcher::checkTransaction() is extracted to TransactionMatchFinder::findMatchingSplit()

3. Memory management changes
   Raw pointers are no longer used, as these are typically error-prone. Pointers were replaced either with object instances, or boost::optional is used if applicable (e.g. see members of TransactionMatchFinder class).

4. dynamic_casts removed (were used on pointers returned by TransactionMatcher::findMatch(), no longer needed - see TransactionMatchFinder::getMatchedTransaction() and getMatchedSchedule() )

5. variable/method names - I did my best to keep those meaningful: e.g. "importedTransaction" instead of "t")

Diffs (updated)

  CMakeLists.txt 93af070 
  kmymoney/converter/mymoneystatementreader.h 758ff00 
  kmymoney/converter/mymoneystatementreader.cpp 42c4841 
  kmymoney/dialogs/CMakeLists.txt 9a8d782 
  kmymoney/dialogs/existingtransactionmatchfinder.h PRE-CREATION 
  kmymoney/dialogs/existingtransactionmatchfinder.cpp PRE-CREATION 
  kmymoney/dialogs/scheduledtransactionmatchfinder.h PRE-CREATION 
  kmymoney/dialogs/scheduledtransactionmatchfinder.cpp PRE-CREATION 
  kmymoney/dialogs/transactionmatcher.h d09a4cd 
  kmymoney/dialogs/transactionmatcher.cpp c380877 
  kmymoney/dialogs/transactionmatchfinder.h PRE-CREATION 
  kmymoney/dialogs/transactionmatchfinder.cpp PRE-CREATION 

Diff: http://git.reviewboard.kde.org/r/107137/diff/


make test


Łukasz Maszczyński

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kmymoney-devel/attachments/20121205/f05af587/attachment.html>

More information about the KMyMoney-devel mailing list