/*************************************************************************** mymoneysplit.h - description ------------------- begin : Sun Apr 28 2002 copyright : (C) 2000-2002 by Michael Edwardes email : mte@users.sourceforge.net Javier Campos Morales Felix Rodriguez John C Thomas Baumgart Kevin Tambascio ***************************************************************************/ /*************************************************************************** * * * 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 // ---------------------------------------------------------------------------- // TQt Includes #include #include // ---------------------------------------------------------------------------- // Project Includes #include #include #include #include #include #include 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 TQDomElement& node); MyMoneySplit(const TQString& id, const MyMoneySplit& right); ~MyMoneySplit(); bool operator == (const MyMoneySplit&) const; void writeXML(TQDomDocument& document, TQDomElement& 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 TQString& 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 TQString& transactionCurrencyId, const TQString& splitCurrencyId) const; /** * Required to have (direct) access to the MyMoneyKeyValueContainer::value() method. */ const TQString& value(const TQString& key) const { return MyMoneyKeyValueContainer::value(key); } /** * Required to have (direct) access to the MyMoneyKeyValueContainer::setValue() method. */ void setValue(const TQString& key, const TQString& value) { MyMoneyKeyValueContainer::setValue(key, value); } const TQString& accountId(void) const { return m_account; } const TQString& memo(void) const { return m_memo; } reconcileFlagE reconcileFlag(void) const { return m_reconcileFlag; } const TQDate& reconcileDate(void) const { return m_reconcileDate; } const TQString& payeeId(void) const { return m_payee; } const TQString& action(void) const { return m_action; } const TQString& 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 TQString& bankID(void) const { return m_bankID; } const TQString& 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 TQString& transactionCurrencyId, const TQString& splitCurrencyId); void setAccountId(const TQString& account); void setMemo(const TQString& memo); void setReconcileFlag(const reconcileFlagE flag); void setReconcileDate(const TQDate& date); void setPayeeId(const TQString& payee); void setAction(const TQString& action); void setAction(investTransactionTypeE type); void setNumber(const TQString& number); void setBankID(const TQString& bankID) { m_bankID = bankID; }; void setTransactionId(const TQString& 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 */ TQString m_id; /** * This member contains the ID of the payee */ TQString m_payee; /** * This member contains the ID of the account */ TQString 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; TQString 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. */ TQDate 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. */ TQString 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.). */ TQString 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. */ TQString 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. */ TQString m_transactionId; }; #endif