Implemented PresenceStatus in API

This commit is contained in:
0xFEEDC0DE64
2017-12-14 00:50:13 +01:00
parent 2d915c75b1
commit 6b11becfb8
8 changed files with 125 additions and 2 deletions

View File

@@ -48,6 +48,7 @@ void GetBookingsReply::requestFinished()
setSuccess(true); setSuccess(true);
m_bookings.clear(); m_bookings.clear();
m_bookings.reserve(arr.count());
for(const auto &val : arr) for(const auto &val : arr)
{ {
auto obj = val.toObject(); auto obj = val.toObject();

View File

@@ -0,0 +1,69 @@
#include "getpresencestatusreply.h"
#include <QJsonParseError>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonValue>
#include <QJsonObject>
GetPresenceStatusReply::GetPresenceStatusReply(std::unique_ptr<QNetworkReply> &&reply, ZeiterfassungApi *zeiterfassung) :
ZeiterfassungReply(zeiterfassung),
m_reply(std::move(reply))
{
connect(m_reply.get(), &QNetworkReply::finished, this, &GetPresenceStatusReply::requestFinished);
}
const QVector<ZeiterfassungApi::PresenceStatus> &GetPresenceStatusReply::presenceStatuses() const
{
return m_presenceStatuses;
}
void GetPresenceStatusReply::requestFinished()
{
if(m_reply->error() != QNetworkReply::NoError)
{
setSuccess(false);
setMessage(tr("Request error occured: %0").arg(m_reply->error()));
goto end;
}
{
QJsonParseError error;
QJsonDocument document = QJsonDocument::fromJson(m_reply->readAll(), &error);
if(error.error != QJsonParseError::NoError)
{
setSuccess(false);
setMessage(tr("Parsing JSON failed: %0").arg(error.errorString()));
goto end;
}
if(!document.isArray())
{
setSuccess(false);
setMessage(tr("JSON document is not an array!"));
goto end;
}
auto arr = document.array();
setSuccess(true);
m_presenceStatuses.clear();
m_presenceStatuses.reserve(arr.count());
for(const auto &val : arr)
{
auto obj = val.toObject();
m_presenceStatuses.append({
obj.value(QStringLiteral("persNr")).toInt(),
obj.value(QStringLiteral("firstName")).toString(),
obj.value(QStringLiteral("lastName")).toString(),
obj.value(QStringLiteral("presence")).toString()
});
}
}
end:
m_reply = Q_NULLPTR;
Q_EMIT finished();
}

View File

@@ -0,0 +1,28 @@
#ifndef GETPRESENCESTATUSREPLY_H
#define GETPRESENCESTATUSREPLY_H
#include <memory>
#include <QNetworkReply>
#include "zeiterfassungreply.h"
#include "zeiterfassungapi.h"
class GetPresenceStatusReply : public ZeiterfassungReply
{
Q_OBJECT
public:
explicit GetPresenceStatusReply(std::unique_ptr<QNetworkReply> &&reply, ZeiterfassungApi *zeiterfassung);
const QVector<ZeiterfassungApi::PresenceStatus> &presenceStatuses() const;
private Q_SLOTS:
void requestFinished();
private:
std::unique_ptr<QNetworkReply> m_reply;
QVector<ZeiterfassungApi::PresenceStatus> m_presenceStatuses;
};
#endif // GETPRESENCESTATUSREPLY_H

View File

@@ -66,6 +66,7 @@ void GetProjectsReply::requestFinished()
setSuccess(true); setSuccess(true);
m_projects.clear(); m_projects.clear();
m_projects.reserve(elementsArr.count());
for(const auto &val : elementsArr) for(const auto &val : elementsArr)
{ {
auto obj = val.toObject(); auto obj = val.toObject();

View File

@@ -49,6 +49,7 @@ void GetTimeAssignmentsReply::requestFinished()
setSuccess(true); setSuccess(true);
m_timeAssignments.clear(); m_timeAssignments.clear();
m_timeAssignments.reserve(arr.count());
for(const auto &val : arr) for(const auto &val : arr)
{ {
auto obj = val.toObject(); auto obj = val.toObject();

View File

@@ -45,7 +45,8 @@ SOURCES += main.cpp \
replies/getprojectsreply.cpp \ replies/getprojectsreply.cpp \
replies/getauswertungreply.cpp \ replies/getauswertungreply.cpp \
replies/zeiterfassungreply.cpp \ replies/zeiterfassungreply.cpp \
replies/deletetimeassignmentreply.cpp replies/deletetimeassignmentreply.cpp \
replies/getpresencestatusreply.cpp
HEADERS += \ HEADERS += \
mainwindow.h \ mainwindow.h \
@@ -77,7 +78,8 @@ HEADERS += \
replies/getauswertungreply.h \ replies/getauswertungreply.h \
replies/zeiterfassungreply.h \ replies/zeiterfassungreply.h \
replies/deletetimeassignmentreply.h \ replies/deletetimeassignmentreply.h \
cpp14polyfills.h cpp14polyfills.h \
replies/getpresencestatusreply.h
FORMS += \ FORMS += \
mainwindow.ui \ mainwindow.ui \

View File

@@ -15,6 +15,7 @@
#include "replies/deletetimeassignmentreply.h" #include "replies/deletetimeassignmentreply.h"
#include "replies/getauswertungreply.h" #include "replies/getauswertungreply.h"
#include "replies/getbookingsreply.h" #include "replies/getbookingsreply.h"
#include "replies/getpresencestatusreply.h"
#include "replies/getprojectsreply.h" #include "replies/getprojectsreply.h"
#include "replies/gettimeassignmentsreply.h" #include "replies/gettimeassignmentsreply.h"
#include "replies/loginpagereply.h" #include "replies/loginpagereply.h"
@@ -297,3 +298,13 @@ std::unique_ptr<GetAuswertungReply> ZeiterfassungApi::doGetAuswertung(int userId
return std::make_unique<GetAuswertungReply>(std::move(reply), this); return std::make_unique<GetAuswertungReply>(std::move(reply), this);
} }
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);
}

View File

@@ -23,6 +23,7 @@ class UpdateTimeAssignmentReply;
class DeleteTimeAssignmentReply; class DeleteTimeAssignmentReply;
class GetProjectsReply; class GetProjectsReply;
class GetAuswertungReply; class GetAuswertungReply;
class GetPresenceStatusReply;
class ZeiterfassungApi : public QObject class ZeiterfassungApi : public QObject
{ {
@@ -73,6 +74,14 @@ public:
QString value; QString value;
}; };
struct PresenceStatus
{
int userId;
QString firstName;
QString lastName;
QString presence;
};
std::unique_ptr<LoginPageReply> doLoginPage(); std::unique_ptr<LoginPageReply> doLoginPage();
std::unique_ptr<LoginReply> doLogin(const QString &username, const QString &password); std::unique_ptr<LoginReply> doLogin(const QString &username, const QString &password);
std::unique_ptr<UserInfoReply> doUserInfo(); std::unique_ptr<UserInfoReply> doUserInfo();
@@ -97,6 +106,7 @@ public:
std::unique_ptr<GetProjectsReply> doGetProjects(int userId, const QDate &date); std::unique_ptr<GetProjectsReply> doGetProjects(int userId, const QDate &date);
std::unique_ptr<GetAuswertungReply> doGetAuswertung(int userId, const QDate &date); std::unique_ptr<GetAuswertungReply> doGetAuswertung(int userId, const QDate &date);
std::unique_ptr<GetPresenceStatusReply> doGetPresenceStatus();
private: private:
QString m_url; QString m_url;