|
|
|
/***************************************************************************
|
|
|
|
mymoneysplit.h - description
|
|
|
|
-------------------
|
|
|
|
begin : Sun Apr 28 2002
|
|
|
|
copyright : (C) 2000-2002 by Michael Edwardes
|
|
|
|
email : mte@users.sourceforge.net
|
|
|
|
Javier Campos Morales <javi_c@users.sourceforge.net>
|
|
|
|
Felix Rodriguez <frodriguez@users.sourceforge.net>
|
|
|
|
John C <thetacoturtle@users.sourceforge.net>
|
|
|
|
Thomas Baumgart <ipwizard@users.sourceforge.net>
|
|
|
|
Kevin Tambascio <ktambascio@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 MYMONEYSPLIT_H
|
|
|
|
#define MYMONEYSPLIT_H
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include <config.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// QT Includes
|
|
|
|
|
|
|
|
#include <tqstring.h>
|
|
|
|
#include <tqdatetime.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 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
|