diff options
-rw-r--r-- | qrtclient.pro | 2 | ||||
-rw-r--r-- | qrtclient/tickethistory.hxx | 109 | ||||
-rw-r--r-- | tickethistory.cxx | 88 |
3 files changed, 199 insertions, 0 deletions
diff --git a/qrtclient.pro b/qrtclient.pro index 1e53e4f..c425913 100644 --- a/qrtclient.pro +++ b/qrtclient.pro @@ -5,10 +5,12 @@ CONFIG += staticlib HEADERS += \ qrtclient/user.hxx \ qrtclient/ticket.hxx \ + qrtclient/tickethistory.hxx \ qrtclient/client.hxx SOURCES += \ user.cxx \ ticket.cxx \ + tickethistory.cxx \ client.cxx INCLUDEPATH += $$PWD/librtclient diff --git a/qrtclient/tickethistory.hxx b/qrtclient/tickethistory.hxx new file mode 100644 index 0000000..7d68652 --- /dev/null +++ b/qrtclient/tickethistory.hxx @@ -0,0 +1,109 @@ +#ifndef QRTCLIENT_TICKET_HISTORY_HXX +#define QRTCLIENT_TICKET_HISTORY_HXX + +#include <QAbstractListModel> +#include <QDateTime> +#include <rtclient/ticket.h> + +struct rtclient_ticket_history_list; + +namespace RTClient { + + class TicketHistory + { + public: + TicketHistory(struct rtclient_ticket_history* history) + : m_id{history->id} + , m_ticket{history->ticket} + , m_timeTaken{history->time_taken} + , m_type{history->type} + , m_description{history->description} + , m_content{history->content} + , m_creator{history->creator} + { + if (history->field) + m_field = QString{history->field}; + if (history->old_value) + m_oldValue = QString{history->old_value}; + if (history->new_value) + m_newValue = QString{history->new_value}; + if (history->data) + m_data = QString{history->data}; + } + unsigned int id() const { return m_id; } + unsigned int ticket() const { return m_ticket; } + unsigned int timeTaken() const { return m_timeTaken; } +// Q_ENUM(rtclient_ticket_history_type) + rtclient_ticket_history_type type() const { return m_type; } + QString const& field() const { return m_field; } + QString const& oldValue() const { return m_oldValue; } + QString const& newValue() const { return m_newValue; } + QString const& data() const { return m_data; } + QString const& description() const { return m_description; } + QString const& content() const { return m_content; } + QString const& creator() const { return m_creator; } + QDateTime const& created() const { return m_created; } + + private: + unsigned int m_id; + unsigned int m_ticket; + unsigned int m_timeTaken; + rtclient_ticket_history_type m_type; + QString m_field; + QString m_oldValue; + QString m_newValue; + QString m_data; + QString m_description; + QString m_content; + QString m_creator; + QDateTime m_created; +// QList<TicketHistoryAttachment>* m_attachments; + }; + + class TicketHistoryList : public QAbstractListModel + { + Q_OBJECT + + public: + enum TicketHistoryRoles { + IdRole = Qt::UserRole + 1, + TicketRole, + TimeTakenRole, + TypeRole, + FieldRole, + OldValueRole, + NewValueRole, + DataRole, + DescriptionRole, + ContentRole, + CreatorRole, + CreatedRole/*, + AttachmentsRole*/ + }; + + explicit TicketHistoryList(QObject* parent = nullptr) + : QAbstractListModel{parent} {} + + int rowCount(QModelIndex const& parent + = QModelIndex()) const Q_DECL_OVERRIDE; + QVariant data(const QModelIndex& index + , int role = Qt::DisplayRole + ) const Q_DECL_OVERRIDE; + + public slots: + void update(rtclient_ticket_history_list* list); + + protected: + QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE; + + signals: + void updated(); + + private: + QList<TicketHistory> histories; + void addTicketHistory(TicketHistory const& history); + }; + +} + +#endif // QRTCLIENT_TICKET_HISTORY_HXX diff --git a/tickethistory.cxx b/tickethistory.cxx new file mode 100644 index 0000000..d1af392 --- /dev/null +++ b/tickethistory.cxx @@ -0,0 +1,88 @@ +#include <cstddef> +#include "qrtclient/tickethistory.hxx" + +namespace RTClient { + + int TicketHistoryList::rowCount(QModelIndex const& parent) const + { + Q_UNUSED(parent) + return histories.count(); + } + + QVariant TicketHistoryList::data(QModelIndex const& index, int role) const + { + auto row = index.row(); + + if (row < 0 || row >= histories.count()) return QVariant(); + + auto history = histories[row]; + switch (role) { + case IdRole: + return history.id(); + case TicketRole: + return history.ticket(); + case TimeTakenRole: + return history.timeTaken(); + case TypeRole: + return history.type(); + case FieldRole: + return history.field(); + case OldValueRole: + return history.oldValue(); + case NewValueRole: + return history.newValue(); + case DataRole: + return history.data(); + case DescriptionRole: + return history.description(); + case ContentRole: + return history.content(); + case CreatorRole: + return history.creator(); + case CreatedRole: + return history.created(); + /* + case AttachmentsRole: + return history.attachments(); + */ + default: + return QVariant(); + } + } + + QHash<int, QByteArray> TicketHistoryList::roleNames() const + { + return QHash<int, QByteArray>{ + {IdRole, "id"} + , {TicketRole, "ticket"} + , {TimeTakenRole, "timeTaken"} + , {TypeRole, "type"} + , {FieldRole, "field"} + , {OldValueRole, "oldValue"} + , {NewValueRole, "newValue"} + , {DataRole, "data"} + , {DescriptionRole, "description"} + , {ContentRole, "content"} + , {CreatorRole, "creator"} + , {CreatedRole, "created"} +// , {AttachmentsRole, "attachments"} + }; + } + + void TicketHistoryList::addTicketHistory(TicketHistory const& history) + { + beginInsertRows(QModelIndex(), rowCount(), rowCount()); + histories << history; + endInsertRows(); + } + + void TicketHistoryList::update(rtclient_ticket_history_list* list) + { + if (list) + for (size_t i = 0; i < list->length; i++) + addTicketHistory + (TicketHistory{list->histories[i]}); + emit updated(); + } + +} |