File indexing completed on 2024-05-12 16:42:18

0001 /*
0002     SPDX-FileCopyrightText: 2016-2018 Thomas Baumgart <tbaumgart@kde.org>
0003     SPDX-FileCopyrightText: 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "ledgertransaction.h"
0008 #include "ledgertransaction_p.h"
0009 
0010 // ----------------------------------------------------------------------------
0011 // QT Includes
0012 
0013 #include <QString>
0014 #include <QDate>
0015 
0016 // ----------------------------------------------------------------------------
0017 // KDE Includes
0018 
0019 #include <KLocalizedString>
0020 
0021 // ----------------------------------------------------------------------------
0022 // Project Includes
0023 
0024 #include "mymoneysplit.h"
0025 #include "mymoneytransaction.h"
0026 #include "mymoneymoney.h"
0027 #include "mymoneyenums.h"
0028 
0029 using namespace eMyMoney;
0030 
0031 LedgerTransaction::LedgerTransaction() :
0032     LedgerItem(),
0033     d_ptr(new LedgerTransactionPrivate)
0034 {
0035 }
0036 
0037 LedgerTransaction::LedgerTransaction(const MyMoneyTransaction& t, const MyMoneySplit& s) :
0038     LedgerItem(),
0039     d_ptr(new LedgerTransactionPrivate)
0040 {
0041     Q_D(LedgerTransaction);
0042     d->init(t,s);
0043 }
0044 
0045 LedgerTransaction::LedgerTransaction(LedgerTransactionPrivate &dd) :
0046     d_ptr(&dd)
0047 {
0048 }
0049 
0050 LedgerTransaction::LedgerTransaction(LedgerTransactionPrivate &dd, const MyMoneyTransaction& t, const MyMoneySplit& s) :
0051     d_ptr(&dd)
0052 {
0053     Q_D(LedgerTransaction);
0054     d->init(t,s);
0055 }
0056 
0057 LedgerTransaction::LedgerTransaction(const LedgerTransaction& other) :
0058     d_ptr(new LedgerTransactionPrivate(*other.d_func()))
0059 {
0060 }
0061 
0062 LedgerTransaction::~LedgerTransaction()
0063 {
0064     delete d_ptr;
0065 }
0066 
0067 QDate LedgerTransaction::postDate() const
0068 {
0069     Q_D(const LedgerTransaction);
0070     return d->m_transaction.postDate();
0071 }
0072 
0073 MyMoneyTransaction LedgerTransaction::transaction() const
0074 {
0075     Q_D(const LedgerTransaction);
0076     return d->m_transaction;
0077 }
0078 
0079 const MyMoneySplit& LedgerTransaction::split() const
0080 {
0081     Q_D(const LedgerTransaction);
0082     return d->m_split;
0083 }
0084 
0085 QString LedgerTransaction::accountId() const
0086 {
0087     Q_D(const LedgerTransaction);
0088     return d->m_split.accountId();
0089 }
0090 
0091 QString LedgerTransaction::account() const
0092 {
0093     Q_D(const LedgerTransaction);
0094     return d->m_account;
0095 }
0096 
0097 QString LedgerTransaction::counterAccountId() const
0098 {
0099     Q_D(const LedgerTransaction);
0100     return d->m_counterAccountId;
0101 }
0102 
0103 QString LedgerTransaction::counterAccount() const
0104 {
0105     Q_D(const LedgerTransaction);
0106     return d->m_counterAccount;
0107 }
0108 
0109 QString LedgerTransaction::costCenterId() const
0110 {
0111     Q_D(const LedgerTransaction);
0112     return d->m_costCenterId;
0113 }
0114 
0115 QString LedgerTransaction::payeeName() const
0116 {
0117     Q_D(const LedgerTransaction);
0118     return d->m_payeeName;
0119 }
0120 
0121 QString LedgerTransaction::payeeId() const
0122 {
0123     Q_D(const LedgerTransaction);
0124     return d->m_payeeId;
0125 }
0126 
0127 QString LedgerTransaction::transactionNumber() const
0128 {
0129     Q_D(const LedgerTransaction);
0130     return d->m_split.number();
0131 }
0132 
0133 Qt::ItemFlags LedgerTransaction::flags() const
0134 {
0135     return (Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable);
0136 }
0137 
0138 QString LedgerTransaction::transactionSplitId() const
0139 {
0140     Q_D(const LedgerTransaction);
0141     QString rc;
0142     if(!d->m_transaction.id().isEmpty()) {
0143         rc = QString("%1-%2").arg(d->m_transaction.id(), d->m_split.id());
0144     }
0145     return rc;
0146 }
0147 
0148 int LedgerTransaction::splitCount() const
0149 {
0150     Q_D(const LedgerTransaction);
0151     return d->m_transaction.splitCount();
0152 }
0153 
0154 QString LedgerTransaction::transactionId() const
0155 {
0156     Q_D(const LedgerTransaction);
0157     return d->m_transaction.id();
0158 }
0159 
0160 eMyMoney::Split::State LedgerTransaction::reconciliationState() const
0161 {
0162     Q_D(const LedgerTransaction);
0163     return d->m_split.reconcileFlag();
0164 }
0165 
0166 QString LedgerTransaction::reconciliationStateShort() const
0167 {
0168     Q_D(const LedgerTransaction);
0169     QString rc;
0170     switch(d->m_split.reconcileFlag()) {
0171     case eMyMoney::Split::State::NotReconciled:
0172     default:
0173         break;
0174     case eMyMoney::Split::State::Cleared:
0175         rc = i18nc("Reconciliation flag C", "C");
0176         break;
0177     case eMyMoney::Split::State::Reconciled:
0178         rc = i18nc("Reconciliation flag R", "R");
0179         break;
0180     case eMyMoney::Split::State::Frozen:
0181         rc = i18nc("Reconciliation flag F", "F");
0182         break;
0183     }
0184     return rc;
0185 }
0186 
0187 QString LedgerTransaction::reconciliationStateLong() const
0188 {
0189     Q_D(const LedgerTransaction);
0190     QString rc;
0191     switch(d->m_split.reconcileFlag()) {
0192     case eMyMoney::Split::State::NotReconciled:
0193     default:
0194         rc = i18nc("Reconciliation flag empty", "Not reconciled");
0195         break;
0196     case eMyMoney::Split::State::Cleared:
0197         rc = i18nc("Reconciliation flag C", "Cleared");
0198         break;
0199     case eMyMoney::Split::State::Reconciled:
0200         rc = i18nc("Reconciliation flag R", "Reconciled");
0201         break;
0202     case eMyMoney::Split::State::Frozen:
0203         rc = i18nc("Reconciliation flag F", "Frozen");
0204         break;
0205     }
0206     return rc;
0207 }
0208 
0209 QString LedgerTransaction::payment() const
0210 {
0211     Q_D(const LedgerTransaction);
0212     return d->m_payment;
0213 }
0214 
0215 QString LedgerTransaction::deposit() const
0216 {
0217     Q_D(const LedgerTransaction);
0218     return d->m_deposit;
0219 }
0220 
0221 void LedgerTransaction::setBalance(QString txt)
0222 {
0223     Q_D(LedgerTransaction);
0224     d->m_balance = txt;
0225 }
0226 
0227 QString LedgerTransaction::balance() const
0228 {
0229     Q_D(const LedgerTransaction);
0230     return d->m_balance;
0231 }
0232 
0233 MyMoneyMoney LedgerTransaction::shares() const
0234 {
0235     Q_D(const LedgerTransaction);
0236     return d->m_split.shares();
0237 }
0238 
0239 QString LedgerTransaction::sharesAmount() const
0240 {
0241     Q_D(const LedgerTransaction);
0242     return d->m_shares;
0243 }
0244 
0245 QString LedgerTransaction::signedSharesAmount() const
0246 {
0247     Q_D(const LedgerTransaction);
0248     return d->m_signedShares;
0249 }
0250 
0251 QString LedgerTransaction::sharesSuffix() const
0252 {
0253     Q_D(const LedgerTransaction);
0254     return d->m_sharesSuffix;
0255 }
0256 
0257 MyMoneyMoney LedgerTransaction::value() const
0258 {
0259     Q_D(const LedgerTransaction);
0260     return d->m_split.value();
0261 }
0262 
0263 QString LedgerTransaction::memo() const
0264 {
0265     Q_D(const LedgerTransaction);
0266     auto memo = d->m_split.memo();
0267     if(memo.isEmpty()) {
0268         memo = d->m_transaction.memo();
0269     }
0270     return memo;
0271 }
0272 
0273 bool LedgerTransaction::isErroneous() const
0274 {
0275     Q_D(const LedgerTransaction);
0276     return d->m_erroneous;
0277 }
0278 
0279 bool LedgerTransaction::isImported() const
0280 {
0281     Q_D(const LedgerTransaction);
0282     return d->m_transaction.isImported();
0283 }
0284 
0285 LedgerTransaction LedgerTransaction::newTransactionEntry()
0286 {
0287     // create a dummy entry for new transactions
0288     MyMoneyTransaction t;
0289     t.setPostDate(QDate(2900,12,31));
0290     return LedgerTransaction(t, MyMoneySplit());
0291 }
0292 
0293 bool LedgerTransaction::isNewTransactionEntry() const
0294 {
0295     Q_D(const LedgerTransaction);
0296     return d->m_transaction.id().isEmpty() && d->m_split.id().isEmpty();
0297 }
0298 
0299 QString LedgerTransaction::transactionCommodity() const
0300 {
0301     Q_D(const LedgerTransaction);
0302     return d->m_transaction.commodity();
0303 }