Added second request for user data to get more data #19

This commit is contained in:
0xFEEDC0DE64
2017-12-20 19:28:18 +01:00
parent 25e81aa0bb
commit 4e48d3c2f2
3 changed files with 146 additions and 65 deletions

View File

@@ -4,14 +4,21 @@
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonObject> #include <QJsonObject>
#include <QJsonValue> #include <QJsonValue>
#include <QJsonArray>
#include "zeiterfassungapi.h" #include "zeiterfassungapi.h"
GetUserInfoReply::GetUserInfoReply(std::unique_ptr<QNetworkReply> &&reply, ZeiterfassungApi *zeiterfassung) : GetUserInfoReply::GetUserInfoReply(std::unique_ptr<QNetworkReply> &&reply0, std::unique_ptr<QNetworkReply> &&reply1,
ZeiterfassungApi *zeiterfassung) :
ZeiterfassungReply(zeiterfassung), ZeiterfassungReply(zeiterfassung),
m_reply(std::move(reply)) m_reply0(std::move(reply0)),
m_reply1(std::move(reply1))
{ {
connect(m_reply.get(), &QNetworkReply::finished, this, &GetUserInfoReply::requestFinished); Q_ASSERT(m_reply0 != Q_NULLPTR);
Q_ASSERT(m_reply1 != Q_NULLPTR);
connect(m_reply0.get(), &QNetworkReply::finished, this, &GetUserInfoReply::request0Finished);
connect(m_reply1.get(), &QNetworkReply::finished, this, &GetUserInfoReply::request1Finished);
} }
const GetUserInfoReply::UserInfo &GetUserInfoReply::userInfo() const const GetUserInfoReply::UserInfo &GetUserInfoReply::userInfo() const
@@ -19,29 +26,32 @@ const GetUserInfoReply::UserInfo &GetUserInfoReply::userInfo() const
return m_userInfo; return m_userInfo;
} }
void GetUserInfoReply::requestFinished() void GetUserInfoReply::request0Finished()
{ {
if(m_reply->error() != QNetworkReply::NoError) if(m_reply0->error() != QNetworkReply::NoError)
{ {
setSuccess(false); setSuccess(false);
setMessage(tr("Request error occured: %0").arg(m_reply->error())); setMessage(tr("Request 0 error occured: %0").arg(m_reply0->error()));
m_reply1 = Q_NULLPTR;
goto end; goto end;
} }
{ {
QJsonParseError error; QJsonParseError error;
auto document = QJsonDocument::fromJson(m_reply->readAll(), &error); auto document = QJsonDocument::fromJson(m_reply0->readAll(), &error);
if(error.error != QJsonParseError::NoError) if(error.error != QJsonParseError::NoError)
{ {
setSuccess(false); setSuccess(false);
setMessage(tr("Parsing JSON failed: %0").arg(error.errorString())); setMessage(tr("Parsing JSON 0 failed: %0").arg(error.errorString()));
m_reply1 = Q_NULLPTR;
goto end; goto end;
} }
if(!document.isObject()) if(!document.isObject())
{ {
setSuccess(false); setSuccess(false);
setMessage(tr("JSON document is not an object!")); setMessage(tr("JSON document 0 is not an object!"));
m_reply1 = Q_NULLPTR;
goto end; goto end;
} }
@@ -50,7 +60,8 @@ void GetUserInfoReply::requestFinished()
if(!rootObj.contains(QStringLiteral("evoAppsUser"))) if(!rootObj.contains(QStringLiteral("evoAppsUser")))
{ {
setSuccess(false); setSuccess(false);
setMessage(tr("JSON does not contain evoAppsUser!")); setMessage(tr("JSON 0 does not contain evoAppsUser!"));
m_reply1 = Q_NULLPTR;
goto end; goto end;
} }
@@ -60,23 +71,100 @@ void GetUserInfoReply::requestFinished()
{ {
setSuccess(false); setSuccess(false);
setMessage(tr("evoAppsUser is not an object!")); setMessage(tr("evoAppsUser is not an object!"));
m_reply1 = Q_NULLPTR;
goto end; goto end;
} }
auto evoAppsUserObj = evoAppsUser.toObject(); auto evoAppsUserObj = evoAppsUser.toObject();
setSuccess(true); if(!m_reply1)
m_userInfo = { setSuccess(true);
evoAppsUserObj.value(QStringLiteral("persNr")).toInt(),
evoAppsUserObj.value(QStringLiteral("email")).toString(), m_userInfo.userId = evoAppsUserObj.value(QStringLiteral("persNr")).toInt();
evoAppsUserObj.value(QStringLiteral("longUsername")).toString(), m_userInfo.email = evoAppsUserObj.value(QStringLiteral("email")).toString();
evoAppsUserObj.value(QStringLiteral("text")).toString(), m_userInfo.longUsername = evoAppsUserObj.value(QStringLiteral("longUsername")).toString();
evoAppsUserObj.value(QStringLiteral("username")).toString() m_userInfo.text = evoAppsUserObj.value(QStringLiteral("text")).toString();
}; m_userInfo.username = evoAppsUserObj.value(QStringLiteral("username")).toString();
} }
end: end:
m_reply = Q_NULLPTR; m_reply0 = Q_NULLPTR;
Q_EMIT finished(); if(!m_reply1)
Q_EMIT finished();
}
void GetUserInfoReply::request1Finished()
{
if(m_reply1->error() != QNetworkReply::NoError)
{
setSuccess(false);
setMessage(tr("Request 1 error occured: %0").arg(m_reply0->error()));
m_reply0 = Q_NULLPTR;
goto end;
}
{
QJsonParseError error;
auto document = QJsonDocument::fromJson(m_reply1->readAll(), &error);
if(error.error != QJsonParseError::NoError)
{
setSuccess(false);
setMessage(tr("Parsing JSON 1 failed: %0").arg(error.errorString()));
m_reply0 = Q_NULLPTR;
goto end;
}
if(!document.isArray())
{
setSuccess(false);
setMessage(tr("JSON document 1 is not an array!"));
m_reply0 = Q_NULLPTR;
goto end;
}
auto arr = document.array();
if(arr.isEmpty())
{
setSuccess(false);
setMessage(tr("JSON array 1 is empty!"));
m_reply0 = Q_NULLPTR;
goto end;
}
auto first = arr.first();
if(!first.isObject())
{
setSuccess(false);
setMessage(tr("JSON array value is not an object!"));
m_reply0 = Q_NULLPTR;
goto end;
}
auto obj = first.toObject();
if(!m_reply0)
setSuccess(true);
m_userInfo.gemeinde = obj.value(QStringLiteral("gemeinde")).toString();
m_userInfo.ort = obj.value(QStringLiteral("ort")).toString();
m_userInfo.angFrom = QDate::fromString(QString::number(obj.value(QStringLiteral("angFrom")).toInt()), QStringLiteral("yyyyMMdd"));
m_userInfo.angTill = QDate::fromString(QString::number(obj.value(QStringLiteral("angTill")).toInt()), QStringLiteral("yyyyMMdd"));
m_userInfo.gebOrt = obj.value(QStringLiteral("gebOrt")).toString();
m_userInfo.plz = obj.value(QStringLiteral("plz")).toString();
m_userInfo.religion = obj.value(QStringLiteral("religion")).toString();
m_userInfo.bereich = obj.value(QStringLiteral("bereich")).toString();
m_userInfo.verwendgr = obj.value(QStringLiteral("verwendgr")).toString();
m_userInfo.taetig = obj.value(QStringLiteral("taetig")).toString();
m_userInfo.arbverh = obj.value(QStringLiteral("arbverh")).toString();
m_userInfo.betriebsnr = obj.value(QStringLiteral("betriebsnr")).toString();
}
end:
m_reply1 = Q_NULLPTR;
if(!m_reply0)
Q_EMIT finished();
} }

View File

@@ -15,7 +15,8 @@ class ZEITERFASSUNGLIBSHARED_EXPORT GetUserInfoReply : public ZeiterfassungReply
Q_OBJECT Q_OBJECT
public: public:
GetUserInfoReply(std::unique_ptr<QNetworkReply> &&reply, ZeiterfassungApi *zeiterfassung); GetUserInfoReply(std::unique_ptr<QNetworkReply> &&reply0, std::unique_ptr<QNetworkReply> &&reply1,
ZeiterfassungApi *zeiterfassung);
struct UserInfo struct UserInfo
{ {
@@ -24,15 +25,29 @@ public:
QString longUsername; QString longUsername;
QString text; QString text;
QString username; QString username;
QString gemeinde;
QString ort;
QDate angFrom;
QDate angTill;
QString gebOrt;
QString plz;
QString religion;
QString bereich;
QString verwendgr;
QString taetig;
QString arbverh;
QString betriebsnr;
}; };
const UserInfo &userInfo() const; const UserInfo &userInfo() const;
private Q_SLOTS: private Q_SLOTS:
void requestFinished(); void request0Finished();
void request1Finished();
private: private:
std::unique_ptr<QNetworkReply> m_reply; std::unique_ptr<QNetworkReply> m_reply0;
std::unique_ptr<QNetworkReply> m_reply1;
UserInfo m_userInfo; UserInfo m_userInfo;
}; };

View File

@@ -53,9 +53,7 @@ std::unique_ptr<LoginPageReply> ZeiterfassungApi::doLoginPage()
{ {
QNetworkRequest request(QUrl(m_url % "pages/login.jsp")); QNetworkRequest request(QUrl(m_url % "pages/login.jsp"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request)); return std::make_unique<LoginPageReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
return std::make_unique<LoginPageReply>(std::move(reply), this);
} }
std::unique_ptr<LoginReply> ZeiterfassungApi::doLogin(const QString &username, const QString &password) std::unique_ptr<LoginReply> ZeiterfassungApi::doLogin(const QString &username, const QString &password)
@@ -66,19 +64,19 @@ std::unique_ptr<LoginReply> ZeiterfassungApi::doLogin(const QString &username, c
auto data = QStringLiteral("j_username=%0&j_password=%1&login=Anmelden").arg(username).arg(password).toUtf8(); auto data = QStringLiteral("j_username=%0&j_password=%1&login=Anmelden").arg(username).arg(password).toUtf8();
auto reply = std::unique_ptr<QNetworkReply>(m_manager->post(request, data)); return std::make_unique<LoginReply>(std::unique_ptr<QNetworkReply>(m_manager->post(request, data)), this);
return std::make_unique<LoginReply>(std::move(reply), this);
} }
std::unique_ptr<GetUserInfoReply> ZeiterfassungApi::doUserInfo() std::unique_ptr<GetUserInfoReply> ZeiterfassungApi::doUserInfo()
{ {
QNetworkRequest request(QUrl(m_url % "json/evoAppsUserInfoDialogController/load-EvoAppsUserInfoTO")); QNetworkRequest request0(QUrl(m_url % "json/evoAppsUserInfoDialogController/load-EvoAppsUserInfoTO"));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("home")); request0.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("home"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request)); QNetworkRequest request1(QUrl(m_url % "json/persons"));
request1.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
return std::make_unique<GetUserInfoReply>(std::move(reply), this); return std::make_unique<GetUserInfoReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request0)),
std::unique_ptr<QNetworkReply>(m_manager->get(request1)), this);
} }
std::unique_ptr<GetBookingsReply> ZeiterfassungApi::doGetBookings(int userId, const QDate &start, const QDate &end) std::unique_ptr<GetBookingsReply> ZeiterfassungApi::doGetBookings(int userId, const QDate &start, const QDate &end)
@@ -90,9 +88,7 @@ std::unique_ptr<GetBookingsReply> ZeiterfassungApi::doGetBookings(int userId, co
.arg(userId))); .arg(userId)));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request)); return std::make_unique<GetBookingsReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
return std::make_unique<GetBookingsReply>(std::move(reply), this);
} }
std::unique_ptr<CreateBookingReply> ZeiterfassungApi::doCreateBooking(int userId, const QDate &date, const QTime &time, const QTime &timespan, std::unique_ptr<CreateBookingReply> ZeiterfassungApi::doCreateBooking(int userId, const QDate &date, const QTime &time, const QTime &timespan,
@@ -114,9 +110,9 @@ std::unique_ptr<CreateBookingReply> ZeiterfassungApi::doCreateBooking(int userId
obj[QStringLiteral("einstuf")] = QStringLiteral(""); obj[QStringLiteral("einstuf")] = QStringLiteral("");
obj[QStringLiteral("text")] = text; obj[QStringLiteral("text")] = text;
auto reply = std::unique_ptr<QNetworkReply>(m_manager->post(request, QJsonDocument(obj).toJson())); auto data = QJsonDocument(obj).toJson();
return std::make_unique<CreateBookingReply>(std::move(reply), this); return std::make_unique<CreateBookingReply>(std::unique_ptr<QNetworkReply>(m_manager->post(request, data)), this);
} }
std::unique_ptr<UpdateBookingReply> ZeiterfassungApi::doUpdateBooking(int bookingId, int userId, const QDate &date, const QTime &time, std::unique_ptr<UpdateBookingReply> ZeiterfassungApi::doUpdateBooking(int bookingId, int userId, const QDate &date, const QTime &time,
@@ -140,9 +136,7 @@ std::unique_ptr<UpdateBookingReply> ZeiterfassungApi::doUpdateBooking(int bookin
auto data = QJsonDocument(obj).toJson(); auto data = QJsonDocument(obj).toJson();
auto reply = std::unique_ptr<QNetworkReply>(m_manager->put(request, data)); return std::make_unique<UpdateBookingReply>(std::unique_ptr<QNetworkReply>(m_manager->put(request, data)), this);
return std::make_unique<UpdateBookingReply>(std::move(reply), this);
} }
std::unique_ptr<DeleteBookingReply> ZeiterfassungApi::doDeleteBooking(int bookingId) std::unique_ptr<DeleteBookingReply> ZeiterfassungApi::doDeleteBooking(int bookingId)
@@ -152,9 +146,7 @@ std::unique_ptr<DeleteBookingReply> ZeiterfassungApi::doDeleteBooking(int bookin
.arg(bookingId))); .arg(bookingId)));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->deleteResource(request)); return std::make_unique<DeleteBookingReply>(std::unique_ptr<QNetworkReply>(m_manager->deleteResource(request)), this);
return std::make_unique<DeleteBookingReply>(std::move(reply), this);
} }
std::unique_ptr<GetTimeAssignmentsReply> ZeiterfassungApi::doGetTimeAssignments(int userId, const QDate &start, const QDate &end) std::unique_ptr<GetTimeAssignmentsReply> ZeiterfassungApi::doGetTimeAssignments(int userId, const QDate &start, const QDate &end)
@@ -166,9 +158,7 @@ std::unique_ptr<GetTimeAssignmentsReply> ZeiterfassungApi::doGetTimeAssignments(
.arg(userId))); .arg(userId)));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request)); return std::make_unique<GetTimeAssignmentsReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
return std::make_unique<GetTimeAssignmentsReply>(std::move(reply), this);
} }
std::unique_ptr<CreateTimeAssignmentReply> ZeiterfassungApi::doCreateTimeAssignment(int userId, const QDate &date, const QTime &time, std::unique_ptr<CreateTimeAssignmentReply> ZeiterfassungApi::doCreateTimeAssignment(int userId, const QDate &date, const QTime &time,
@@ -209,9 +199,7 @@ std::unique_ptr<CreateTimeAssignmentReply> ZeiterfassungApi::doCreateTimeAssignm
auto data = QJsonDocument(obj).toJson(); auto data = QJsonDocument(obj).toJson();
auto reply = std::unique_ptr<QNetworkReply>(m_manager->post(request, data)); return std::make_unique<CreateTimeAssignmentReply>(std::unique_ptr<QNetworkReply>(m_manager->post(request, data)), this);
return std::make_unique<CreateTimeAssignmentReply>(std::move(reply), this);
} }
std::unique_ptr<UpdateTimeAssignmentReply> ZeiterfassungApi::doUpdateTimeAssignment(int timeAssignmentId, int userId, const QDate &date, std::unique_ptr<UpdateTimeAssignmentReply> ZeiterfassungApi::doUpdateTimeAssignment(int timeAssignmentId, int userId, const QDate &date,
@@ -257,9 +245,7 @@ std::unique_ptr<UpdateTimeAssignmentReply> ZeiterfassungApi::doUpdateTimeAssignm
auto data = QJsonDocument(obj).toJson(); auto data = QJsonDocument(obj).toJson();
auto reply = std::unique_ptr<QNetworkReply>(m_manager->put(request, data)); return std::make_unique<UpdateTimeAssignmentReply>(std::unique_ptr<QNetworkReply>(m_manager->put(request, data)), this);
return std::make_unique<UpdateTimeAssignmentReply>(std::move(reply), this);
} }
std::unique_ptr<DeleteTimeAssignmentReply> ZeiterfassungApi::doDeleteTimeAssignment(int timeAssignmentId) std::unique_ptr<DeleteTimeAssignmentReply> ZeiterfassungApi::doDeleteTimeAssignment(int timeAssignmentId)
@@ -269,9 +255,7 @@ std::unique_ptr<DeleteTimeAssignmentReply> ZeiterfassungApi::doDeleteTimeAssignm
.arg(timeAssignmentId))); .arg(timeAssignmentId)));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->deleteResource(request)); return std::make_unique<DeleteTimeAssignmentReply>(std::unique_ptr<QNetworkReply>(m_manager->deleteResource(request)), this);
return std::make_unique<DeleteTimeAssignmentReply>(std::move(reply), this);
} }
std::unique_ptr<GetProjectsReply> ZeiterfassungApi::doGetProjects(int userId, const QDate &date) std::unique_ptr<GetProjectsReply> ZeiterfassungApi::doGetProjects(int userId, const QDate &date)
@@ -282,9 +266,7 @@ std::unique_ptr<GetProjectsReply> ZeiterfassungApi::doGetProjects(int userId, co
.arg(date.toString(QStringLiteral("yyyyMMdd"))))); .arg(date.toString(QStringLiteral("yyyyMMdd")))));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request)); return std::make_unique<GetProjectsReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
return std::make_unique<GetProjectsReply>(std::move(reply), this);
} }
std::unique_ptr<GetReportReply> ZeiterfassungApi::doGetReport(int userId, const QDate &date) std::unique_ptr<GetReportReply> ZeiterfassungApi::doGetReport(int userId, const QDate &date)
@@ -295,9 +277,7 @@ std::unique_ptr<GetReportReply> ZeiterfassungApi::doGetReport(int userId, const
.arg(date.toString(QStringLiteral("yyyyMMdd"))))); .arg(date.toString(QStringLiteral("yyyyMMdd")))));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request)); return std::make_unique<GetReportReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
return std::make_unique<GetReportReply>(std::move(reply), this);
} }
std::unique_ptr<GetPresenceStatusReply> ZeiterfassungApi::doGetPresenceStatus() std::unique_ptr<GetPresenceStatusReply> ZeiterfassungApi::doGetPresenceStatus()
@@ -305,7 +285,5 @@ std::unique_ptr<GetPresenceStatusReply> ZeiterfassungApi::doGetPresenceStatus()
QNetworkRequest request(QUrl(m_url % "json/presencestatus")); QNetworkRequest request(QUrl(m_url % "json/presencestatus"));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("presenceStatus")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("presenceStatus"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request)); return std::make_unique<GetPresenceStatusReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
return std::make_unique<GetPresenceStatusReply>(std::move(reply), this);
} }