File indexing completed on 2024-05-19 05:07:26

0001 /*
0002     SPDX-FileCopyrightText: 2013-2015 Christian Dávid <christian-david@web.de>
0003     SPDX-FileCopyrightText: 2019 Thomas Baumgart <tbaumgart@kde.org>
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include <QSet>
0008 
0009 #include "onlinejob.h"
0010 #include "onlinejob_p.h"
0011 
0012 #include "mymoneyfile.h"
0013 #include "mymoneyaccount.h"
0014 
0015 #include "tasks/onlinetask.h"
0016 #include "onlinejobadministration.h"
0017 
0018 onlineJob::onlineJob()
0019     : MyMoneyObject(*new onlineJobPrivate(this))
0020     , m_task(nullptr)
0021 {
0022 }
0023 
0024 onlineJob::onlineJob(const QString& id)
0025     : MyMoneyObject(*new onlineJobPrivate(this), id)
0026     , m_task(nullptr)
0027 {
0028 }
0029 
0030 onlineJob::onlineJob(onlineTask* onlinetask, const QString& id)
0031     : MyMoneyObject(*new onlineJobPrivate(this), id)
0032     , m_task(onlinetask)
0033 {
0034 }
0035 
0036 onlineJob::onlineJob(onlineTask* onlinetask)
0037     : MyMoneyObject(*new onlineJobPrivate(this), QString())
0038     , m_task(onlinetask)
0039 {
0040 }
0041 
0042 onlineJob::onlineJob(onlineJob const& other)
0043     : MyMoneyObject(*new onlineJobPrivate(this, *other.d_func()), other.id())
0044     , m_task(nullptr)
0045 {
0046     copyPointerFromOtherJob(other);
0047 }
0048 
0049 onlineJob::onlineJob(const QString& id, const onlineJob& other)
0050     : MyMoneyObject(*new onlineJobPrivate(this, *other.d_func()), id)
0051     , m_task(nullptr)
0052 {
0053     Q_D(onlineJob);
0054     d->m_jobBankAnswerState = eMyMoney::OnlineJob::sendingState::noBankAnswer;
0055     d->m_locked = false;
0056     d->m_jobSend = QDateTime();
0057     d->m_jobBankAnswerDate = QDateTime();
0058     d->m_messageList.clear();
0059 
0060     copyPointerFromOtherJob(other);
0061 }
0062 
0063 void onlineJob::copyPointerFromOtherJob(const onlineJob &other)
0064 {
0065     if (!other.isNull())
0066         m_task = other.constTask()->clone();
0067 }
0068 
0069 void onlineJob::reset()
0070 {
0071     Q_D(onlineJob);
0072     clearId();
0073     d->m_jobSend = QDateTime();
0074     d->m_jobBankAnswerDate = QDateTime();
0075     d->m_jobBankAnswerState = eMyMoney::OnlineJob::sendingState::noBankAnswer;
0076     d->m_locked = false;
0077 }
0078 
0079 onlineJob::~onlineJob()
0080 {
0081     delete m_task;
0082 }
0083 
0084 void onlineJob::setTask(onlineTask *_task)
0085 {
0086     Q_D(onlineJob);
0087     m_task = _task;
0088     d->clearReferences();
0089     if (m_task) {
0090         d->m_referencedObjects = m_task->referencedObjects();
0091     }
0092 }
0093 
0094 onlineTask* onlineJob::task()
0095 {
0096     if (m_task == nullptr)
0097         throw EMPTYTASKEXCEPTION;
0098     return m_task;
0099 }
0100 
0101 const onlineTask* onlineJob::task() const
0102 {
0103     if (m_task == nullptr)
0104         throw EMPTYTASKEXCEPTION;
0105     return m_task;
0106 }
0107 
0108 const onlineTask* onlineJob::constTask() const
0109 {
0110     return task();
0111 }
0112 
0113 
0114 QString onlineJob::taskIid() const
0115 {
0116     try {
0117         return task()->taskName();
0118     } catch (const emptyTask&) {
0119     }
0120     return QString();
0121 }
0122 
0123 QString onlineJob::purpose() const
0124 {
0125     try {
0126         return task()->purpose();
0127     } catch (const emptyTask&) {
0128     }
0129     return QString();
0130 }
0131 
0132 QString onlineJob::responsibleAccount() const
0133 {
0134     try {
0135         return task()->responsibleAccount();
0136     } catch (const emptyTask&) {
0137     }
0138     return QString();
0139 }
0140 
0141 MyMoneyAccount onlineJob::responsibleMyMoneyAccount() const
0142 {
0143     QString accountId = responsibleAccount();
0144     if (!accountId.isEmpty())
0145         return MyMoneyFile::instance()->account(accountId);
0146 
0147     return MyMoneyAccount();
0148 }
0149 
0150 bool onlineJob::setLock(bool enable)
0151 {
0152     Q_D(onlineJob);
0153     d->m_locked = enable;
0154     return true;
0155 }
0156 
0157 bool onlineJob::isLocked() const
0158 {
0159     Q_D(const onlineJob);
0160     return d->m_locked;
0161 }
0162 
0163 bool onlineJob::isEditable() const
0164 {
0165     Q_D(const onlineJob);
0166     return (!isLocked() && sendDate().isNull() && (d->m_jobBankAnswerState == eMyMoney::OnlineJob::sendingState::noBankAnswer || d->m_jobBankAnswerState == eMyMoney::OnlineJob::sendingState::sendingError));
0167 }
0168 
0169 bool onlineJob::isNull() const
0170 {
0171     return (m_task == nullptr);
0172 }
0173 
0174 void onlineJob::setJobSend(const QDateTime &dateTime)
0175 {
0176     Q_D(onlineJob);
0177     d->m_jobSend = dateTime;
0178 }
0179 
0180 void onlineJob::setJobSend()
0181 {
0182     setJobSend(QDateTime::currentDateTime());
0183 }
0184 
0185 void onlineJob::setBankAnswer(const eMyMoney::OnlineJob::sendingState state, const QDateTime &dateTime)
0186 {
0187     Q_D(onlineJob);
0188     d->m_jobBankAnswerState = state;
0189     d->m_jobBankAnswerDate = dateTime;
0190 }
0191 
0192 void onlineJob::setBankAnswer(const eMyMoney::OnlineJob::sendingState state)
0193 {
0194     setBankAnswer(state, QDateTime::currentDateTime());
0195 }
0196 
0197 QDateTime onlineJob::bankAnswerDate() const
0198 {
0199     Q_D(const onlineJob);
0200     return d->m_jobBankAnswerDate;
0201 }
0202 
0203 eMyMoney::OnlineJob::sendingState onlineJob::bankAnswerState() const
0204 {
0205     Q_D(const onlineJob);
0206     return d->m_jobBankAnswerState;
0207 }
0208 
0209 void onlineJob::addJobMessage(const onlineJobMessage& message)
0210 {
0211     Q_D(onlineJob);
0212     d->m_messageList.append(message);
0213 }
0214 
0215 void onlineJob::addJobMessage(const eMyMoney::OnlineJob::MessageType& type, const QString& sender, const QString& message, const QString& errorCode, const QDateTime& timestamp)
0216 {
0217     Q_D(onlineJob);
0218     onlineJobMessage logMessage(type, sender, message, timestamp);
0219     logMessage.setSenderErrorCode(errorCode);
0220     d->m_messageList.append(logMessage);
0221 }
0222 
0223 void onlineJob::addJobMessage(const eMyMoney::OnlineJob::MessageType& type, const QString& sender, const QString& message, const QString& errorCode)
0224 {
0225     addJobMessage(type, sender, message, errorCode, QDateTime::currentDateTime());
0226 }
0227 
0228 void onlineJob::addJobMessage(const eMyMoney::OnlineJob::MessageType& type, const QString& sender, const QString& message)
0229 {
0230     addJobMessage(type, sender, message, QString(), QDateTime::currentDateTime());
0231 
0232 }
0233 
0234 QList<onlineJobMessage> onlineJob::jobMessageList() const
0235 {
0236     Q_D(const onlineJob);
0237     return d->m_messageList;
0238 }
0239 
0240 void onlineJob::clearJobMessageList()
0241 {
0242     Q_D(onlineJob);
0243     d->m_messageList.clear();
0244 }
0245 
0246 bool onlineJob::isValid() const
0247 {
0248     if (m_task != nullptr)
0249         return m_task->isValid();
0250     return false;
0251 }
0252 
0253 QDateTime onlineJob::sendDate() const
0254 {
0255     Q_D(const onlineJob);
0256     return d->m_jobSend;
0257 }