diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.cpp index f12c6a5..5615038 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.cpp @@ -5,11 +5,23 @@ Date: 18-02-2026 #include "DeliveryAssignment.h" +int DeliveryAssignment::m_uid = 0; + int DeliveryAssignment::getId() const { return m_id; } +DeliveryStatus DeliveryAssignment::getStatus() const +{ + return m_status; +} + +void DeliveryAssignment::setStatus(const DeliveryStatus& status) +{ + m_status = status; +} + Order& DeliveryAssignment::getOrder() { return m_order; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.h index b77312b..c5a1ddc 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.h @@ -16,17 +16,19 @@ enum class DeliveryStatus class DeliveryAssignment { private: + static int m_uid; int m_id; Order& m_order; DeliveryStatus m_status; public: - DeliveryAssignment(int id, Order& order) : - m_id(id), + DeliveryAssignment(Order& order) : + m_id(++m_uid), m_order(order), m_status(DeliveryStatus::CREATED) {} int getId() const; DeliveryStatus getStatus() const; + void setStatus(const DeliveryStatus&); Order& getOrder(); }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.cpp index f698e44..ccf104b 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.cpp @@ -10,6 +10,11 @@ void DeliveryPartner::acceptDeliveryAssignment(std::shared_ptrgetId()] = deliveryAssignmentPointer; } +deliveryAssignments& DeliveryPartner::getAssignedDeliveries() +{ + return m_deliveryAssignments; +} + std::string DeliveryPartner::getType() const { return "DeliveryPartner"; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp index 2a700b0..7734408 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp @@ -123,27 +123,27 @@ static std::string getOrderStatusString(const OrderStatus& orderStatus) } } -static orders::iterator pickOrderFromOrders(orders& customerOrders) +static orders::iterator pickOrderFromOrders(orders& userOrders) { util::clear(); - std::cout << "Pick an order\n"; + std::cout << "Pick an Order\n"; int orderIndex = 1, orderChoiceIndex; - if (customerOrders.empty()) + if (userOrders.empty()) { std::cout << "You have not placed any orders!\n"; - return customerOrders.end(); + return userOrders.end(); } std::cout << std::left << std::setw(8) << "Index" << std::left << std::setw(5) << "ID" - << std::left << std::setw(15) << "Item Count" + << std::left << std::setw(12) << "Item Count" << std::left << std::setw(15) << "Total Amount" << std::left << std::setw(15) << "Status" << "\n"; - for (auto& order : customerOrders) + for (auto& order : userOrders) { std::cout << std::left << std::setw(8) << orderIndex << std::left << std::setw(5) << order.second->getId() - << std::left << std::setw(15) << order.second->getItems().size() + << std::left << std::setw(12) << order.second->getItems().size() << std::left << std::setw(15) << order.second->getTotal() << std::left << std::setw(15) << getOrderStatusString(order.second->getStatus()) << "\n"; @@ -152,11 +152,11 @@ static orders::iterator pickOrderFromOrders(orders& customerOrders) std::cout << "\nSelect Index: "; util::readValue(orderChoiceIndex); orderChoiceIndex--; - if (orderChoiceIndex < 0 || orderChoiceIndex >= customerOrders.size()) + if (orderChoiceIndex < 0 || orderChoiceIndex >= userOrders.size()) { - return customerOrders.end(); + return userOrders.end(); } - orders::iterator orderIterator = customerOrders.begin(); + orders::iterator orderIterator = userOrders.begin(); std::advance(orderIterator, orderChoiceIndex); return orderIterator; } @@ -391,7 +391,7 @@ void FoodDeliveryController::updateRestaurantStatus() const } } -void FoodDeliveryController::listRestaurantOrders() +void FoodDeliveryController::listRestaurantOrders() const { } @@ -567,7 +567,7 @@ void FoodDeliveryController::listCustomerOrders() const << std::left << std::setw(10) << menuItem.getPrice() * item->getQuantity() << "\n"; } - std::cout << "Net Cost : " << orderIterator->second->getTotal() << "\n"; + std::cout << "\nNet Cost : " << orderIterator->second->getTotal() << "\n"; std::cout << "Status : " << getOrderStatusString(orderIterator->second->getStatus()) << "\n"; } else if (!customerOrders.empty()) @@ -626,7 +626,7 @@ void FoodDeliveryController::placeOrder() { if (!order) { - order = std::make_shared(); + order = std::make_shared(customer->getName()); } order->addItem(Item(*(menuItemIterator->second), quantity)); std::cout << menuItemIterator->second->getName() << " with quantity " << quantity << " has been added to your Order\n"; @@ -694,17 +694,14 @@ void FoodDeliveryController::cancelOrder() const if (orderIterator != customerOrders.end()) { OrderStatus orderStatus = orderIterator->second->getStatus(); - if (orderStatus != OrderStatus::CANCELLED && orderStatus != OrderStatus::DELIVERED) { + if (orderStatus == OrderStatus::CREATED) + { orderIterator->second->setStatus(OrderStatus::CANCELLED); std::cout << "Order " << orderIterator->second->getId() << " has been cancelled successfully!\n"; } - else if (orderStatus == OrderStatus::DELIVERED) - { - std::cout << "Cannot cancel Order " << orderIterator->second->getId() << " as it has already been delivered!\n"; - } else { - std::cout << "Order " << orderIterator->second->getId() << " has already been cancelled!\n"; + std::cout << "Order " << orderIterator->second->getId() << " cannot be cancelled as it is already cancelled, ready for pickup, in transit, or delivered!\n"; } } else if (!customerOrders.empty()) diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h index 5cdb84b..a23bbdd 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h @@ -35,7 +35,7 @@ public: void listRestaurants() const; void addNewRestaurant(); void updateRestaurantStatus() const; - void listRestaurantOrders(); + void listRestaurantOrders() const; void markOrderReady(); void listMenuItems() const; void addMenuItem() const; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.cpp index fc7ef25..bcb4e7d 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.cpp @@ -36,3 +36,8 @@ void Order::setStatus(const OrderStatus& orderStatus) { m_status = orderStatus; } + +const std::string& Order::getCustomerUsername() +{ + return m_customerUsername; +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.h index 182eaf4..440b820 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.h @@ -5,6 +5,7 @@ Date: 18-12-2026 #pragma once #include +#include #include #include "Item.h" @@ -27,11 +28,13 @@ private: items m_items; double m_totalAmount; OrderStatus m_status; + std::string m_customerUsername; public: - Order(): + Order(const std::string& customerUsername) : m_id(++m_uid), m_totalAmount(0), - m_status(OrderStatus::CREATED) + m_status(OrderStatus::CREATED), + m_customerUsername(customerUsername) {} int getId() const; void addItem(const Item&); @@ -39,5 +42,6 @@ public: double getTotal() const; OrderStatus getStatus() const; void setStatus(const OrderStatus&); + const std::string& getCustomerUsername(); }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.cpp index 1378dfb..b6494a6 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.cpp @@ -35,6 +35,14 @@ orders& Restaurant::getOrders() return m_orders; } +void Restaurant::addOrder(std::shared_ptr order) +{ + if (m_orders.find(order->getId()) == m_orders.end()) + { + m_orders[order->getId()] = order; + } +} + bool Restaurant::getStatus() const { return m_isOpen; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.h index 5eff9ac..de264d1 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.h @@ -38,6 +38,7 @@ public: menuItems& getMenuItems(); const std::string& getName() const; orders& getOrders(); + void addOrder(std::shared_ptr); bool getStatus() const; void setStatus(bool); }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwnerMenu.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwnerMenu.cpp index dc69297..e5760ea 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwnerMenu.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwnerMenu.cpp @@ -24,7 +24,7 @@ void RestaurantOwnerMenu::showMenu() "2. Add New Restaurant\n" "3. Update Restaurant Status\n" "4. List Orders\n" - "5. Mark Order Ready for Delivery\n" + "5. Mark Order Ready for PickUp\n" "6. List Menu Items\n" "7. Add New Item to Menu\n" "8. Remove Item from Menu\n"