summaryrefslogtreecommitdiffstats
path: root/kmymoney2/dialogs/transactionmatcher.h
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-07-04 22:38:03 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-07-04 22:38:03 +0000
commitdadc34655c3ab961b0b0b94a10eaaba710f0b5e8 (patch)
tree99e72842fe687baea16376a147619b6048d7e441 /kmymoney2/dialogs/transactionmatcher.h
downloadkmymoney-dadc34655c3ab961b0b0b94a10eaaba710f0b5e8.tar.gz
kmymoney-dadc34655c3ab961b0b0b94a10eaaba710f0b5e8.zip
Added kmymoney
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kmymoney@1239792 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kmymoney2/dialogs/transactionmatcher.h')
-rw-r--r--kmymoney2/dialogs/transactionmatcher.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/kmymoney2/dialogs/transactionmatcher.h b/kmymoney2/dialogs/transactionmatcher.h
new file mode 100644
index 0000000..e5e036c
--- /dev/null
+++ b/kmymoney2/dialogs/transactionmatcher.h
@@ -0,0 +1,145 @@
+/***************************************************************************
+ transactionmatcher.h
+ ----------
+ begin : Tue Jul 08 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef TRANSACTIONMATCHER_H
+#define TRANSACTIONMATCHER_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneyaccount.h>
+class MyMoneySchedule;
+
+class TransactionMatcher
+{
+public:
+ typedef enum {
+ notMatched = 0, ///< no matching transaction found
+ matched, ///< matching transaction found
+ matchedExact, ///< matching transaction found with exact same date
+ matchedDuplicate ///< duplicate matching transaction found
+ } autoMatchResultE;
+
+ TransactionMatcher(const MyMoneyAccount& acc);
+
+ /**
+ * This method matches the manual entered transaction @p tm with the imported
+ * transaction @p ti based on the splits @p sm and @p si. If the match can be applied,
+ * MyMoneyTransaction::addMatch() is used to include @p ti inside @p tm and the
+ * engine data (MyMoneyFile) is updated. A possible bankid found in the imported
+ * split is carried over into the manual transaction.
+ *
+ * The following things will be done in case of a match:
+ *
+ * - if the postdate differs between the two transactions
+ * - the postdate of the manual entered transaction is stored in kmm-orig-postdate
+ * - the postdate of the imported transaction is assigned to the resulting transaction
+ * - if the payee differs between the two splits
+ * - the payee of the manual split is stored in kmm-orig-payee
+ * - the payee of the imported split is assigned to the resulting split
+ * - if the reconciliation state is not-reconciled
+ * - the reconciliation state is set to cleared
+ * - the bankid of the imported transaction is assigned to the resulting transaction
+ * - the resulting transaction will be updated and the imported transaction removed
+ * from the engine
+ *
+ * The application of the match depends on the following items:
+ *
+ * - both share values of @p sm and @p si must be identical
+ * - @p tm must be a non-imported (see below), non-matched transaction
+ * - @p ti must be an imported transaction
+ *
+ * If @p allowImportedTransactions is true, @p tm may be an imported transaction. The
+ * default of @p allowImportedTransactions is @p false.
+ *
+ * In case of errors, an exception is thrown.
+ */
+ void match(MyMoneyTransaction tm, MyMoneySplit sm, MyMoneyTransaction ti, MyMoneySplit si, bool allowImportedTransactions = false);
+
+ /**
+ * This method is used to unmatch a previously matched transaction (see match() and findMatch() )
+ * and restore the original and imported transaction in the engine.
+ *
+ * The following things will be done in case @p t is a matched transaction:
+ *
+ * - the enclosed imported transaction is extracted and restored
+ * - if the kvp contains a kmm-orig-payee record
+ * - the payee is updated to this value if it still exists, otherwise the payee is left empty
+ * - if the kvp contains a kmm-orig-postdate record
+ * - the postdate of the transaction is changed to the value stored in this record
+ * - a matching bankid is removed from the transaction
+ * - the resulting transaction will be updated and the imported transaction inserted
+ * into the engine
+ *
+ * In case of errors, an exception is thrown.
+ */
+ void unmatch(const MyMoneyTransaction& t, const MyMoneySplit& s);
+
+ /**
+ * This method is used to accept a previously matched transaction (see match() and findMatch())
+ *
+ * The following things will be done in case @p _t is a matched transaction
+ *
+ * - the enclosed imported transaction is removed
+ * - the kvps kmm-orig-payee and kmm-orig-postdate are removed
+ * - the resulting transaction will be updated
+ *
+ * In case of errors, an exception is thrown
+ */
+ void accept(const MyMoneyTransaction& t, const MyMoneySplit& s);
+
+ /**
+ * This method is used to automatically find a matching transaction in the ledger or the schedules.
+ * It should also detect duplicate imports according to the splits bankid.
+ *
+ * To be designed
+ *
+ * @param ti the imported transaction we want to match
+ * @param si the split of that transaction referencing the account we import into
+ * @param sm the split of the object returned that matches the split @a si. In case
+ * the returned pointer is not 0 this object contains the split. In other
+ * cases it contains an empty MyMoneySplit.
+ * @param result reference to the result details
+ *
+ * @returns pointer to MyMoneyObject (either a MyMoneyTransaction or a MyMoneySchedule). The
+ * caller of this method becomes the owner of the object pointed to and is responsible
+ * to delete the object
+ */
+ MyMoneyObject const * findMatch(const MyMoneyTransaction& ti, const MyMoneySplit& si, MyMoneySplit& sm, autoMatchResultE& result);
+
+ /**
+ * Sets the number of @a days to look for matching transactions. The default after object creation is 3 days.
+ */
+ void setMatchWindow(int days) { m_days = days; }
+
+private:
+ void checkTransaction(const MyMoneyTransaction& tm, const MyMoneyTransaction& ti, const MyMoneySplit& si, QPair<MyMoneyTransaction, MyMoneySplit>& lastMatch, autoMatchResultE& result, int variation = 0) const;
+
+private:
+ MyMoneyAccount m_account;
+ int m_days;
+};
+
+
+#endif