diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-07-04 22:38:03 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-07-04 22:38:03 +0000 |
commit | dadc34655c3ab961b0b0b94a10eaaba710f0b5e8 (patch) | |
tree | 99e72842fe687baea16376a147619b6048d7e441 /kmymoney2/mymoney/mymoneysplit.h | |
download | kmymoney-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/mymoney/mymoneysplit.h')
-rw-r--r-- | kmymoney2/mymoney/mymoneysplit.h | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/kmymoney2/mymoney/mymoneysplit.h b/kmymoney2/mymoney/mymoneysplit.h new file mode 100644 index 0000000..3408a6a --- /dev/null +++ b/kmymoney2/mymoney/mymoneysplit.h @@ -0,0 +1,307 @@ +/*************************************************************************** + mymoneysplit.h - description + ------------------- + begin : Sun Apr 28 2002 + copyright : (C) 2000-2002 by Michael Edwardes + email : [email protected] + Javier Campos Morales <[email protected]> + Felix Rodriguez <[email protected]> + John C <[email protected]> + Thomas Baumgart <[email protected]> + Kevin Tambascio <[email protected]> + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 MYMONEYSPLIT_H +#define MYMONEYSPLIT_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// ---------------------------------------------------------------------------- +// QT Includes + +#include <qstring.h> +#include <qdatetime.h> + +// ---------------------------------------------------------------------------- +// Project Includes + +#include "mymoneyexception.h" +#include "mymoneyutils.h" +#include "mymoneymoney.h" +#include <kmymoney/export.h> +#include <kmymoney/mymoneyobject.h> +#include <kmymoney/mymoneykeyvaluecontainer.h> +class MyMoneyTransaction; + +/** + * @author Thomas Baumgart + */ + +/** + * This class represents a split of a transaction. + */ +class KMYMONEY_EXPORT MyMoneySplit : public MyMoneyObject, public MyMoneyKeyValueContainer +{ +public: + /** + * This enum defines the possible reconciliation states a split + * can be in. Possible values are as follows: + * + * @li NotReconciled + * @li Cleared + * @li Reconciled + * @li Frozen + * + * Whenever a new split is created, it has the status NotReconciled. It + * can be set to cleared when the transaction has been performed. Once the + * account is reconciled, cleared splits will be set to Reconciled. The + * state Frozen will be used, when the concept of books is introduced into + * the engine and a split must not be changed anymore. + */ + enum reconcileFlagE { + Unknown = -1, + NotReconciled = 0, + Cleared, + Reconciled, + Frozen, + // insert new values above + MaxReconcileState + }; + + typedef enum { + UnknownTransactionType = -1, + BuyShares = 0, + SellShares, + Dividend, + ReinvestDividend, + Yield, + AddShares, + RemoveShares, + SplitShares + } investTransactionTypeE; + + MyMoneySplit(); + MyMoneySplit(const QDomElement& node); + MyMoneySplit(const QString& id, const MyMoneySplit& right); + ~MyMoneySplit(); + + bool operator == (const MyMoneySplit&) const; + + void writeXML(QDomDocument& document, QDomElement& parent) const; + + /** + * This method checks if a reference to the given object exists. It returns, + * a @p true if the object is referencing the one requested by the + * parameter @p id. If it does not, this method returns @p false. + * + * @param id id of the object to be checked for references + * @retval true This object references object with id @p id. + * @retval false This object does not reference the object with id @p id. + */ + virtual bool hasReferenceTo(const QString& id) const; + + const MyMoneyMoney& shares(void) const { return m_shares; } + const MyMoneyMoney& value(void) const { return m_value; } + + /** + * This method returns the price. If the member m_price is not zero + * its value is returned. Otherwise, if m_shares is not zero the quotient + * of m_value / m_shares is returned. If m_values equals to zero, 1 + * will be returned. + */ + MyMoneyMoney price(void) const; + /** This method just returns what is in m_price, so when we write to the + * database, we don't just generate prices + */ + MyMoneyMoney actualPrice(void) const { return m_price; } + + const MyMoneyMoney value(const QString& transactionCurrencyId, const QString& splitCurrencyId) const; + + /** + * Required to have (direct) access to the MyMoneyKeyValueContainer::value() method. + */ + const QString& value(const QString& key) const { return MyMoneyKeyValueContainer::value(key); } + + /** + * Required to have (direct) access to the MyMoneyKeyValueContainer::setValue() method. + */ + void setValue(const QString& key, const QString& value) { MyMoneyKeyValueContainer::setValue(key, value); } + + const QString& accountId(void) const { return m_account; } + const QString& memo(void) const { return m_memo; } + reconcileFlagE reconcileFlag(void) const { return m_reconcileFlag; } + const QDate& reconcileDate(void) const { return m_reconcileDate; } + const QString& payeeId(void) const { return m_payee; } + const QString& action(void) const { return m_action; } + const QString& number(void) const { return m_number; } + bool isAmortizationSplit(void) const { return m_action == ActionAmortization; } + bool isInterestSplit(void) const { return m_action == ActionInterest; } + bool isAutoCalc(void) const { return (m_shares == MyMoneyMoney::autoCalc) || (m_value == MyMoneyMoney::autoCalc); } + const QString& bankID(void) const { return m_bankID; } + const QString& transactionId(void) const { return m_transactionId; } + + void setShares(const MyMoneyMoney& shares); + void setValue(const MyMoneyMoney& value); + void setPrice(const MyMoneyMoney& price); + + /** + * This method is used to set either the shares or the value depending on + * the currencies assigned to the split/account and the transaction. + * + * If @p transactionCurrencyId equals @p splitCurrencyId this method + * calls setValue(MyMoneyMoney) otherwise setShares(MyMoneyMoney). + * + * @param value the value to be assiged + * @param transactionCurrencyId the id of the currency assigned to the transaction + * @param splitCurrencyId the id of the currency assigned to the split (i.e. the + * the id of the currency assigned to the account that is + * referenced by the split) + */ + void setValue(const MyMoneyMoney& value, const QString& transactionCurrencyId, const QString& splitCurrencyId); + + void setAccountId(const QString& account); + void setMemo(const QString& memo); + void setReconcileFlag(const reconcileFlagE flag); + void setReconcileDate(const QDate& date); + void setPayeeId(const QString& payee); + void setAction(const QString& action); + void setAction(investTransactionTypeE type); + void setNumber(const QString& number); + void setBankID(const QString& bankID) { m_bankID = bankID; }; + void setTransactionId(const QString& id) { m_transactionId = id; } + + /** + * returns @a true if this its a transaction matched against an imported + * transaction. The imported and matched transaction can be extracted + * using matchedTransaction() and can be removed using removeMatch(). + */ + bool isMatched(void) const; + + /** + * add an imported transaction @p t as matching transaction. Any previously + * added transaction will be overridden. @p t.isImported() must return true, + * otherwise the transaction is not stored. + */ + void addMatch(const MyMoneyTransaction& t); + + /** + * remove the data of the imported transaction added with addMatch(). + */ + void removeMatch(void); + + /** + * Return the matching imported transaction. If no such transaction + * is available (isMatched() returns false) an empty transaction is returned. + */ + MyMoneyTransaction matchedTransaction(void) const; + + static const char ActionCheck[]; + static const char ActionDeposit[]; + static const char ActionTransfer[]; + static const char ActionWithdrawal[]; + static const char ActionATM[]; + + static const char ActionAmortization[]; + static const char ActionInterest[]; + + static const char ActionBuyShares[]; // negative amount is sellShares + static const char ActionDividend[]; + static const char ActionReinvestDividend[]; + static const char ActionYield[]; + static const char ActionAddShares[]; // negative amount is removeShares + static const char ActionSplitShares[]; + +private: + /** + * This member contains the ID of the transaction + */ + QString m_id; + + /** + * This member contains the ID of the payee + */ + QString m_payee; + + /** + * This member contains the ID of the account + */ + QString m_account; + + /** + */ + MyMoneyMoney m_shares; + + /** + */ + MyMoneyMoney m_value; + + + /** + * If the quotient of m_shares divided by m_values is not the correct price + * because of truncation, the price can be stored in this member. For display + * purpose and transaction edit this value can be used by the application. + */ + MyMoneyMoney m_price; + + QString m_memo; + + /** + * This member contains information about the reconciliation + * state of the split. Possible values are + * + * @li NotReconciled + * @li Cleared + * @li Reconciled + * @li Frozen + * + */ + reconcileFlagE m_reconcileFlag; + + /** + * In case the reconciliation flag is set to Reconciled or Frozen + * this member contains the date of the reconciliation. + */ + QDate m_reconcileDate; + + /** + * The m_action member is an arbitrary string, but is intended to + * be conveniently limited to a menu of selections such as + * "Buy", "Sell", "Interest", etc. + */ + QString m_action; + + /** + * The m_number member is used to store a reference number to + * the split supplied by the user (e.g. check number, etc.). + */ + QString m_number; + + /** + * This member keeps the bank's unique ID for the split, so we can + * avoid duplicates. This is only used for electronic statement downloads. + * + * This should only be set on the split which refers to the account + * that was downloaded. + */ + QString m_bankID; + + /** + * This member keeps a backward id to the transaction that this + * split can be found in. It is the purpose of the MyMoneyTransaction + * object to maintain this member variable. + */ + QString m_transactionId; +}; + +#endif |