From 582afff664ffd77b157d70520ca7b4d6455ab76c Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 29 Dec 2017 02:21:34 +0100 Subject: [PATCH] Implemented AbsenceModel --- plugins/absenceplugin/absencedialog.ui | 2 +- plugins/absenceplugin/absencesmodel.cpp | 66 +++++++++++++++++++ plugins/absenceplugin/absencesmodel.h | 2 + .../replies/getabsencesreply.cpp | 2 +- .../replies/getabsencesreply.h | 2 +- 5 files changed, 71 insertions(+), 3 deletions(-) diff --git a/plugins/absenceplugin/absencedialog.ui b/plugins/absenceplugin/absencedialog.ui index 41582c0..eb6a823 100644 --- a/plugins/absenceplugin/absencedialog.ui +++ b/plugins/absenceplugin/absencedialog.ui @@ -6,7 +6,7 @@ 0 0 - 400 + 947 300 diff --git a/plugins/absenceplugin/absencesmodel.cpp b/plugins/absenceplugin/absencesmodel.cpp index f302efc..77a0043 100644 --- a/plugins/absenceplugin/absencesmodel.cpp +++ b/plugins/absenceplugin/absencesmodel.cpp @@ -17,33 +17,99 @@ bool AbsencesModel::enabled() const int AbsencesModel::rowCount(const QModelIndex &parent) const { + Q_UNUSED(parent) + return m_absences.count(); } int AbsencesModel::columnCount(const QModelIndex &parent) const { + Q_UNUSED(parent) + return 9; } QVariant AbsencesModel::data(const QModelIndex &index, int role) const { + Q_ASSERT(index.row() < m_absences.count()); + const auto &absence = m_absences.at(index.row()); + switch(role) + { + case Qt::DisplayRole: + case Qt::EditRole: + switch(index.column()) + { + case 0: return absence.altRepresentative; + case 1: return absence.compositeId; + case 2: return absence.end; + case 3: return absence.hourCategory; + case 4: return absence.openMarking; + case 5: return absence.persNr; + case 6: return absence.representative; + case 7: return absence.start; + case 8: return absence.text; + } + } + + return QVariant(); } QVariant AbsencesModel::headerData(int section, Qt::Orientation orientation, int role) const { + switch(orientation) + { + case Qt::Horizontal: + switch(role) + { + case Qt::DisplayRole: + case Qt::EditRole: + switch(section) + { + case 0: return tr("altRepresentative"); + case 1: return tr("compositeId"); + case 2: return tr("end"); + case 3: return tr("hourCategory"); + case 4: return tr("openMarking"); + case 5: return tr("persNr"); + case 6: return tr("representative"); + case 7: return tr("start"); + case 8: return tr("text"); + } + } + default: + qt_noop(); + } + return QVariant(); } void AbsencesModel::setDate(const QDate &date) { m_date = date; + auto oldEnabled = enabled(); + m_reply = m_erfassung.doGetAbsences(m_userId, m_date, m_date); connect(m_reply.get(), &ZeiterfassungReply::finished, this, &AbsencesModel::finished); + + if(oldEnabled != enabled()) + Q_EMIT enabledChanged(enabled()); } void AbsencesModel::finished() { + if(!m_reply->success()) + Q_EMIT errorOccured(m_reply->message()); + beginResetModel(); + m_absences = m_reply->absences(); + endResetModel(); + + auto oldEnabled = enabled(); + + m_reply = Q_NULLPTR; + + if(oldEnabled != enabled()) + Q_EMIT enabledChanged(enabled()); } diff --git a/plugins/absenceplugin/absencesmodel.h b/plugins/absenceplugin/absencesmodel.h index 92541a3..0353e5e 100644 --- a/plugins/absenceplugin/absencesmodel.h +++ b/plugins/absenceplugin/absencesmodel.h @@ -27,6 +27,7 @@ public: Q_SIGNALS: void enabledChanged(bool enabled); + void errorOccured(const QString &message); public Q_SLOTS: void setDate(const QDate &date); @@ -39,4 +40,5 @@ private: QDate m_date; ZeiterfassungApi &m_erfassung; std::unique_ptr m_reply; + QVector m_absences; }; diff --git a/zeiterfassungcorelib/replies/getabsencesreply.cpp b/zeiterfassungcorelib/replies/getabsencesreply.cpp index a3340d3..107adc6 100644 --- a/zeiterfassungcorelib/replies/getabsencesreply.cpp +++ b/zeiterfassungcorelib/replies/getabsencesreply.cpp @@ -16,7 +16,7 @@ GetAbsencesReply::GetAbsencesReply(std::unique_ptr &&reply, Zeite connect(m_reply.get(), &QNetworkReply::finished, this, &GetAbsencesReply::requestFinished); } -const QVector &GetAbsencesReply::getAbsences() const +const QVector &GetAbsencesReply::absences() const { return m_absences; } diff --git a/zeiterfassungcorelib/replies/getabsencesreply.h b/zeiterfassungcorelib/replies/getabsencesreply.h index 349714c..1a8cbf4 100644 --- a/zeiterfassungcorelib/replies/getabsencesreply.h +++ b/zeiterfassungcorelib/replies/getabsencesreply.h @@ -32,7 +32,7 @@ public: QString text; }; - const QVector &getAbsences() const; + const QVector &absences() const; private Q_SLOTS: void requestFinished();