[Kmymoney-devel] Review Request: Refactoring of matching a transaction-under-import
Łukasz Maszczyński
lukasz at maszczynski.net
Tue Oct 30 17:42:26 UTC 2012
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/107137/
-----------------------------------------------------------
Review request for KMymoney.
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
-----
kmymoney/dialogs/transactionmatchfinder.cpp PRE-CREATION
kmymoney/dialogs/transactionmatcher.cpp c380877
kmymoney/dialogs/transactionmatchfinder.h PRE-CREATION
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
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/20121030/7cf796f4/attachment.html>
More information about the KMyMoney-devel
mailing list