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