1 /*
2 * Copyright 2005-2017 Thomas Baumgart <tbaumgart@kde.org>
3 * Copyright 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of
8 * the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 #include "mymoneysecurity.h"
20 #include "mymoneysecurity_p.h"
21
22 // ----------------------------------------------------------------------------
23 // QT Includes
24
25 #include <QString>
26
27 // ----------------------------------------------------------------------------
28 // KDE Includes
29
30 #include <KLocalizedString>
31
32 // ----------------------------------------------------------------------------
33 // Project Includes
34
35 #include "mymoneyexception.h"
36
37 using namespace eMyMoney;
38
MyMoneySecurity()39 MyMoneySecurity::MyMoneySecurity() :
40 MyMoneyObject(*new MyMoneySecurityPrivate)
41 {
42 }
43
MyMoneySecurity(const QString & id)44 MyMoneySecurity::MyMoneySecurity(const QString &id) :
45 MyMoneyObject(*new MyMoneySecurityPrivate, id)
46 {
47 }
48
MyMoneySecurity(const QString & id,const QString & name,const QString & symbol,const int smallestCashFraction,const int smallestAccountFraction,const int pricePrecision)49 MyMoneySecurity::MyMoneySecurity(const QString& id,
50 const QString& name,
51 const QString& symbol,
52 const int smallestCashFraction,
53 const int smallestAccountFraction,
54 const int pricePrecision) :
55 MyMoneyObject(*new MyMoneySecurityPrivate, id),
56 MyMoneyKeyValueContainer()
57 {
58 Q_D(MyMoneySecurity);
59 d->m_name = name;
60 d->m_smallestCashFraction = smallestCashFraction;
61 d->m_pricePrecision = pricePrecision;
62 d->m_securityType = eMyMoney::Security::Type::Currency;
63
64 if (symbol.isEmpty())
65 d->m_tradingSymbol = id;
66 else
67 d->m_tradingSymbol = symbol;
68
69 if (smallestAccountFraction)
70 d->m_smallestAccountFraction = smallestAccountFraction;
71 else
72 d->m_smallestAccountFraction = smallestCashFraction;
73 }
74
MyMoneySecurity(const MyMoneySecurity & other)75 MyMoneySecurity::MyMoneySecurity(const MyMoneySecurity& other) :
76 MyMoneyObject(*new MyMoneySecurityPrivate(*other.d_func()), other.id()),
77 MyMoneyKeyValueContainer(other)
78 {
79 }
80
MyMoneySecurity(const QString & id,const MyMoneySecurity & other)81 MyMoneySecurity::MyMoneySecurity(const QString& id, const MyMoneySecurity& other) :
82 MyMoneyObject(*new MyMoneySecurityPrivate(*other.d_func()), id),
83 MyMoneyKeyValueContainer(other)
84 {
85 }
86
~MyMoneySecurity()87 MyMoneySecurity::~MyMoneySecurity()
88 {
89 }
90
operator ==(const MyMoneySecurity & right) const91 bool MyMoneySecurity::operator == (const MyMoneySecurity& right) const
92 {
93 Q_D(const MyMoneySecurity);
94 auto d2 = static_cast<const MyMoneySecurityPrivate *>(right.d_func());
95 return (d->m_id == d2->m_id)
96 && (d->m_name == d2->m_name)
97 && (d->m_tradingSymbol == d2->m_tradingSymbol)
98 && (d->m_tradingMarket == d2->m_tradingMarket)
99 && (d->m_roundingMethod == d2->m_roundingMethod)
100 && (d->m_tradingSymbol == d2->m_tradingSymbol)
101 && (d->m_tradingCurrency == d2->m_tradingCurrency)
102 && (d->m_securityType == d2->m_securityType)
103 && (d->m_smallestAccountFraction == d2->m_smallestAccountFraction)
104 && (d->m_smallestCashFraction == d2->m_smallestCashFraction)
105 && (d->m_pricePrecision == d2->m_pricePrecision)
106 && this->MyMoneyKeyValueContainer::operator == (right);
107 }
108
operator <(const MyMoneySecurity & right) const109 bool MyMoneySecurity::operator < (const MyMoneySecurity& right) const
110 {
111 Q_D(const MyMoneySecurity);
112 auto d2 = static_cast<const MyMoneySecurityPrivate *>(right.d_func());
113 if (d->m_securityType == d2->m_securityType)
114 return d->m_name < d2->m_name;
115 return d->m_securityType < d2->m_securityType;
116 }
117
name() const118 QString MyMoneySecurity::name() const
119 {
120 Q_D(const MyMoneySecurity);
121 return d->m_name;
122 }
123
setName(const QString & str)124 void MyMoneySecurity::setName(const QString& str)
125 {
126 Q_D(MyMoneySecurity);
127 d->m_name = str;
128 }
129
tradingSymbol() const130 QString MyMoneySecurity::tradingSymbol() const
131 {
132 Q_D(const MyMoneySecurity);
133 return d->m_tradingSymbol;
134 }
135
setTradingSymbol(const QString & str)136 void MyMoneySecurity::setTradingSymbol(const QString& str)
137 {
138 Q_D(MyMoneySecurity);
139 d->m_tradingSymbol = str;
140 }
141
tradingMarket() const142 QString MyMoneySecurity::tradingMarket() const
143 {
144 Q_D(const MyMoneySecurity);
145 return d->m_tradingMarket;
146 }
147
setTradingMarket(const QString & str)148 void MyMoneySecurity::setTradingMarket(const QString& str)
149 {
150 Q_D(MyMoneySecurity);
151 d->m_tradingMarket = str;
152 }
153
tradingCurrency() const154 QString MyMoneySecurity::tradingCurrency() const
155 {
156 Q_D(const MyMoneySecurity);
157 return d->m_tradingCurrency;
158 }
159
setTradingCurrency(const QString & str)160 void MyMoneySecurity::setTradingCurrency(const QString& str)
161 {
162 Q_D(MyMoneySecurity);
163 d->m_tradingCurrency = str;
164 }
165
operator !=(const MyMoneySecurity & r) const166 bool MyMoneySecurity::operator != (const MyMoneySecurity& r) const
167 {
168 return !(*this == r);
169 }
170
securityType() const171 eMyMoney::Security::Type MyMoneySecurity::securityType() const
172 {
173 Q_D(const MyMoneySecurity);
174 return d->m_securityType;
175 }
176
setSecurityType(const eMyMoney::Security::Type s)177 void MyMoneySecurity::setSecurityType(const eMyMoney::Security::Type s)
178 {
179 Q_D(MyMoneySecurity);
180 d->m_securityType = s;
181 }
182
isCurrency() const183 bool MyMoneySecurity::isCurrency() const
184 {
185 Q_D(const MyMoneySecurity);
186 return d->m_securityType == eMyMoney::Security::Type::Currency;
187 }
188
roundingMethod() const189 AlkValue::RoundingMethod MyMoneySecurity::roundingMethod() const
190 {
191 Q_D(const MyMoneySecurity);
192 return d->m_roundingMethod;
193 }
194
setRoundingMethod(const AlkValue::RoundingMethod rnd)195 void MyMoneySecurity::setRoundingMethod(const AlkValue::RoundingMethod rnd)
196 {
197 Q_D(MyMoneySecurity);
198 d->m_roundingMethod = rnd;
199 }
200
smallestAccountFraction() const201 int MyMoneySecurity::smallestAccountFraction() const
202 {
203 Q_D(const MyMoneySecurity);
204 return d->m_smallestAccountFraction;
205 }
206
setSmallestAccountFraction(const int sf)207 void MyMoneySecurity::setSmallestAccountFraction(const int sf)
208 {
209 Q_D(MyMoneySecurity);
210 d->m_smallestAccountFraction = sf;
211 }
212
smallestCashFraction() const213 int MyMoneySecurity::smallestCashFraction() const
214 {
215 Q_D(const MyMoneySecurity);
216 return d->m_smallestCashFraction;
217 }
218
setSmallestCashFraction(const int cf)219 void MyMoneySecurity::setSmallestCashFraction(const int cf)
220 {
221 Q_D(MyMoneySecurity);
222 d->m_smallestCashFraction = cf;
223 }
224
pricePrecision() const225 int MyMoneySecurity::pricePrecision() const
226 {
227 Q_D(const MyMoneySecurity);
228 return d->m_pricePrecision;
229 }
230
setPricePrecision(const int pp)231 void MyMoneySecurity::setPricePrecision(const int pp)
232 {
233 Q_D(MyMoneySecurity);
234 d->m_pricePrecision = pp;
235 }
236
hasReferenceTo(const QString & id) const237 bool MyMoneySecurity::hasReferenceTo(const QString& id) const
238 {
239 Q_D(const MyMoneySecurity);
240 return (id == d->m_tradingCurrency);
241 }
242
securityTypeToString(const eMyMoney::Security::Type securityType)243 QString MyMoneySecurity::securityTypeToString(const eMyMoney::Security::Type securityType)
244 {
245 switch (securityType) {
246 case eMyMoney::Security::Type::Stock:
247 return i18nc("Security type", "Stock");
248 case eMyMoney::Security::Type::MutualFund:
249 return i18nc("Security type", "Mutual Fund");
250 case eMyMoney::Security::Type::Bond:
251 return i18nc("Security type", "Bond");
252 case eMyMoney::Security::Type::Currency:
253 return i18nc("Security type", "Currency");
254 case eMyMoney::Security::Type::None:
255 return i18nc("Security type", "None");
256 default:
257 return i18nc("Security type", "Unknown");
258 }
259 }
260
roundingMethodToString(const AlkValue::RoundingMethod roundingMethod)261 QString MyMoneySecurity::roundingMethodToString(const AlkValue::RoundingMethod roundingMethod)
262 {
263 switch (roundingMethod) {
264 case AlkValue::RoundNever:
265 return I18N_NOOP("Never");
266 case AlkValue::RoundFloor:
267 return I18N_NOOP("Floor");
268 case AlkValue::RoundCeil:
269 return I18N_NOOP("Ceil");
270 case AlkValue::RoundTruncate:
271 return I18N_NOOP("Truncate");
272 case AlkValue::RoundPromote:
273 return I18N_NOOP("Promote");
274 case AlkValue::RoundHalfDown:
275 return I18N_NOOP("HalfDown");
276 case AlkValue::RoundHalfUp:
277 return I18N_NOOP("HalfUp");
278 case AlkValue::RoundRound:
279 return I18N_NOOP("Round");
280 default:
281 return I18N_NOOP("Unknown");
282 }
283 }
284