#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