Review Request 126875: Combined the questions from TransactionMatcher::match and MyMoneyStatementReader::askUserToEnterScheduleForMatching

Christian David christian-david at web.de
Wed Feb 24 15:42:26 UTC 2016



> On Jan. 24, 2016, 10:02 p.m., Christian David wrote:
> > kmymoney/converter/mymoneystatementreader.cpp, line 1458
> > <https://git.reviewboard.kde.org/r/126875/diff/1/?file=439594#file439594line1458>
> >
> >     Translated strings should not be combined, as it confuses the translators. It is better to create two long strings using i18np() although this duplicates the text (which is usually bad).
> 
> Artur Puzio wrote:
>     But the i18np() is for plurals. What we can do is change the previous string only slitly to add the variable that will contain `"The transaction dates are one day apart.<br/>"` or `""`.
> 
> Christian David wrote:
>     You could use something like
>     
>         i18n("<html>KMyMoney has found a scheduled transaction which matches an imported transaction.<br/>"
>                                  "Schedule name: <b>%1</b><br/>"
>                                  "Transaction: <i>%2 %3</i><br/>"
>                                  "Do you want KMyMoney to enter this schedule now so that the transaction can be matched?</html>",
>                                  scheduleName, splitValue, payeeName);
>       
>     and
>         i18np("<html>KMyMoney has found a scheduled transaction which matches an imported transaction.<br/>"
>                                  "Schedule name: <b>%2</b><br/>"
>                                  "Transaction: <i>%3 %4</i><br/>"
>                                  "The transaction dates are one day apart.<br/>"
>                                  "Do you want KMyMoney to enter this schedule now so that the transaction can be matched?</html>",
>                                  "<html>KMyMoney has found a scheduled transaction which matches an imported transaction.<br/>"
>                                  "Schedule name: <b>%2</b><br/>"
>                                  "Transaction: <i>%3 %4</i><br/>"
>                                  "The transaction dates are %1 days apart.<br/>"
>                                  "Do you want KMyMoney to enter this schedule now so that the transaction can be matched?</html>",
>                                  gap ,scheduleName, splitValue, payeeName);
> 
> Allan Anderson wrote:
>     I think this code was transferred from kmymoney/dialogs/transactionmatcher.cpp lines 79-88, and now, here, I think it deals with matching a schedule.  It's a while since I was in this area, so this could be totally wrong, but I think that in the original position, it also handled matched non-scheduled and non-imported transactions.  Have you tested this capability?  If so, great and I'm wrong.
> 
> Artur Puzio wrote:
>     Allan, you are correct, I will check if the `match` function is invoked elsewhere.
> 
> Christian David wrote:
>     Actually, I think you are right Allan. But which non-imported transactions are matched? Do you mean user entered transactions in the register?
> 
> Allan Anderson wrote:
>     See https://bugs.kde.org/show_bug.cgi?id=333949.
>     This added the ability to match two imported transactions, and also two manually entered ones.  Originally, only a combination of one of each could be matched.  No scheduled transactions were changed, although I did add allowing the user to accept a match outside the default date scope.
> 
> Christian David wrote:
>     I rechecked this. According to KDevelop’s code parser ```TransactionMatcher::match(...)``` is used three times, namely in:
>     
>         MyMoneyStatementReader::handleMatchingOfExistingTransaction(...)
>         MyMoneyStatementReader::handleMatchingOfScheduledTransaction(...)
>         KMyMoneyApp::transactionMatch()
>         
>     The second one is using ```MyMoneyStatementReader::askUserToEnterScheduleForMatching``` where the question was moved to. So the question which is left: do we need the time check in the other two functions (I do not know when they are used, yet).
>     
>     However, the question must be moved out of ```TransactionMatcher::match()```. Otherwise the user is asked multiple times if he wants to match a single transaction – a usability sin.
>     
>     Btw: ```TransactionMatcher::match()``` should not contain any user interaction by design to keep our codebase readable. It is a backend function.
> 
> Christian David wrote:
>     I did some research how the other functions use ```TransactionMatcher::match()```.
>     
>     ```KMyMoneyApp::transactionMatch()``` is only called if the user manually starts a match using a button. So the check is reasonable but not necessary – the user probably knows what he is doing.
>     
>     ```MyMoneyStatementReader::handleMatchingOfExistingTransaction()``` is a bit more tricky. It is call by ```MyMoneyStatementReader::processTransaction()``` which is used by ```MyMoneyStatementReader::import()``` which is finaly called by ```KMyMoneyApp::slotStatementImport()```. So I assume the call to ```handleMatchingOfExistingTransaction()``` is in the end caused by an import of a file with many entries. Therefore the question is a really good idea. However in it's current way (before this review request) absolutly useless. The user has no information which transaction he is asked about – remember this is a mass import. So removing this question is actually mandatory in my opinion.
>     
>     So I recommend to ship this request.
> 
> Allan Anderson wrote:
>     > KMyMoneyApp::transactionMatch() is only called if the user manually starts a match using a button. So the check is reasonable but not necessary > the user probably knows what he is doing.
>     
>     While the user will know what he thinks he is doing, he could have made a mistake.  For instance, when selecting the two transations to be matched, he could inadvertantly click on the wrong line after duplicating, resulting in one date being outside the configured matching scope.  His resulting transaction could contain an error.

I was afraid you will say this and of course you are right. Are you okay if I publish this review request anyway under the condition that I will try to add the question for the manual merge again in the next couple of months (so it will get into KMyMoney 5)? I want highlight that ```TransactionMatcher::match()``` is the wrong place for this message box in any case.


- Christian


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/126875/#review91536
-----------------------------------------------------------


On Jan. 24, 2016, 11:07 p.m., Artur Puzio wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/126875/
> -----------------------------------------------------------
> 
> (Updated Jan. 24, 2016, 11:07 p.m.)
> 
> 
> Review request for KMymoney and Christian David.
> 
> 
> Repository: kmymoney
> 
> 
> Description
> -------
> 
> Moved the question from `TransactionMatcher::match` to `MyMoneyStatementReader::askUserToEnterScheduleForMatching`.
> Added `MyMoneyTransaction & importedTransaction` parmeter to `MyMoneyStatementReader::askUserToEnterScheduleForMatching`, as `importedTransation` is required to calculate if the question from `TransactionMatcher::match` should be shown.
> 
> 
> Diffs
> -----
> 
>   kmymoney/converter/mymoneystatementreader.h 80da202 
>   kmymoney/converter/mymoneystatementreader.cpp 1634bbb 
>   kmymoney/dialogs/transactionmatcher.cpp 7d97404 
> 
> Diff: https://git.reviewboard.kde.org/r/126875/diff/
> 
> 
> Testing
> -------
> 
> Automated tests still pass, but they don't check the subject of work.
> Screenshot: [link](https://imgur.com/3Veh70N)
> 
> 
> Thanks,
> 
> Artur Puzio
> 
>

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


More information about the KMyMoney-devel mailing list