Website Summary Files Commits Branches @commit @diff @stats
path: root / src / Models / Event.cpp
diff options
context:
space:
mode:
Commitb844597fd23bc57aa97e231fc90eecfd6322cecc (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2022-05-07 08:28:27 +0300
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2022-05-07 08:28:27 +0300
Files86a4112ecfa1e3a54dbcf44a7ddf37575ba4aa39 /src/Models/Event.cpp
FMI-OOP-P1_TicketSystem-b844597fd23bc57aa97e231fc90eecfd6322cecc.tar
FMI-OOP-P1_TicketSystem-b844597fd23bc57aa97e231fc90eecfd6322cecc.tar.gz
FMI-OOP-P1_TicketSystem-b844597fd23bc57aa97e231fc90eecfd6322cecc.zip
Parent0910afb91c8f9672be1d6184f47fb75947ea14f1 (diff)
Reorganized whole architecture
1 files changed, 76 insertions, 0 deletions
-rw-r--r--src/Models/Event.cpp76
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);
+}