File indexing completed on 2024-05-12 05:06:44
0001 /* 0002 SPDX-FileCopyrightText: 2005-2019 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 "mymoneysecurity.h" 0008 #include "mymoneysecurity_p.h" 0009 0010 // ---------------------------------------------------------------------------- 0011 // QT Includes 0012 0013 #include <QString> 0014 #include <QSet> 0015 0016 // ---------------------------------------------------------------------------- 0017 // KDE Includes 0018 0019 #include <KLazyLocalizedString> 0020 #include <KLocalizedString> 0021 0022 // ---------------------------------------------------------------------------- 0023 // Project Includes 0024 0025 #include "mymoneyexception.h" 0026 0027 using namespace eMyMoney; 0028 0029 MyMoneySecurity::MyMoneySecurity() : 0030 MyMoneyObject(*new MyMoneySecurityPrivate) 0031 { 0032 } 0033 0034 MyMoneySecurity::MyMoneySecurity(const QString &id) : 0035 MyMoneyObject(*new MyMoneySecurityPrivate, id) 0036 { 0037 } 0038 0039 MyMoneySecurity::MyMoneySecurity(const QString& id, 0040 const QString& name, 0041 const QString& symbol, 0042 const int smallestCashFraction, 0043 const int smallestAccountFraction, 0044 const int pricePrecision) : 0045 MyMoneyObject(*new MyMoneySecurityPrivate, id), 0046 MyMoneyKeyValueContainer() 0047 { 0048 Q_D(MyMoneySecurity); 0049 d->m_name = name; 0050 d->m_smallestCashFraction = smallestCashFraction; 0051 d->m_pricePrecision = pricePrecision; 0052 d->m_securityType = eMyMoney::Security::Type::Currency; 0053 0054 if (symbol.isEmpty()) 0055 d->m_tradingSymbol = id; 0056 else 0057 d->m_tradingSymbol = symbol; 0058 0059 if (smallestAccountFraction) 0060 d->m_smallestAccountFraction = smallestAccountFraction; 0061 else 0062 d->m_smallestAccountFraction = smallestCashFraction; 0063 } 0064 0065 MyMoneySecurity::MyMoneySecurity(const MyMoneySecurity& other) : 0066 MyMoneyObject(*new MyMoneySecurityPrivate(*other.d_func()), other.id()), 0067 MyMoneyKeyValueContainer(other) 0068 { 0069 } 0070 0071 MyMoneySecurity::MyMoneySecurity(const QString& id, const MyMoneySecurity& other) : 0072 MyMoneyObject(*new MyMoneySecurityPrivate(*other.d_func()), id), 0073 MyMoneyKeyValueContainer(other) 0074 { 0075 } 0076 0077 MyMoneySecurity::~MyMoneySecurity() 0078 { 0079 } 0080 0081 bool MyMoneySecurity::operator == (const MyMoneySecurity& right) const 0082 { 0083 Q_D(const MyMoneySecurity); 0084 auto d2 = static_cast<const MyMoneySecurityPrivate *>(right.d_func()); 0085 // clang-format off 0086 return (d->m_id == d2->m_id) 0087 && (d->m_name == d2->m_name) 0088 && (d->m_tradingSymbol == d2->m_tradingSymbol) 0089 && (d->m_tradingMarket == d2->m_tradingMarket) 0090 && (d->m_roundingMethod == d2->m_roundingMethod) 0091 && (d->m_tradingCurrency == d2->m_tradingCurrency) 0092 && (d->m_securityType == d2->m_securityType) 0093 && (d->m_smallestAccountFraction == d2->m_smallestAccountFraction) 0094 && (d->m_smallestCashFraction == d2->m_smallestCashFraction) 0095 && (d->m_pricePrecision == d2->m_pricePrecision) 0096 && this->MyMoneyKeyValueContainer::operator == (right); 0097 // clang-format on 0098 } 0099 0100 bool MyMoneySecurity::operator < (const MyMoneySecurity& right) const 0101 { 0102 Q_D(const MyMoneySecurity); 0103 auto d2 = static_cast<const MyMoneySecurityPrivate *>(right.d_func()); 0104 if (d->m_securityType == d2->m_securityType) 0105 return QString::localeAwareCompare(d->m_name, d2->m_name) < 0; 0106 return d->m_securityType < d2->m_securityType; 0107 } 0108 0109 QString MyMoneySecurity::name() const 0110 { 0111 Q_D(const MyMoneySecurity); 0112 return d->m_name; 0113 } 0114 0115 void MyMoneySecurity::setName(const QString& str) 0116 { 0117 Q_D(MyMoneySecurity); 0118 d->m_name = str; 0119 } 0120 0121 QString MyMoneySecurity::tradingSymbol() const 0122 { 0123 Q_D(const MyMoneySecurity); 0124 return d->m_tradingSymbol; 0125 } 0126 0127 void MyMoneySecurity::setTradingSymbol(const QString& str) 0128 { 0129 Q_D(MyMoneySecurity); 0130 d->m_tradingSymbol = str; 0131 } 0132 0133 QString MyMoneySecurity::tradingMarket() const 0134 { 0135 Q_D(const MyMoneySecurity); 0136 return d->m_tradingMarket; 0137 } 0138 0139 void MyMoneySecurity::setTradingMarket(const QString& str) 0140 { 0141 Q_D(MyMoneySecurity); 0142 d->m_tradingMarket = str; 0143 } 0144 0145 QString MyMoneySecurity::tradingCurrency() const 0146 { 0147 Q_D(const MyMoneySecurity); 0148 return d->m_tradingCurrency; 0149 } 0150 0151 void MyMoneySecurity::setTradingCurrency(const QString& str) 0152 { 0153 Q_D(MyMoneySecurity); 0154 d->m_tradingCurrency = str; 0155 } 0156 0157 bool MyMoneySecurity::operator != (const MyMoneySecurity& r) const 0158 { 0159 return !(*this == r); 0160 } 0161 0162 eMyMoney::Security::Type MyMoneySecurity::securityType() const 0163 { 0164 Q_D(const MyMoneySecurity); 0165 return d->m_securityType; 0166 } 0167 0168 void MyMoneySecurity::setSecurityType(const eMyMoney::Security::Type s) 0169 { 0170 Q_D(MyMoneySecurity); 0171 d->m_securityType = s; 0172 } 0173 0174 bool MyMoneySecurity::isCurrency() const 0175 { 0176 Q_D(const MyMoneySecurity); 0177 return d->m_securityType == eMyMoney::Security::Type::Currency; 0178 } 0179 0180 AlkValue::RoundingMethod MyMoneySecurity::roundingMethod() const 0181 { 0182 Q_D(const MyMoneySecurity); 0183 return d->m_roundingMethod; 0184 } 0185 0186 void MyMoneySecurity::setRoundingMethod(const AlkValue::RoundingMethod rnd) 0187 { 0188 Q_D(MyMoneySecurity); 0189 d->m_roundingMethod = rnd; 0190 } 0191 0192 int MyMoneySecurity::smallestAccountFraction() const 0193 { 0194 Q_D(const MyMoneySecurity); 0195 return d->m_smallestAccountFraction; 0196 } 0197 0198 void MyMoneySecurity::setSmallestAccountFraction(const int sf) 0199 { 0200 Q_D(MyMoneySecurity); 0201 d->m_smallestAccountFraction = sf; 0202 } 0203 0204 int MyMoneySecurity::smallestCashFraction() const 0205 { 0206 Q_D(const MyMoneySecurity); 0207 return d->m_smallestCashFraction; 0208 } 0209 0210 void MyMoneySecurity::setSmallestCashFraction(const int cf) 0211 { 0212 Q_D(MyMoneySecurity); 0213 d->m_smallestCashFraction = cf; 0214 } 0215 0216 int MyMoneySecurity::pricePrecision() const 0217 { 0218 Q_D(const MyMoneySecurity); 0219 return d->m_pricePrecision; 0220 } 0221 0222 void MyMoneySecurity::setPricePrecision(const int pp) 0223 { 0224 Q_D(MyMoneySecurity); 0225 d->m_pricePrecision = pp; 0226 } 0227 0228 QString MyMoneySecurity::securityTypeToString(const eMyMoney::Security::Type securityType) 0229 { 0230 switch (securityType) { 0231 case eMyMoney::Security::Type::Stock: 0232 return i18nc("Security type", "Stock"); 0233 case eMyMoney::Security::Type::MutualFund: 0234 return i18nc("Security type", "Mutual Fund"); 0235 case eMyMoney::Security::Type::Bond: 0236 return i18nc("Security type", "Bond"); 0237 case eMyMoney::Security::Type::Currency: 0238 return i18nc("Security type", "Currency"); 0239 case eMyMoney::Security::Type::None: 0240 return i18nc("Security type", "None"); 0241 default: 0242 return i18nc("Security type", "Unknown"); 0243 } 0244 } 0245 0246 QString MyMoneySecurity::roundingMethodToString(const AlkValue::RoundingMethod roundingMethod) 0247 { 0248 switch (roundingMethod) { 0249 case AlkValue::RoundNever: 0250 return kli18n("Never").untranslatedText(); 0251 case AlkValue::RoundFloor: 0252 return kli18n("Floor").untranslatedText(); 0253 case AlkValue::RoundCeil: 0254 return kli18n("Ceil").untranslatedText(); 0255 case AlkValue::RoundTruncate: 0256 return kli18n("Truncate").untranslatedText(); 0257 case AlkValue::RoundPromote: 0258 return kli18n("Promote").untranslatedText(); 0259 case AlkValue::RoundHalfDown: 0260 return kli18n("HalfDown").untranslatedText(); 0261 case AlkValue::RoundHalfUp: 0262 return kli18n("HalfUp").untranslatedText(); 0263 case AlkValue::RoundRound: 0264 return kli18n("Round").untranslatedText(); 0265 default: 0266 return kli18n("Unknown").untranslatedText(); 0267 } 0268 }