File indexing completed on 2024-05-12 05:06:03

0001 /*
0002     KMyMoney transaction importing module - searches for a matching transaction in the ledger
0003 
0004     SPDX-FileCopyrightText: 2012 Lukasz Maszczynski <lukasz@maszczynski.net>
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "existingtransactionmatchfinder.h"
0009 
0010 #include <QDebug>
0011 #include <QDate>
0012 
0013 #include "mymoneymoney.h"
0014 #include "mymoneyfile.h"
0015 #include "mymoneytransactionfilter.h"
0016 
0017 ExistingTransactionMatchFinder::ExistingTransactionMatchFinder(int matchWindow)
0018     : TransactionMatchFinder(matchWindow)
0019 {
0020 }
0021 
0022 void ExistingTransactionMatchFinder::createListOfMatchCandidates()
0023 {
0024     MyMoneyTransactionFilter filter(m_importedSplit.accountId());
0025     filter.setReportAllSplits(false);
0026     filter.setDateFilter(importedTransaction.postDate().addDays(-m_matchWindow), importedTransaction.postDate().addDays(m_matchWindow));
0027     filter.setAmountFilter(m_importedSplit.shares(), m_importedSplit.shares());
0028 
0029     MyMoneyFile::instance()->transactionList(listOfMatchCandidates, filter);
0030     qDebug() << "Considering" << listOfMatchCandidates.size() << "existing transaction(s) for matching";
0031 }
0032 
0033 void ExistingTransactionMatchFinder::findMatchInMatchCandidatesList()
0034 {
0035     for (const TransactionAndSplitPair& transactionAndSplit : qAsConst(listOfMatchCandidates)) {
0036         const MyMoneyTransaction & theTransaction = transactionAndSplit.first;
0037 
0038         if (theTransaction.id() == importedTransaction.id()) {
0039             // just skip myself
0040             continue;
0041         }
0042 
0043         findMatchingSplit(theTransaction, 0);
0044 
0045         if (matchResult != MatchNotFound) {
0046             return;
0047         }
0048     }
0049 }