diff --git a/mainwindow.cpp b/mainwindow.cpp index b17776b..ae89e6c 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -55,7 +55,7 @@ MainWindow::MainWindow(QSettings &settings, Zeiterfassung &erfassung, const Zeit connect(&m_erfassung, &Zeiterfassung::getProjekteFinished, this, &MainWindow::getProjekteFinished); - erfassung.doGetProjekte(userInfo.userId); + erfassung.doGetProjekte(userInfo.userId, QDate::currentDate()); ui->comboBoxProjekt->setMaxVisibleItems(10); @@ -75,6 +75,8 @@ MainWindow::MainWindow(QSettings &settings, Zeiterfassung &erfassung, const Zeit this, &MainWindow::contextMenuBuchung); connect(ui->treeViewKontierungen, &QWidget::customContextMenuRequested, this, &MainWindow::contextMenuKontierung); + + erfassung.doGetAuswertung(userInfo.userId, QDate::currentDate()); } MainWindow::~MainWindow() diff --git a/zeiterfassung.cpp b/zeiterfassung.cpp index 877943e..106156d 100644 --- a/zeiterfassung.cpp +++ b/zeiterfassung.cpp @@ -17,7 +17,8 @@ Zeiterfassung::Zeiterfassung(const QString &url, QObject *parent) : m_url(url), m_manager(new QNetworkAccessManager(this)), m_replies { Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, - Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR } + Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, + Q_NULLPTR } { } @@ -325,7 +326,7 @@ bool Zeiterfassung::doDeleteKontierung(int kontierungId) return true; } -bool Zeiterfassung::doGetProjekte(int userId, QDate date) +bool Zeiterfassung::doGetProjekte(int userId, const QDate &date) { if(m_replies.getProjekte) { @@ -345,6 +346,26 @@ bool Zeiterfassung::doGetProjekte(int userId, QDate date) return true; } +bool Zeiterfassung::doGetAuswertung(int userId, const QDate &date) +{ + if(m_replies.getAuswertung) + { + qWarning() << "another getAuswertung already processing!"; + return false; + } + + QNetworkRequest request(QUrl(QStringLiteral("%0json/auswertung/month?persNr=%1&date=%2") + .arg(m_url) + .arg(userId) + .arg(date.toString(QStringLiteral("yyyyMMdd"))))); + request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); + + m_replies.getAuswertung = m_manager->get(request); + connect(m_replies.getAuswertung, &QNetworkReply::finished, this, &Zeiterfassung::getAuswertungRequest0Finished); + + return true; +} + void Zeiterfassung::loginPageRequestFinished() { if(m_replies.loginPage->error() != QNetworkReply::NoError) @@ -815,3 +836,38 @@ void Zeiterfassung::getProjekteRequestFinished() m_replies.getProjekte->deleteLater(); m_replies.getProjekte = Q_NULLPTR; } + +void Zeiterfassung::getAuswertungRequest0Finished() +{ + if(m_replies.getAuswertung->error() != QNetworkReply::NoError) + { + Q_EMIT getAuswertungFinished(false, tr("Request error occured: %0").arg(m_replies.getProjekte->error()), QByteArray()); + m_replies.getAuswertung->deleteLater(); + m_replies.getAuswertung = Q_NULLPTR; + return; + } + + QUrl url(m_url); + url.setPath(QString(m_replies.getAuswertung->readAll())); + + m_replies.getAuswertung->deleteLater(); + + m_replies.getAuswertung = m_manager->get(QNetworkRequest(url)); + connect(m_replies.getAuswertung, &QNetworkReply::finished, + this, &Zeiterfassung::getAuswertungRequest1Finished); +} + +void Zeiterfassung::getAuswertungRequest1Finished() +{ + if(m_replies.getProjekte->error() != QNetworkReply::NoError) + { + Q_EMIT getAuswertungFinished(false, tr("Request error occured: %0").arg(m_replies.getProjekte->error()), QByteArray()); + goto end; + } + + Q_EMIT getAuswertungFinished(true, QString(), m_replies.getProjekte->readAll()); + + end: + m_replies.getProjekte->deleteLater(); + m_replies.getProjekte = Q_NULLPTR; +} diff --git a/zeiterfassung.h b/zeiterfassung.h index 5a668f4..4ce056a 100644 --- a/zeiterfassung.h +++ b/zeiterfassung.h @@ -8,6 +8,7 @@ class QNetworkAccessManager; class QNetworkReply; +class QByteArray; class Zeiterfassung : public QObject { @@ -78,7 +79,8 @@ public Q_SLOTS: const QString &workpackage, const QString &text); bool doDeleteKontierung(int kontierungId); - bool doGetProjekte(int userId, QDate date = QDate::currentDate()); + bool doGetProjekte(int userId, const QDate &date); + bool doGetAuswertung(int userId, const QDate &date); Q_SIGNALS: void urlChanged(const QString &url); @@ -98,6 +100,7 @@ Q_SIGNALS: void deleteKontierungFinished(bool success, const QString &message); void getProjekteFinished(bool success, const QString &message, const QVector &projekte); + void getAuswertungFinished(bool success, const QString &message, const QByteArray &content); private Q_SLOTS: void loginPageRequestFinished(); @@ -115,6 +118,8 @@ private Q_SLOTS: void deleteKontierungRequestFinished(); void getProjekteRequestFinished(); + void getAuswertungRequest0Finished(); + void getAuswertungRequest1Finished(); private: QString m_url; @@ -136,6 +141,7 @@ private: QNetworkReply *deleteKontierung; QNetworkReply *getProjekte; + QNetworkReply *getAuswertung; } m_replies; };