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

Łukasz Maszczyński lukasz at maszczynski.net
Sat Dec 8 16:45:52 UTC 2012


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/107137/
-----------------------------------------------------------

(Updated Dec. 8, 2012, 4:45 p.m.)


Review request for KMymoney.


Changes
-------

1. const correctness
2. BOOST_FOREACH loops replaced with Qt's foreach


Description
-------

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/


Testing
-------

make test


Thanks,

Łukasz Maszczyński

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


More information about the KMyMoney-devel mailing list