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