From b84970fd1267f7ae606a8d86d6f854bd919a9d56 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Sun, 26 Nov 2023 19:56:38 +0100 Subject: [PATCH] Add class Ticket for future use. --- library/include/mobilisis/ticket.h | 64 ++++++++++++++++++++++++++++ library/src/ticket.cpp | 67 ++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 library/include/mobilisis/ticket.h create mode 100644 library/src/ticket.cpp diff --git a/library/include/mobilisis/ticket.h b/library/include/mobilisis/ticket.h new file mode 100644 index 0000000..f0c46ce --- /dev/null +++ b/library/include/mobilisis/ticket.h @@ -0,0 +1,64 @@ +#ifndef TICKET_H_INCLUDED +#define TICKET_H_INCLUDED + +#include +#include + +#include +#include +#include +#include + +#define NOT_INITIALIZED (0) +#define VALID (1) +#define INVALID_FROM_DATETIME (2) +#define INVALID_UNTIL_DATETIME (3) +#define STATUS_END (4) + +class Ticket { + enum {CODE=0, CODE_STR=1, CODE_DESC=3}; +public: + using Status = std::tuple; + + explicit Ticket(); + + explicit operator bool() { return std::get(m_status) == VALID; } + operator QString(); + + Status getStatus() const; + QDateTime getValidFrom() const; + QDateTime getValidUntil() const; + uint32_t getPrice() const; + + Status setStatus(Status status); + void setValidFrom(QDateTime const &validFrom); + void setValidUntil(QDateTime const &validUnil); + void setPrice(uint32_t price); + +private: + Status m_status; + + QDateTime m_validFrom; + QDateTime m_validUntil; + + int m_durationMinutesNetto; + int m_durationMinutesBrutto; + + uint32_t m_price; + + static constexpr const Status s[STATUS_END] = { + {NOT_INITIALIZED , "NOT_INITIALIZED" , "Ticket not initialized" }, + {VALID , "VALID" , "Ticket is valid" }, + {INVALID_FROM_DATETIME , "INVALID_FROM_DATETIME" , "Ticket has invalid start datetime"}, + {INVALID_UNTIL_DATETIME, "INVALID_UNTIL_DATETIME", "Ticket has invalid end datetime" } + }; +}; + +QDebug operator<<(QDebug debug, Ticket::Status const &status) { + QDebugStateSaver saver(debug); + debug << "Ticket-Status: " << std::get<1>(status) + << "(" << std::get<2>(status) << ")"; + return debug; +} + +#endif // TICKET_H_INCLUDED diff --git a/library/src/ticket.cpp b/library/src/ticket.cpp new file mode 100644 index 0000000..27d7170 --- /dev/null +++ b/library/src/ticket.cpp @@ -0,0 +1,67 @@ +#include "ticket.h" + +Ticket::Ticket() + : m_status(Ticket::s[NOT_INITIALIZED]) + , m_validFrom() + , m_validUntil() + , m_durationMinutesNetto(0) + , m_durationMinutesBrutto(0) + , m_price() { + + qDebug() << *this; + qDebug() << m_status; +} + +Ticket::Status Ticket::setStatus(Status status) { + Status old = m_status; + m_status = status; + return old; +} + +Ticket::Status Ticket::getStatus() const { + return m_status; +} + +void Ticket::setValidFrom(QDateTime const &validFrom) { + m_validFrom = validFrom; +} + +void Ticket::setValidUntil(QDateTime const &validUntil) { + m_validUntil = validUntil; +} + +QDateTime Ticket::getValidFrom() const { + if (std::get(m_status) == VALID) { + return m_validFrom; + } + return QDateTime(); +} + +QDateTime Ticket::getValidUntil() const { + if (std::get(m_status) == VALID) { + return m_validFrom; + } + return QDateTime(); +} + +uint32_t Ticket::getPrice() const { + return m_price; +} + +void Ticket::setPrice(uint32_t price) { + m_price = price; +} + +Ticket::operator QString() { + QStringList status; + status << QString("Status .............. : %1 (%2)") + .arg(std::get<0>(m_status)) + .arg(std::get<2>(m_status)); + status << QString("Valid from ......... : %1").arg(m_validFrom.toString(Qt::ISODate)); + status << QString("Valid until ........ : %1").arg(m_validUntil.toString(Qt::ISODate)); + status << QString("Duration (netto) ... : %1").arg(m_durationMinutesNetto); + status << QString("Duration (brutto)... : %1").arg(m_durationMinutesBrutto); + status << QString("Price ......... : %1").arg(m_price); + + return status.join('\n');; +}