File indexing completed on 2024-05-19 16:14:51
0001 /* 0002 SPDX-FileCopyrightText: 2007-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 #ifndef INVESTACTIVITIES_H 0008 #define INVESTACTIVITIES_H 0009 0010 // ---------------------------------------------------------------------------- 0011 // QT Includes 0012 0013 #include <qglobal.h> 0014 0015 // ---------------------------------------------------------------------------- 0016 // KDE Includes 0017 0018 // ---------------------------------------------------------------------------- 0019 // Project Includes 0020 0021 class QWidget; 0022 class QStringList; 0023 0024 class AmountEdit; 0025 class KMyMoneyCategory; 0026 0027 class MyMoneyMoney; 0028 class MyMoneySplit; 0029 class MyMoneyTransaction; 0030 class MyMoneySecurity; 0031 0032 class InvestTransactionEditor; 0033 0034 namespace eMyMoney { 0035 namespace Split { 0036 enum class InvestmentTransactionType; 0037 } 0038 } 0039 namespace eDialogs { 0040 enum class PriceMode; 0041 } 0042 0043 template <typename T> class QList; 0044 template <class Key, class Value> class QMap; 0045 0046 namespace Invest 0047 { 0048 0049 class ActivityPrivate; 0050 class Activity 0051 { 0052 Q_DISABLE_COPY(Activity) 0053 0054 public: 0055 virtual eMyMoney::Split::InvestmentTransactionType type() const = 0; 0056 virtual void showWidgets() const = 0; 0057 virtual bool isComplete(QString& reason) const = 0; 0058 0059 /** 0060 * Create a transaction @p t based on the split @p s0 and the data contained 0061 * in the widgets. In multiselection mode, @p assetAccountSplit, @p feeSplits, @p 0062 * interestSplits, @p security and @p currency are taken from the original 0063 * transaction and should be used as well. 0064 * 0065 * @return @p true if creation was successful, @p false otherwise 0066 */ 0067 virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& m_feeSplits, QList<MyMoneySplit>& interestSplits, QList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) = 0; 0068 0069 virtual void preloadAssetAccount(); 0070 virtual ~Activity(); 0071 0072 bool &memoChanged(); 0073 QString& memoText(); 0074 0075 protected: 0076 explicit Activity(InvestTransactionEditor* editor); 0077 QWidget* haveWidget(const QString& name) const; 0078 bool haveAssetAccount() const; 0079 bool haveFees(bool optional = false) const; 0080 bool haveInterest(bool optional = false) const; 0081 bool haveShares() const; 0082 bool havePrice() const; 0083 bool isMultiSelection() const; 0084 QString priceLabel() const; 0085 bool createCategorySplits(const MyMoneyTransaction& t, KMyMoneyCategory* cat, AmountEdit* amount, MyMoneyMoney factor, QList<MyMoneySplit>&splits, const QList<MyMoneySplit>& osplits) const; 0086 void createAssetAccountSplit(MyMoneySplit& split, const MyMoneySplit& stockSplit) const; 0087 MyMoneyMoney sumSplits(const MyMoneySplit& s0, const QList<MyMoneySplit>& feeSplits, const QList<MyMoneySplit>& interestSplits) const; 0088 bool haveCategoryAndAmount(const QString& category, const QString& amount, bool optional) const; 0089 void setLabelText(const QString& idx, const QString& txt) const; 0090 void setWidgetVisibility(const QStringList& widgetIds, bool visible) const; 0091 eDialogs::PriceMode priceMode() const; 0092 0093 protected: 0094 ActivityPrivate* d_ptr; 0095 Q_DECLARE_PRIVATE(Activity) 0096 }; 0097 0098 class Buy : public Activity 0099 { 0100 public: 0101 explicit Buy(InvestTransactionEditor* editor); 0102 ~Buy() override; 0103 eMyMoney::Split::InvestmentTransactionType type() const override; 0104 void showWidgets() const override; 0105 bool isComplete(QString& reason) const override; 0106 bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& m_feeSplits, QList<MyMoneySplit>& interestSplits, QList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) override; 0107 }; 0108 0109 class Sell : public Activity 0110 { 0111 public: 0112 explicit Sell(InvestTransactionEditor* editor); 0113 ~Sell() override; 0114 eMyMoney::Split::InvestmentTransactionType type() const override; 0115 void showWidgets() const override; 0116 bool isComplete(QString& reason) const override; 0117 bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& m_feeSplits, QList<MyMoneySplit>& interestSplits, QList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) override; 0118 }; 0119 0120 class Div : public Activity 0121 { 0122 public: 0123 explicit Div(InvestTransactionEditor* editor); 0124 ~Div() override; 0125 eMyMoney::Split::InvestmentTransactionType type() const override; 0126 void showWidgets() const override; 0127 bool isComplete(QString& reason) const override; 0128 bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& m_feeSplits, QList<MyMoneySplit>& interestSplits, QList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) override; 0129 }; 0130 0131 class Reinvest : public Activity 0132 { 0133 public: 0134 explicit Reinvest(InvestTransactionEditor* editor); 0135 ~Reinvest() override; 0136 eMyMoney::Split::InvestmentTransactionType type() const override; 0137 void showWidgets() const override; 0138 bool isComplete(QString& reason) const override; 0139 bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& m_feeSplits, QList<MyMoneySplit>& interestSplits, QList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) override; 0140 }; 0141 0142 class Add : public Activity 0143 { 0144 public: 0145 explicit Add(InvestTransactionEditor* editor); 0146 ~Add() override; 0147 eMyMoney::Split::InvestmentTransactionType type() const override; 0148 void showWidgets() const override; 0149 bool isComplete(QString& reason) const override; 0150 bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& m_feeSplits, QList<MyMoneySplit>& interestSplits, QList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) override; 0151 }; 0152 0153 class Remove : public Activity 0154 { 0155 public: 0156 explicit Remove(InvestTransactionEditor* editor); 0157 ~Remove() override; 0158 eMyMoney::Split::InvestmentTransactionType type() const override; 0159 void showWidgets() const override; 0160 bool isComplete(QString& reason) const override; 0161 bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& m_feeSplits, QList<MyMoneySplit>& interestSplits, QList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) override; 0162 }; 0163 0164 class Split : public Activity 0165 { 0166 public: 0167 explicit Split(InvestTransactionEditor* editor); 0168 ~Split() override; 0169 eMyMoney::Split::InvestmentTransactionType type() const override; 0170 void showWidgets() const override; 0171 bool isComplete(QString& reason) const override; 0172 bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& m_feeSplits, QList<MyMoneySplit>& interestSplits, QList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) override; 0173 }; 0174 0175 class IntInc : public Activity 0176 { 0177 public: 0178 explicit IntInc(InvestTransactionEditor* editor); 0179 ~IntInc() override; 0180 eMyMoney::Split::InvestmentTransactionType type() const override; 0181 void showWidgets() const override; 0182 bool isComplete(QString& reason) const override; 0183 bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& m_feeSplits, QList<MyMoneySplit>& interestSplits, QList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) override; 0184 }; 0185 0186 } // namespace Invest 0187 0188 #endif // INVESTACTIVITIES_H 0189