1 /*
2  * Copyright 2013-2015  Christian Dávid <christian-david@web.de>
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of
7  * the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #include "onlinejob.h"
19 #include "onlinejob_p.h"
20 
21 #include "mymoneyfile.h"
22 #include "mymoneyaccount.h"
23 
24 #include "tasks/onlinetask.h"
25 #include "onlinejobadministration.h"
26 
onlineJob()27 onlineJob::onlineJob() :
28   MyMoneyObject(*new onlineJobPrivate),
29   m_task(0)
30 {
31   Q_D(onlineJob);
32   d->m_jobSend = QDateTime();
33   d->m_jobBankAnswerDate = QDateTime();
34   d->m_jobBankAnswerState = eMyMoney::OnlineJob::sendingState::noBankAnswer;
35   d->m_messageList = QList<onlineJobMessage>();
36   d->m_locked = false;
37 }
38 
onlineJob(const QString & id)39 onlineJob::onlineJob(const QString &id) :
40   MyMoneyObject(*new onlineJobPrivate, id),
41   m_task(nullptr)
42 {
43 }
44 
onlineJob(onlineTask * onlinetask,const QString & id)45 onlineJob::onlineJob(onlineTask* onlinetask, const QString &id) :
46   MyMoneyObject(*new onlineJobPrivate, id),
47   m_task(onlinetask)
48 {
49   Q_D(onlineJob);
50   d->m_jobSend = QDateTime();
51   d->m_jobBankAnswerDate = QDateTime();
52   d->m_jobBankAnswerState = eMyMoney::OnlineJob::sendingState::noBankAnswer;
53   d->m_messageList = QList<onlineJobMessage>();
54   d->m_locked = false;
55 }
56 
onlineJob(onlineTask * onlinetask)57 onlineJob::onlineJob(onlineTask* onlinetask) :
58     MyMoneyObject(*new onlineJobPrivate, QString()),
59     m_task(onlinetask)
60 {
61   Q_D(onlineJob);
62   d->m_jobSend = QDateTime();
63   d->m_jobBankAnswerDate = QDateTime();
64   d->m_jobBankAnswerState = eMyMoney::OnlineJob::sendingState::noBankAnswer;
65   d->m_messageList = QList<onlineJobMessage>();
66   d->m_locked = false;
67 }
68 
onlineJob(onlineJob const & other)69 onlineJob::onlineJob(onlineJob const& other) :
70   MyMoneyObject(*new onlineJobPrivate(*other.d_func()), other.id()),
71   m_task(0)
72 {
73   copyPointerFromOtherJob(other);
74 }
75 
onlineJob(const QString & id,const onlineJob & other)76 onlineJob::onlineJob(const QString &id, const onlineJob& other) :
77   MyMoneyObject(*new onlineJobPrivate(*other.d_func()), id),
78   m_task()
79 {
80   Q_D(onlineJob);
81   d->m_jobSend = QDateTime();
82   d->m_jobBankAnswerDate = QDateTime();
83   d->m_jobBankAnswerState = eMyMoney::OnlineJob::sendingState::noBankAnswer;
84   d->m_messageList = QList<onlineJobMessage>();
85   d->m_locked = false;
86   copyPointerFromOtherJob(other);
87 }
88 
copyPointerFromOtherJob(const onlineJob & other)89 void onlineJob::copyPointerFromOtherJob(const onlineJob &other)
90 {
91   if (!other.isNull())
92     m_task = other.constTask()->clone();
93 }
94 
reset()95 void onlineJob::reset()
96 {
97   Q_D(onlineJob);
98   clearId();
99   d->m_jobSend = QDateTime();
100   d->m_jobBankAnswerDate = QDateTime();
101   d->m_jobBankAnswerState = eMyMoney::OnlineJob::sendingState::noBankAnswer;
102   d->m_locked = false;
103 }
104 
~onlineJob()105 onlineJob::~onlineJob()
106 {
107   delete m_task;
108 }
109 
setTask(onlineTask * _task)110 void onlineJob::setTask(onlineTask *_task)
111 {
112   m_task = _task;
113 }
114 
task()115 onlineTask* onlineJob::task()
116 {
117   if (m_task == 0)
118     throw EMPTYTASKEXCEPTION;
119   return m_task;
120 }
121 
task() const122 const onlineTask* onlineJob::task() const
123 {
124   if (m_task == 0)
125     throw EMPTYTASKEXCEPTION;
126   return m_task;
127 }
128 
constTask() const129 const onlineTask* onlineJob::constTask() const
130 {
131   return task();
132 }
133 
134 
taskIid() const135 QString onlineJob::taskIid() const
136 {
137   try {
138     return task()->taskName();
139   } catch (const emptyTask&) {
140   }
141   return QString();
142 }
143 
responsibleAccount() const144 QString onlineJob::responsibleAccount() const
145 {
146   try {
147     return task()->responsibleAccount();
148   } catch (const emptyTask&) {
149   }
150   return QString();
151 }
152 
responsibleMyMoneyAccount() const153 MyMoneyAccount onlineJob::responsibleMyMoneyAccount() const
154 {
155   QString accountId = responsibleAccount();
156   if (!accountId.isEmpty())
157     return MyMoneyFile::instance()->account(accountId);
158 
159   return MyMoneyAccount();
160 }
161 
setLock(bool enable)162 bool onlineJob::setLock(bool enable)
163 {
164   Q_D(onlineJob);
165   d->m_locked = enable;
166   return true;
167 }
168 
isLocked() const169 bool onlineJob::isLocked() const
170 {
171   Q_D(const onlineJob);
172   return d->m_locked;
173 }
174 
isEditable() const175 bool onlineJob::isEditable() const
176 {
177   Q_D(const onlineJob);
178   return (!isLocked() && sendDate().isNull() && (d->m_jobBankAnswerState == eMyMoney::OnlineJob::sendingState::noBankAnswer || d->m_jobBankAnswerState == eMyMoney::OnlineJob::sendingState::sendingError));
179 }
180 
isNull() const181 bool onlineJob::isNull() const
182 {
183   return (m_task == 0);
184 }
185 
setJobSend(const QDateTime & dateTime)186 void onlineJob::setJobSend(const QDateTime &dateTime)
187 {
188   Q_D(onlineJob);
189   d->m_jobSend = dateTime;
190 }
191 
setJobSend()192 void onlineJob::setJobSend()
193 {
194   setJobSend(QDateTime::currentDateTime());
195 }
196 
setBankAnswer(const eMyMoney::OnlineJob::sendingState state,const QDateTime & dateTime)197 void onlineJob::setBankAnswer(const eMyMoney::OnlineJob::sendingState state, const QDateTime &dateTime)
198 {
199   Q_D(onlineJob);
200   d->m_jobBankAnswerState = state;
201   d->m_jobBankAnswerDate = dateTime;
202 }
203 
setBankAnswer(const eMyMoney::OnlineJob::sendingState state)204 void onlineJob::setBankAnswer(const eMyMoney::OnlineJob::sendingState state)
205 {
206   setBankAnswer(state, QDateTime::currentDateTime());
207 }
208 
bankAnswerDate() const209 QDateTime onlineJob::bankAnswerDate() const
210 {
211   Q_D(const onlineJob);
212   return d->m_jobBankAnswerDate;
213 }
214 
bankAnswerState() const215 eMyMoney::OnlineJob::sendingState onlineJob::bankAnswerState() const
216 {
217   Q_D(const onlineJob);
218   return d->m_jobBankAnswerState;
219 }
220 
addJobMessage(const onlineJobMessage & message)221 void onlineJob::addJobMessage(const onlineJobMessage& message)
222 {
223   Q_D(onlineJob);
224   d->m_messageList.append(message);
225 }
226 
addJobMessage(const eMyMoney::OnlineJob::MessageType & type,const QString & sender,const QString & message,const QString & errorCode,const QDateTime & timestamp)227 void onlineJob::addJobMessage(const eMyMoney::OnlineJob::MessageType& type, const QString& sender, const QString& message, const QString& errorCode, const QDateTime& timestamp)
228 {
229   Q_D(onlineJob);
230   onlineJobMessage logMessage(type, sender, message, timestamp);
231   logMessage.setSenderErrorCode(errorCode);
232   d->m_messageList.append(logMessage);
233 }
234 
addJobMessage(const eMyMoney::OnlineJob::MessageType & type,const QString & sender,const QString & message,const QString & errorCode)235 void onlineJob::addJobMessage(const eMyMoney::OnlineJob::MessageType& type, const QString& sender, const QString& message, const QString& errorCode)
236 {
237   addJobMessage(type, sender, message, errorCode, QDateTime::currentDateTime());
238 }
239 
addJobMessage(const eMyMoney::OnlineJob::MessageType & type,const QString & sender,const QString & message)240 void onlineJob::addJobMessage(const eMyMoney::OnlineJob::MessageType& type, const QString& sender, const QString& message)
241 {
242   addJobMessage(type, sender, message, QString(), QDateTime::currentDateTime());
243 
244 }
245 
jobMessageList() const246 QList<onlineJobMessage> onlineJob::jobMessageList() const
247 {
248   Q_D(const onlineJob);
249   return d->m_messageList;
250 }
251 
clearJobMessageList()252 void onlineJob::clearJobMessageList()
253 {
254   Q_D(onlineJob);
255   d->m_messageList = QList<onlineJobMessage>();
256 }
257 
isValid() const258 bool onlineJob::isValid() const
259 {
260   if (m_task != 0)
261     return m_task->isValid();
262   return false;
263 }
264 
sendDate() const265 QDateTime onlineJob::sendDate() const
266 {
267   Q_D(const onlineJob);
268   return d->m_jobSend;
269 }
270 
hasReferenceTo(const QString & id) const271 bool onlineJob::hasReferenceTo(const QString& id) const
272 {
273   if (m_task != 0)
274     return m_task->hasReferenceTo(id);
275   return false;
276 }
277