Devel #56

Merged
0xFEEDC0DE64 merged 84 commits from devel into master 2017-12-29 13:34:28 +01:00
5 changed files with 152 additions and 111 deletions
Showing only changes of commit 4e48d3c2f2 - Show all commits

View File

@@ -4,14 +4,21 @@
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
#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),
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
@@ -19,29 +26,32 @@ const GetUserInfoReply::UserInfo &GetUserInfoReply::userInfo() const
return m_userInfo;
}
void GetUserInfoReply::requestFinished()
void GetUserInfoReply::request0Finished()
{
if(m_reply->error() != QNetworkReply::NoError)
if(m_reply0->error() != QNetworkReply::NoError)
{
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;
}
{
QJsonParseError error;
auto document = QJsonDocument::fromJson(m_reply->readAll(), &error);
auto document = QJsonDocument::fromJson(m_reply0->readAll(), &error);
if(error.error != QJsonParseError::NoError)
{
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;
}
if(!document.isObject())
{
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;
}
@@ -50,7 +60,8 @@ void GetUserInfoReply::requestFinished()
if(!rootObj.contains(QStringLiteral("evoAppsUser")))
{
setSuccess(false);
setMessage(tr("JSON does not contain evoAppsUser!"));
setMessage(tr("JSON 0 does not contain evoAppsUser!"));
m_reply1 = Q_NULLPTR;
goto end;
}
@@ -60,23 +71,100 @@ void GetUserInfoReply::requestFinished()
{
setSuccess(false);
setMessage(tr("evoAppsUser is not an object!"));
m_reply1 = Q_NULLPTR;
goto end;
}
auto evoAppsUserObj = evoAppsUser.toObject();
setSuccess(true);
m_userInfo = {
evoAppsUserObj.value(QStringLiteral("persNr")).toInt(),
evoAppsUserObj.value(QStringLiteral("email")).toString(),
evoAppsUserObj.value(QStringLiteral("longUsername")).toString(),
evoAppsUserObj.value(QStringLiteral("text")).toString(),
evoAppsUserObj.value(QStringLiteral("username")).toString()
};
if(!m_reply1)
setSuccess(true);
m_userInfo.userId = evoAppsUserObj.value(QStringLiteral("persNr")).toInt();
m_userInfo.email = evoAppsUserObj.value(QStringLiteral("email")).toString();
m_userInfo.longUsername = evoAppsUserObj.value(QStringLiteral("longUsername")).toString();
m_userInfo.text = evoAppsUserObj.value(QStringLiteral("text")).toString();
m_userInfo.username = evoAppsUserObj.value(QStringLiteral("username")).toString();
}
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
public:
GetUserInfoReply(std::unique_ptr<QNetworkReply> &&reply, ZeiterfassungApi *zeiterfassung);
GetUserInfoReply(std::unique_ptr<QNetworkReply> &&reply0, std::unique_ptr<QNetworkReply> &&reply1,
ZeiterfassungApi *zeiterfassung);
struct UserInfo
{
@@ -24,15 +25,29 @@ public:
QString longUsername;
QString text;
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;
private Q_SLOTS:
void requestFinished();
void request0Finished();
void request1Finished();
private:
std::unique_ptr<QNetworkReply> m_reply;
std::unique_ptr<QNetworkReply> m_reply0;
std::unique_ptr<QNetworkReply> m_reply1;
UserInfo m_userInfo;
};

View File

@@ -53,9 +53,7 @@ std::unique_ptr<LoginPageReply> ZeiterfassungApi::doLoginPage()
{
QNetworkRequest request(QUrl(m_url % "pages/login.jsp"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request));
return std::make_unique<LoginPageReply>(std::move(reply), this);
return std::make_unique<LoginPageReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
}
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 reply = std::unique_ptr<QNetworkReply>(m_manager->post(request, data));
return std::make_unique<LoginReply>(std::move(reply), this);
return std::make_unique<LoginReply>(std::unique_ptr<QNetworkReply>(m_manager->post(request, data)), this);
}
std::unique_ptr<GetUserInfoReply> ZeiterfassungApi::doUserInfo()
{
QNetworkRequest request(QUrl(m_url % "json/evoAppsUserInfoDialogController/load-EvoAppsUserInfoTO"));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("home"));
QNetworkRequest request0(QUrl(m_url % "json/evoAppsUserInfoDialogController/load-EvoAppsUserInfoTO"));
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)
@@ -90,9 +88,7 @@ std::unique_ptr<GetBookingsReply> ZeiterfassungApi::doGetBookings(int userId, co
.arg(userId)));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request));
return std::make_unique<GetBookingsReply>(std::move(reply), this);
return std::make_unique<GetBookingsReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
}
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("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,
@@ -140,9 +136,7 @@ std::unique_ptr<UpdateBookingReply> ZeiterfassungApi::doUpdateBooking(int bookin
auto data = QJsonDocument(obj).toJson();
auto reply = std::unique_ptr<QNetworkReply>(m_manager->put(request, data));
return std::make_unique<UpdateBookingReply>(std::move(reply), this);
return std::make_unique<UpdateBookingReply>(std::unique_ptr<QNetworkReply>(m_manager->put(request, data)), this);
}
std::unique_ptr<DeleteBookingReply> ZeiterfassungApi::doDeleteBooking(int bookingId)
@@ -152,9 +146,7 @@ std::unique_ptr<DeleteBookingReply> ZeiterfassungApi::doDeleteBooking(int bookin
.arg(bookingId)));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->deleteResource(request));
return std::make_unique<DeleteBookingReply>(std::move(reply), this);
return std::make_unique<DeleteBookingReply>(std::unique_ptr<QNetworkReply>(m_manager->deleteResource(request)), this);
}
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)));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request));
return std::make_unique<GetTimeAssignmentsReply>(std::move(reply), this);
return std::make_unique<GetTimeAssignmentsReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
}
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 reply = std::unique_ptr<QNetworkReply>(m_manager->post(request, data));
return std::make_unique<CreateTimeAssignmentReply>(std::move(reply), this);
return std::make_unique<CreateTimeAssignmentReply>(std::unique_ptr<QNetworkReply>(m_manager->post(request, data)), this);
}
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 reply = std::unique_ptr<QNetworkReply>(m_manager->put(request, data));
return std::make_unique<UpdateTimeAssignmentReply>(std::move(reply), this);
return std::make_unique<UpdateTimeAssignmentReply>(std::unique_ptr<QNetworkReply>(m_manager->put(request, data)), this);
}
std::unique_ptr<DeleteTimeAssignmentReply> ZeiterfassungApi::doDeleteTimeAssignment(int timeAssignmentId)
@@ -269,9 +255,7 @@ std::unique_ptr<DeleteTimeAssignmentReply> ZeiterfassungApi::doDeleteTimeAssignm
.arg(timeAssignmentId)));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->deleteResource(request));
return std::make_unique<DeleteTimeAssignmentReply>(std::move(reply), this);
return std::make_unique<DeleteTimeAssignmentReply>(std::unique_ptr<QNetworkReply>(m_manager->deleteResource(request)), this);
}
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")))));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request));
return std::make_unique<GetProjectsReply>(std::move(reply), this);
return std::make_unique<GetProjectsReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
}
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")))));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request));
return std::make_unique<GetReportReply>(std::move(reply), this);
return std::make_unique<GetReportReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
}
std::unique_ptr<GetPresenceStatusReply> ZeiterfassungApi::doGetPresenceStatus()
@@ -305,7 +285,5 @@ std::unique_ptr<GetPresenceStatusReply> ZeiterfassungApi::doGetPresenceStatus()
QNetworkRequest request(QUrl(m_url % "json/presencestatus"));
request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("presenceStatus"));
auto reply = std::unique_ptr<QNetworkReply>(m_manager->get(request));
return std::make_unique<GetPresenceStatusReply>(std::move(reply), this);
return std::make_unique<GetPresenceStatusReply>(std::unique_ptr<QNetworkReply>(m_manager->get(request)), this);
}