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.cpp | |
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.cpp')
-rw-r--r-- | kmymoney2/mymoney/mymoneysplit.cpp | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/kmymoney2/mymoney/mymoneysplit.cpp b/kmymoney2/mymoney/mymoneysplit.cpp new file mode 100644 index 0000000..a19ff43 --- /dev/null +++ b/kmymoney2/mymoney/mymoneysplit.cpp @@ -0,0 +1,272 @@ +/*************************************************************************** + mymoneysplit.cpp - 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. * + * * + ***************************************************************************/ + +#include "mymoneysplit.h" +#include "mymoneytransaction.h" + +const char MyMoneySplit::ActionCheck[] = "Check"; +const char MyMoneySplit::ActionDeposit[] = "Deposit"; +const char MyMoneySplit::ActionTransfer[] = "Transfer"; +const char MyMoneySplit::ActionWithdrawal[] = "Withdrawal"; +const char MyMoneySplit::ActionATM[] = "ATM"; + +const char MyMoneySplit::ActionAmortization[] = "Amortization"; +const char MyMoneySplit::ActionInterest[] = "Interest"; + +const char MyMoneySplit::ActionBuyShares[] = "Buy"; +const char MyMoneySplit::ActionDividend[] = "Dividend"; +const char MyMoneySplit::ActionReinvestDividend[] = "Reinvest"; +const char MyMoneySplit::ActionYield[] = "Yield"; +const char MyMoneySplit::ActionAddShares[] = "Add"; +const char MyMoneySplit::ActionSplitShares[] = "Split"; + +MyMoneySplit::MyMoneySplit() +{ + m_reconcileFlag = NotReconciled; +} + +MyMoneySplit::MyMoneySplit(const QDomElement& node) : + MyMoneyObject(node, false), + MyMoneyKeyValueContainer(node.elementsByTagName("KEYVALUEPAIRS").item(0).toElement()) +{ + if("SPLIT" != node.tagName()) + throw new MYMONEYEXCEPTION("Node was not SPLIT"); + + clearId(); + + m_payee = QStringEmpty(node.attribute("payee")); + m_reconcileDate = stringToDate(QStringEmpty(node.attribute("reconciledate"))); + m_action = QStringEmpty(node.attribute("action")); + m_reconcileFlag = static_cast<MyMoneySplit::reconcileFlagE>(node.attribute("reconcileflag").toInt()); + m_memo = QStringEmpty(node.attribute("memo")); + m_value = MyMoneyMoney(QStringEmpty(node.attribute("value"))); + m_shares = MyMoneyMoney(QStringEmpty(node.attribute("shares"))); + m_price = MyMoneyMoney(QStringEmpty(node.attribute("price"))); + m_account = QStringEmpty(node.attribute("account")); + m_number = QStringEmpty(node.attribute("number")); + m_bankID = QStringEmpty(node.attribute("bankid")); +} + +MyMoneySplit::MyMoneySplit(const QString& id, const MyMoneySplit& right) : + MyMoneyObject(id) +{ + *this = right; + setId(id); +} + +MyMoneySplit::~MyMoneySplit() +{ +} + +bool MyMoneySplit::operator == (const MyMoneySplit& right) const +{ + return MyMoneyObject::operator==(right) && + MyMoneyKeyValueContainer::operator==(right) && + m_account == right.m_account && + m_payee == right.m_payee && + m_memo == right.m_memo && + m_action == right.m_action && + m_reconcileDate == right.m_reconcileDate && + m_reconcileFlag == right.m_reconcileFlag && + ((m_number.length() == 0 && right.m_number.length() == 0) || m_number == right.m_number) && + m_shares == right.m_shares && + m_value == right.m_value && + m_price == right.m_price && + m_transactionId == right.m_transactionId; +} + +void MyMoneySplit::setAccountId(const QString& account) +{ + m_account = account; +} + +void MyMoneySplit::setMemo(const QString& memo) +{ + m_memo = memo; +} + +void MyMoneySplit::setReconcileDate(const QDate& date) +{ + m_reconcileDate = date; +} + +void MyMoneySplit::setReconcileFlag(const reconcileFlagE flag) +{ + m_reconcileFlag = flag; +} + +void MyMoneySplit::setShares(const MyMoneyMoney& shares) +{ + m_shares = shares; +} + +void MyMoneySplit::setValue(const MyMoneyMoney& value) +{ + m_value = value; +} + +void MyMoneySplit::setValue(const MyMoneyMoney& value, const QString& transactionCurrencyId, const QString& splitCurrencyId) +{ + if(transactionCurrencyId == splitCurrencyId) + setValue(value); + else + setShares(value); +} + +void MyMoneySplit::setPayeeId(const QString& payee) +{ + m_payee = payee; +} + +void MyMoneySplit::setAction(investTransactionTypeE type) +{ + switch(type) { + case BuyShares: + case SellShares: + setAction(ActionBuyShares); + break; + case Dividend: + setAction(ActionDividend); + break; + case Yield: + setAction(ActionYield); + break; + case ReinvestDividend: + setAction(ActionReinvestDividend); + break; + case AddShares: + case RemoveShares: + setAction(ActionAddShares); + break; + case MyMoneySplit::SplitShares: + setAction(ActionSplitShares); + break; + case MyMoneySplit::UnknownTransactionType: + break; + } +} + +void MyMoneySplit::setAction(const QString& action) +{ + m_action = action; +} + +void MyMoneySplit::setNumber(const QString& number) +{ + m_number = number; +} + +const MyMoneyMoney MyMoneySplit::value(const QString& transactionCurrencyId, const QString& splitCurrencyId) const +{ + return (transactionCurrencyId == splitCurrencyId) ? m_value : m_shares; +} + +void MyMoneySplit::setPrice(const MyMoneyMoney& price) +{ + m_price = price; +} + +MyMoneyMoney MyMoneySplit::price(void) const +{ + if(!m_price.isZero()) + return m_price; + if(!m_value.isZero() && !m_shares.isZero()) + return m_value / m_shares; + return MyMoneyMoney(1,1); +} + +void MyMoneySplit::writeXML(QDomDocument& document, QDomElement& parent) const +{ + QDomElement el = document.createElement("SPLIT"); + + writeBaseXML(document, el); + + el.setAttribute("payee", m_payee); + el.setAttribute("reconciledate", dateToString(m_reconcileDate)); + el.setAttribute("action", m_action); + el.setAttribute("reconcileflag", m_reconcileFlag); + el.setAttribute("value", m_value.toString()); + el.setAttribute("shares", m_shares.toString()); + if(!m_price.isZero()) + el.setAttribute("price", m_price.toString()); + el.setAttribute("memo", m_memo); + // No need to write the split id as it will be re-assigned when the file is read + // el.setAttribute("id", split.id()); + el.setAttribute("account", m_account); + el.setAttribute("number", m_number); + el.setAttribute("bankid", m_bankID); + + MyMoneyKeyValueContainer::writeXML(document, el); + + parent.appendChild(el); +} + +bool MyMoneySplit::hasReferenceTo(const QString& id) const +{ + bool rc = false; + if(isMatched()) { + rc = matchedTransaction().hasReferenceTo(id); + } + return rc || (id == m_account) || (id == m_payee); +} + +bool MyMoneySplit::isMatched(void) const +{ + return !(value("kmm-matched-tx").isEmpty()); +} + +void MyMoneySplit::addMatch(const MyMoneyTransaction& _t) +{ + if(_t.isImported() && !isMatched()) { + MyMoneyTransaction t(_t); + t.clearId(); + QDomDocument doc("MATCH"); + QDomElement el = doc.createElement("CONTAINER"); + doc.appendChild(el); + t.writeXML(doc, el); + QString xml = doc.toString(); + xml.replace("<", "<"); + setValue("kmm-matched-tx", xml); + } +} + +void MyMoneySplit::removeMatch(void) +{ + deletePair("kmm-matched-tx"); +} + +MyMoneyTransaction MyMoneySplit::matchedTransaction(void) const +{ + QString xml = value("kmm-matched-tx"); + if(!xml.isEmpty()) { + xml.replace("<", "<"); + QDomDocument doc; + QDomElement node; + doc.setContent(xml); + node = doc.documentElement().firstChild().toElement(); + MyMoneyTransaction t(node, false); + return t; + } + return MyMoneyTransaction(); +} + +// vim:cin:si:ai:et:ts=2:sw=2: |