Refactor delivery and order handling: unique IDs, status methods, new fields, naming fixes, and menu/controller corrections
- Add static m_uid to DeliveryAssignment for unique IDs
- Implement DeliveryAssignment getStatus() and setStatus()
- Add DeliveryPartner::getAssignedDeliveries()
- Rename pickOrderFromOrders() param to userOrders
- Fix spelling issues and setw() widths
- Mark non-mutating controller methods as const
- Add newline before Net Cost output
- Restrict cancellation to orders in CREATED state
- Add customerUsername to Order with getters/setters
- Implement Restaurant::addOrder()
- Fix RestaurantOwnerMenu option 5
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
|
||||
|
||||
@@ -10,6 +10,11 @@ void DeliveryPartner::acceptDeliveryAssignment(std::shared_ptr<DeliveryAssignmen
|
||||
m_deliveryAssignments[deliveryAssignmentPointer->getId()] = deliveryAssignmentPointer;
|
||||
}
|
||||
|
||||
deliveryAssignments& DeliveryPartner::getAssignedDeliveries()
|
||||
{
|
||||
return m_deliveryAssignments;
|
||||
}
|
||||
|
||||
std::string DeliveryPartner::getType() const
|
||||
{
|
||||
return "DeliveryPartner";
|
||||
|
||||
@@ -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<int>(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>();
|
||||
order = std::make_shared<Order>(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())
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -36,3 +36,8 @@ void Order::setStatus(const OrderStatus& orderStatus)
|
||||
{
|
||||
m_status = orderStatus;
|
||||
}
|
||||
|
||||
const std::string& Order::getCustomerUsername()
|
||||
{
|
||||
return m_customerUsername;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ Date: 18-12-2026
|
||||
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#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();
|
||||
};
|
||||
|
||||
|
||||
@@ -35,6 +35,14 @@ orders& Restaurant::getOrders()
|
||||
return m_orders;
|
||||
}
|
||||
|
||||
void Restaurant::addOrder(std::shared_ptr<Order> order)
|
||||
{
|
||||
if (m_orders.find(order->getId()) == m_orders.end())
|
||||
{
|
||||
m_orders[order->getId()] = order;
|
||||
}
|
||||
}
|
||||
|
||||
bool Restaurant::getStatus() const
|
||||
{
|
||||
return m_isOpen;
|
||||
|
||||
@@ -38,6 +38,7 @@ public:
|
||||
menuItems& getMenuItems();
|
||||
const std::string& getName() const;
|
||||
orders& getOrders();
|
||||
void addOrder(std::shared_ptr<Order>);
|
||||
bool getStatus() const;
|
||||
void setStatus(bool);
|
||||
};
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user