TransactionMatcher Class Reference

#include <transactionmatcher.h>

Collaboration diagram for TransactionMatcher:

Collaboration graph
[legend]

List of all members.

Public Types

enum  autoMatchResultE { notMatched = 0, matched, matchedExact, matchedDuplicate }

Public Member Functions

 TransactionMatcher (const MyMoneyAccount &acc)
void match (MyMoneyTransaction tm, MyMoneySplit sm, MyMoneyTransaction ti, MyMoneySplit si, bool allowImportedTransactions=false)
void unmatch (const MyMoneyTransaction &t, const MyMoneySplit &s)
void accept (const MyMoneyTransaction &t, const MyMoneySplit &s)
MyMoneyObject const * findMatch (const MyMoneyTransaction &ti, const MyMoneySplit &si, MyMoneySplit &sm, autoMatchResultE &result)
void setMatchWindow (int days)

Private Member Functions

void checkTransaction (const MyMoneyTransaction &tm, const MyMoneyTransaction &ti, const MyMoneySplit &si, QPair< MyMoneyTransaction, MyMoneySplit > &lastMatch, autoMatchResultE &result, int variation=0) const

Private Attributes

MyMoneyAccount m_account
int m_days


Member Enumeration Documentation

Enumerator:
notMatched  no matching transaction found
matched  matching transaction found
matchedExact  matching transaction found with exact same date
matchedDuplicate  duplicate matching transaction found


Constructor & Destructor Documentation

TransactionMatcher::TransactionMatcher ( const MyMoneyAccount acc  ) 


Member Function Documentation

void TransactionMatcher::match ( MyMoneyTransaction  tm,
MyMoneySplit  sm,
MyMoneyTransaction  ti,
MyMoneySplit  si,
bool  allowImportedTransactions = false 
)

This method matches the manual entered transaction tm with the imported transaction ti based on the splits sm and si. If the match can be applied, MyMoneyTransaction::addMatch() is used to include ti inside 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 sm and si must be identical
  • tm must be a non-imported (see below), non-matched transaction
  • ti must be an imported transaction

If allowImportedTransactions is true, tm may be an imported transaction. The default of allowImportedTransactions is false.

In case of errors, an exception is thrown.

void TransactionMatcher::unmatch ( const MyMoneyTransaction t,
const MyMoneySplit s 
)

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 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 TransactionMatcher::accept ( 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 _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

MyMoneyObject const* TransactionMatcher::findMatch ( const MyMoneyTransaction ti,
const MyMoneySplit si,
MyMoneySplit sm,
autoMatchResultE result 
)

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

Parameters:
ti the imported transaction we want to match
si the split of that transaction referencing the account we import into
sm the split of the object returned that matches the split si. In case the returned pointer is not 0 this object contains the split. In other cases it contains an empty MyMoneySplit.
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

void TransactionMatcher::setMatchWindow ( int  days  )  [inline]

Sets the number of days to look for matching transactions. The default after object creation is 3 days.

void TransactionMatcher::checkTransaction ( const MyMoneyTransaction tm,
const MyMoneyTransaction ti,
const MyMoneySplit si,
QPair< MyMoneyTransaction, MyMoneySplit > &  lastMatch,
autoMatchResultE result,
int  variation = 0 
) const [private]


Member Data Documentation


The documentation for this class was generated from the following file:

Generated on Wed Jan 26 13:09:40 2011 for KMyMoney by  doxygen 1.5.6