diff options
Reorganized whole architecture
1 files changed, 76 insertions, 0 deletions
| -rw-r--r-- | src/Models/Event.cpp | 76 |
diff --git a/src/Models/Event.cpp b/src/Models/Event.cpp new file mode 100644 index 0000000..e6105eb --- /dev/null +++ b/src/Models/Event.cpp @@ -0,0 +1,76 @@ +#include "Event.h" +#include "Reservation.h" +#include "StatusCodes.h" + +Event::Event() : Event(nullptr, "", Date()) {} + +Event::Event(const Hall* hall, String name, Date date) : tickets(), reservations() { + this->hall = hall; + this->name = name; + this->date = date; +} + +const OrderedList<Ticket>& Event::get_tickets() const { + return tickets; +} + +const OrderedList<Reservation>& Event::get_reservations() const { + return reservations; +} + +const Hall& Event::get_hall() const { + return *hall; +} + +const String& Event::get_name() const { + return name; +} + +const Date& Event::get_date() const { + return date; +} + +StatusCode Event::reserveTicket(const Ticket& ticket, const char* password, const char* note) { + if (tickets.contain(ticket)) return E_TicketAlreadyBought; + if (reservations.contain(ticket)) return E_TicketAlreadyReserved; + + reservations.insert(Reservation(ticket, password, note)); + return Success; +} + +StatusCode Event::cancelReservation(unsigned row, unsigned seat) { + return cancelReservation(Ticket(row, seat)); +} + +StatusCode Event::cancelReservation(const Ticket& ticket) { + unsigned ind = reservations.findIndex(ticket); + if (ind == reservations.get_count()) + return W_TicketHadNotBeenReserved; + + reservations.removeAt(ind); + return Success; +} + +StatusCode Event::buyTicket(const Ticket& ticket) { + if (tickets.contain(ticket)) return E_TicketAlreadyBought; + if (reservations.contain(ticket)) return E_TicketAlreadyReserved; + + tickets.insert(ticket); + return Success; +} + +StatusCode Event::buyTicketFromReservation(const Reservation& reservation, const char* password) { + unsigned resInd = reservations.findIndex(reservation); + if (resInd == reservations.get_count()) return E_ReservationDoesNotExist; + + if (!reservations[resInd].validPassword(password)) return E_WrongReservationPassword; + + reservations.removeAt(resInd); + tickets.insert(reservation.get_ticket()); + return Success; +} + +int Event::compare(const Event& other) { + // TODO: improve + return name.compare(other.name); +} |
