Files

124 lines
2.6 KiB
C++
Raw Permalink Normal View History

2017-12-29 01:56:17 +01:00
#include "absencesmodel.h"
#include "zeiterfassungapi.h"
AbsencesModel::AbsencesModel(int userId, const QDate &date, ZeiterfassungApi &erfassung, QObject *parent) :
QAbstractListModel(parent),
m_userId(userId),
m_erfassung(erfassung)
{
2018-01-11 21:37:29 +01:00
connect(this, &AbsencesModel::dateChanged, this, &AbsencesModel::refresh);
2017-12-29 01:56:17 +01:00
setDate(date);
}
bool AbsencesModel::enabled() const
{
return m_reply == Q_NULLPTR;
}
2018-01-11 21:37:29 +01:00
const QDate &AbsencesModel::date() const
{
return m_date;
}
const QVector<GetAbsencesReply::Absence> &AbsencesModel::absences() const
{
return m_absences;
}
2017-12-29 01:56:17 +01:00
int AbsencesModel::rowCount(const QModelIndex &parent) const
{
2017-12-29 02:21:34 +01:00
Q_UNUSED(parent)
2017-12-29 01:56:17 +01:00
2017-12-29 02:21:34 +01:00
return m_absences.count();
2017-12-29 01:56:17 +01:00
}
int AbsencesModel::columnCount(const QModelIndex &parent) const
{
2017-12-29 02:21:34 +01:00
Q_UNUSED(parent)
2017-12-29 01:56:17 +01:00
2018-01-10 19:10:13 +01:00
return 5;
2017-12-29 01:56:17 +01:00
}
QVariant AbsencesModel::data(const QModelIndex &index, int role) const
{
2017-12-29 02:21:34 +01:00
Q_ASSERT(index.row() < m_absences.count());
const auto &absence = m_absences.at(index.row());
2017-12-29 01:56:17 +01:00
2017-12-29 02:21:34 +01:00
switch(role)
{
case Qt::DisplayRole:
case Qt::EditRole:
switch(index.column())
{
2018-01-10 19:10:13 +01:00
case 0: return absence.compositeId;
case 1: return absence.start;
2017-12-29 02:21:34 +01:00
case 2: return absence.end;
case 3: return absence.hourCategory;
2018-01-10 19:10:13 +01:00
case 4: return absence.text;
2017-12-29 02:21:34 +01:00
}
}
return QVariant();
2017-12-29 01:56:17 +01:00
}
QVariant AbsencesModel::headerData(int section, Qt::Orientation orientation, int role) const
{
2017-12-29 02:21:34 +01:00
switch(orientation)
{
case Qt::Horizontal:
switch(role)
{
case Qt::DisplayRole:
case Qt::EditRole:
switch(section)
{
2018-01-10 19:10:13 +01:00
case 0: return tr("Id");
case 1: return tr("Start");
case 2: return tr("End");
case 3: return tr("Hour Category");
case 4: return tr("Text");
2017-12-29 02:21:34 +01:00
}
}
default:
qt_noop();
}
2017-12-29 01:56:17 +01:00
2017-12-29 02:21:34 +01:00
return QVariant();
2017-12-29 01:56:17 +01:00
}
2018-01-11 21:37:29 +01:00
void AbsencesModel::refresh()
2017-12-29 01:56:17 +01:00
{
2017-12-29 02:21:34 +01:00
auto oldEnabled = enabled();
2017-12-29 01:56:17 +01:00
m_reply = m_erfassung.doGetAbsences(m_userId, m_date, m_date);
connect(m_reply.get(), &ZeiterfassungReply::finished, this, &AbsencesModel::finished);
2017-12-29 02:21:34 +01:00
if(oldEnabled != enabled())
Q_EMIT enabledChanged(enabled());
2017-12-29 01:56:17 +01:00
}
2018-01-11 21:37:29 +01:00
void AbsencesModel::setDate(const QDate &date)
{
if(m_date != date)
Q_EMIT dateChanged(m_date = date);
}
2017-12-29 01:56:17 +01:00
void AbsencesModel::finished()
{
2017-12-29 02:21:34 +01:00
if(!m_reply->success())
Q_EMIT errorOccured(m_reply->message());
2017-12-29 01:56:17 +01:00
2017-12-29 02:21:34 +01:00
beginResetModel();
m_absences = m_reply->absences();
endResetModel();
auto oldEnabled = enabled();
m_reply = Q_NULLPTR;
if(oldEnabled != enabled())
Q_EMIT enabledChanged(enabled());
2017-12-29 01:56:17 +01:00
}