File indexing completed on 2024-05-19 05:08:13
0001 /* 0002 SPDX-FileCopyrightText: 2020 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #ifndef INVESTACTIVITIES_H 0007 #define INVESTACTIVITIES_H 0008 0009 // ---------------------------------------------------------------------------- 0010 // QT Includes 0011 0012 #include "qcontainerfwd.h" 0013 #include <qglobal.h> 0014 0015 // ---------------------------------------------------------------------------- 0016 // KDE Includes 0017 0018 // ---------------------------------------------------------------------------- 0019 // Project Includes 0020 0021 class MyMoneyMoney; 0022 class MyMoneySplit; 0023 class SplitModel; 0024 class InvestTransactionEditor; 0025 0026 namespace eMyMoney { 0027 namespace Split { 0028 enum class InvestmentTransactionType; 0029 } 0030 } 0031 0032 namespace eDialogs { 0033 enum class PriceMode; 0034 } 0035 0036 namespace Invest 0037 { 0038 0039 class ActivityPrivate; 0040 class Activity 0041 { 0042 Q_DISABLE_COPY(Activity) 0043 0044 public: 0045 typedef enum { 0046 Unused, 0047 Optional, 0048 Mandatory, 0049 } fieldRequired_t; 0050 0051 virtual eMyMoney::Split::InvestmentTransactionType type() const = 0; 0052 virtual void showWidgets() const = 0; 0053 0054 virtual void adjustStockSplit(MyMoneySplit& stockSplit) = 0; 0055 0056 virtual ~Activity(); 0057 0058 virtual void loadPriceWidget(const MyMoneySplit& split); 0059 virtual MyMoneyMoney totalAmount(const MyMoneySplit& stockSplit, const SplitModel* feesModel, const SplitModel* interestModel) const; 0060 0061 virtual MyMoneyMoney sharesFactor() const; 0062 0063 /** 0064 * This method returns the total value of the shares 0065 * The default is to return MyMoneyMoney(). 0066 * 0067 * Widgets with names @c sharesAmountEdit and @c priceAmountEdit must 0068 * be present. If the priceMode is eDialogs::PriceMode::PricePerShare 0069 * the product of shares times the price will be returned. In other 0070 * cases, the value of price is returned. 0071 */ 0072 virtual MyMoneyMoney valueAllShares() const; 0073 0074 virtual MyMoneyMoney feesFactor() const; 0075 virtual MyMoneyMoney interestFactor() const; 0076 0077 virtual fieldRequired_t feesRequired() const { 0078 return Unused; 0079 } 0080 virtual fieldRequired_t interestRequired() const { 0081 return Unused; 0082 } 0083 virtual fieldRequired_t assetAccountRequired() const { 0084 return Unused; 0085 } 0086 virtual fieldRequired_t priceRequired() const { 0087 return Unused; 0088 } 0089 0090 eDialogs::PriceMode priceMode() const; 0091 0092 bool haveFees( fieldRequired_t = Mandatory) const; 0093 bool haveInterest( fieldRequired_t = Mandatory) const; 0094 0095 QString actionString() const; 0096 0097 protected: 0098 explicit Activity(InvestTransactionEditor* editor, const QString& action); 0099 virtual QString priceLabelText() const; 0100 virtual QString sharesLabelText() const; 0101 0102 bool haveCategoryAndAmount(const QString& category, const QString& amount, fieldRequired_t optional) const; 0103 void setLabelText(const QString& idx, const QString& txt) const; 0104 void setWidgetVisibility(const QStringList& widgetIds, bool visible) const; 0105 void setupWidgets(const QStringList& activityWidgets) const; 0106 0107 protected: 0108 ActivityPrivate* d_ptr; 0109 Q_DECLARE_PRIVATE(Activity) 0110 }; 0111 0112 class Buy : public Activity 0113 { 0114 public: 0115 explicit Buy(InvestTransactionEditor* editor); 0116 ~Buy() override; 0117 eMyMoney::Split::InvestmentTransactionType type() const override; 0118 void showWidgets() const override; 0119 virtual void adjustStockSplit(MyMoneySplit&) override {} 0120 0121 fieldRequired_t feesRequired() const override 0122 { 0123 return Optional; 0124 } 0125 fieldRequired_t interestRequired() const override 0126 { 0127 return Optional; 0128 } 0129 fieldRequired_t assetAccountRequired() const override 0130 { 0131 return Mandatory; 0132 } 0133 fieldRequired_t priceRequired() const override 0134 { 0135 return Mandatory; 0136 } 0137 }; 0138 0139 class Sell : public Activity 0140 { 0141 public: 0142 explicit Sell(InvestTransactionEditor* editor); 0143 ~Sell() override; 0144 eMyMoney::Split::InvestmentTransactionType type() const override; 0145 void showWidgets() const override; 0146 virtual void adjustStockSplit(MyMoneySplit&) override {} 0147 0148 MyMoneyMoney sharesFactor() const override; 0149 fieldRequired_t feesRequired() const override { 0150 return Optional; 0151 } 0152 fieldRequired_t interestRequired() const override { 0153 return Optional; 0154 } 0155 fieldRequired_t assetAccountRequired() const override; 0156 fieldRequired_t priceRequired() const override { 0157 return Mandatory; 0158 } 0159 }; 0160 0161 class Div : public Activity 0162 { 0163 public: 0164 explicit Div(InvestTransactionEditor* editor); 0165 ~Div() override; 0166 eMyMoney::Split::InvestmentTransactionType type() const override; 0167 void showWidgets() const override; 0168 virtual void adjustStockSplit(MyMoneySplit&) override 0169 { 0170 } 0171 fieldRequired_t feesRequired() const override 0172 { 0173 return Optional; 0174 } 0175 fieldRequired_t interestRequired() const override 0176 { 0177 return Mandatory; 0178 } 0179 fieldRequired_t assetAccountRequired() const override 0180 { 0181 return Mandatory; 0182 } 0183 }; 0184 0185 class Yield : public Activity 0186 { 0187 public: 0188 explicit Yield(InvestTransactionEditor* editor); 0189 ~Yield() override; 0190 eMyMoney::Split::InvestmentTransactionType type() const override; 0191 void showWidgets() const override; 0192 virtual void adjustStockSplit(MyMoneySplit&) override 0193 { 0194 } 0195 fieldRequired_t feesRequired() const override 0196 { 0197 return Optional; 0198 } 0199 fieldRequired_t interestRequired() const override 0200 { 0201 return Mandatory; 0202 } 0203 fieldRequired_t assetAccountRequired() const override 0204 { 0205 return Mandatory; 0206 } 0207 }; 0208 0209 class Reinvest : public Activity 0210 { 0211 public: 0212 explicit Reinvest(InvestTransactionEditor* editor); 0213 ~Reinvest() override; 0214 eMyMoney::Split::InvestmentTransactionType type() const override; 0215 void showWidgets() const override; 0216 virtual void adjustStockSplit(MyMoneySplit&) override {} 0217 MyMoneyMoney totalAmount(const MyMoneySplit& stockSplit, const SplitModel* feesModel, const SplitModel* interestModel) const override; 0218 0219 fieldRequired_t feesRequired() const override { 0220 return Optional; 0221 } 0222 fieldRequired_t interestRequired() const override { 0223 return Mandatory; 0224 } 0225 fieldRequired_t priceRequired() const override { 0226 return Mandatory; 0227 } 0228 }; 0229 0230 class Add : public Activity 0231 { 0232 public: 0233 explicit Add(InvestTransactionEditor* editor); 0234 ~Add() override; 0235 eMyMoney::Split::InvestmentTransactionType type() const override; 0236 void showWidgets() const override; 0237 void adjustStockSplit(MyMoneySplit& stockSplit) override; 0238 MyMoneyMoney totalAmount(const MyMoneySplit& stockSplit, const SplitModel* feesModel, const SplitModel* interestModel) const override; 0239 }; 0240 0241 class Remove : public Activity 0242 { 0243 public: 0244 explicit Remove(InvestTransactionEditor* editor); 0245 ~Remove() override; 0246 eMyMoney::Split::InvestmentTransactionType type() const override; 0247 void showWidgets() const override; 0248 void adjustStockSplit(MyMoneySplit& stockSplit) override; 0249 MyMoneyMoney totalAmount(const MyMoneySplit& stockSplit, const SplitModel* feesModel, const SplitModel* interestModel) const override; 0250 0251 virtual MyMoneyMoney sharesFactor() const override; 0252 }; 0253 0254 class Split : public Activity 0255 { 0256 public: 0257 explicit Split(InvestTransactionEditor* editor); 0258 ~Split() override; 0259 eMyMoney::Split::InvestmentTransactionType type() const override; 0260 void showWidgets() const override; 0261 virtual void adjustStockSplit(MyMoneySplit& stockSplit) override; 0262 MyMoneyMoney totalAmount(const MyMoneySplit& stockSplit, const SplitModel* feesModel, const SplitModel* interestModel) const override; 0263 0264 protected: 0265 QString sharesLabelText() const override; 0266 }; 0267 0268 class IntInc : public Activity 0269 { 0270 public: 0271 explicit IntInc(InvestTransactionEditor* editor); 0272 ~IntInc() override; 0273 eMyMoney::Split::InvestmentTransactionType type() const override; 0274 void showWidgets() const override; 0275 virtual void adjustStockSplit(MyMoneySplit&) override {} 0276 0277 fieldRequired_t feesRequired() const override { 0278 return Optional; 0279 } 0280 fieldRequired_t interestRequired() const override { 0281 return Mandatory; 0282 } 0283 fieldRequired_t assetAccountRequired() const override { 0284 return Mandatory; 0285 } 0286 }; 0287 0288 } // namespace Invest 0289 0290 #endif // INVESTACTIVITIES_H 0291