summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id>2019-10-02 21:30:32 +0800
committerꦌ ꦫꦶ ꦏ꧀ꦦꦿ ꦧ ꦮ ꦑ ꦩ ꦭ꧀ <erik@darapsa.co.id>2019-10-02 21:30:32 +0800
commit6e3ee14209963c9a7190cc76925cc736fea83218 (patch)
tree53eb35dd939033ce047a82ced5c03c6022917b5e
parentfd5de53d7f95084bacec1a880077de6bddcb3289 (diff)
Ticket history class
-rw-r--r--qrtclient.pro2
-rw-r--r--qrtclient/tickethistory.hxx109
-rw-r--r--tickethistory.cxx88
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();
+ }
+
+}