Add state tracking for models and menu loop setup
<Changes>
1. Added State enum with ACTIVE and INACTIVE values in Enums.h.
2. Added state member, getter, and setter in User, Service, InventoryItem, and ComboPackage models.
3. Updated constructors to initialize model objects with ACTIVE state by default.
4. Added state string conversion helper functions in Enums.h.
5. Added default return values in Controller getter methods to complete stub implementations.
6. Added basic menu loop implementation in CustomerMenu and TechnicianMenu for handling user input.
</Changes>
This commit is contained in:
@@ -32,10 +32,12 @@ void Controller::updateUserDetails(const std::string& email, const std::string&
|
||||
|
||||
util::Map<std::string, const Service*> Controller::getServices()
|
||||
{
|
||||
return util::Map<std::string, const Service*>();
|
||||
}
|
||||
|
||||
util::Map<std::string, const ComboPackage*> Controller::getComboPackages()
|
||||
{
|
||||
return util::Map<std::string, const ComboPackage*>();
|
||||
}
|
||||
|
||||
void Controller::purchaseService(const util::Vector<std::string>& serviceIDs, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel)
|
||||
@@ -48,6 +50,7 @@ void Controller::purchaseComboPackage(const std::string& comboPackageID, const s
|
||||
|
||||
util::Map<std::string, const InventoryItem*> Controller::getInventoryItems()
|
||||
{
|
||||
return util::Map<std::string, const InventoryItem*>();
|
||||
}
|
||||
|
||||
const InventoryItem* Controller::getInventoryItem(const std::string& inventoryItemID)
|
||||
@@ -65,18 +68,22 @@ void Controller::removeInventoryItem(const std::string& inventoryItemID)
|
||||
|
||||
util::Map<std::string, const ServiceBooking*> Controller::getServiceBookings()
|
||||
{
|
||||
return util::Map<std::string, const ServiceBooking*>();
|
||||
}
|
||||
|
||||
util::Map<std::string, const ServiceBooking*> Controller::getServiceBookingsByUser(const std::string userID)
|
||||
{
|
||||
return util::Map<std::string, const ServiceBooking*>();
|
||||
}
|
||||
|
||||
util::Map<std::string, const User*> Controller::getUsers()
|
||||
{
|
||||
return util::Map<std::string, const User*>();
|
||||
}
|
||||
|
||||
util::Map<std::string, const User*> Controller::getUsers(util::UserType userType)
|
||||
{
|
||||
return util::Map<std::string, const User*>();
|
||||
}
|
||||
|
||||
void Controller::createJobCard(const std::string& bookingID, const std::string& technicianID, const std::string& serviceID)
|
||||
@@ -123,6 +130,7 @@ void Controller::completePayment(const std::string& invoiceID, util::PaymentMode
|
||||
|
||||
util::Vector<const Notification*> Controller::getNotifications()
|
||||
{
|
||||
return util::Vector<const Notification*>();
|
||||
}
|
||||
|
||||
void Controller::deleteNotification(const std::string& notificationID)
|
||||
|
||||
@@ -4,12 +4,14 @@ int ComboPackage::m_uid = 0;
|
||||
|
||||
ComboPackage::ComboPackage()
|
||||
: m_id("CMP" + std::to_string(++m_uid)),
|
||||
m_status(util::State::ACTIVE),
|
||||
m_discountPercentage(0.0) {}
|
||||
|
||||
ComboPackage::ComboPackage(const std::string& packageName, double discountPercentage, const util::Map<std::string, Service*>& services)
|
||||
: m_id("CMP" + std::to_string(++m_uid)),
|
||||
m_packageName(packageName),
|
||||
m_discountPercentage(discountPercentage),
|
||||
m_status(util::State::ACTIVE),
|
||||
m_services(services) {}
|
||||
|
||||
const std::string& ComboPackage::getId() const
|
||||
@@ -27,6 +29,11 @@ double ComboPackage::getDiscountPercentage() const
|
||||
return m_discountPercentage;
|
||||
}
|
||||
|
||||
util::State ComboPackage::getState() const
|
||||
{
|
||||
return m_status;
|
||||
}
|
||||
|
||||
const util::Map<std::string, Service*>& ComboPackage::getServices() const
|
||||
{
|
||||
return m_services;
|
||||
@@ -51,3 +58,8 @@ void ComboPackage::setServices(const util::Map<std::string, Service*>& services)
|
||||
{
|
||||
m_services = services;
|
||||
}
|
||||
|
||||
void ComboPackage::setState(util::State status)
|
||||
{
|
||||
m_status = status;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include "Map.h"
|
||||
#include "Enums.h"
|
||||
|
||||
class Service;
|
||||
|
||||
@@ -12,6 +13,7 @@ private:
|
||||
std::string m_packageName;
|
||||
double m_discountPercentage;
|
||||
util::Map<std::string, Service*> m_services;
|
||||
util::State m_status;
|
||||
public:
|
||||
ComboPackage();
|
||||
ComboPackage(const std::string& packageName, double discountPercentage, const util::Map<std::string, Service*>& services);
|
||||
@@ -19,8 +21,10 @@ public:
|
||||
const std::string& getPackageName() const;
|
||||
double getDiscountPercentage() const;
|
||||
const util::Map<std::string, Service*>& getServices() const;
|
||||
util::State getState() const;
|
||||
void setId(const std::string& id);
|
||||
void setPackageName(const std::string& packageName);
|
||||
void setDiscountPercentage(double discountPercentage);
|
||||
void setServices(const util::Map<std::string, Service*>& services);
|
||||
void setState(util::State status);
|
||||
};
|
||||
@@ -5,12 +5,14 @@ int InventoryItem::m_uid = 0;
|
||||
InventoryItem::InventoryItem()
|
||||
: m_id("IIM" + std::to_string(++m_uid)),
|
||||
m_quantity(0),
|
||||
m_status(util::State::ACTIVE),
|
||||
m_price(0.0) {}
|
||||
|
||||
InventoryItem::InventoryItem(const std::string& partName, int quantity, double price)
|
||||
: m_id("IIM" + std::to_string(++m_uid)),
|
||||
m_partName(partName),
|
||||
m_quantity(quantity),
|
||||
m_status(util::State::ACTIVE),
|
||||
m_price(price) {}
|
||||
|
||||
const std::string& InventoryItem::getId() const
|
||||
@@ -33,6 +35,11 @@ double InventoryItem::getPrice() const
|
||||
return m_price;
|
||||
}
|
||||
|
||||
util::State InventoryItem::getState() const
|
||||
{
|
||||
return m_status;
|
||||
}
|
||||
|
||||
void InventoryItem::setId(const std::string& id)
|
||||
{
|
||||
m_id = id;
|
||||
@@ -52,3 +59,8 @@ void InventoryItem::setPrice(double price)
|
||||
{
|
||||
m_price = price;
|
||||
}
|
||||
|
||||
void InventoryItem::setState(util::State status)
|
||||
{
|
||||
m_status = status;
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include "Enums.h"
|
||||
|
||||
class InventoryItem
|
||||
{
|
||||
@@ -9,6 +10,7 @@ private:
|
||||
std::string m_partName;
|
||||
int m_quantity;
|
||||
double m_price;
|
||||
util::State m_status;
|
||||
public:
|
||||
InventoryItem();
|
||||
InventoryItem(const std::string& partName, int quantity, double price);
|
||||
@@ -16,8 +18,10 @@ public:
|
||||
const std::string& getPartName() const;
|
||||
int getQuantity() const;
|
||||
double getPrice() const;
|
||||
util::State getState() const;
|
||||
void setId(const std::string& id);
|
||||
void setPartName(const std::string& partName);
|
||||
void setQuantity(int quantity);
|
||||
void setPrice(double price);
|
||||
void setState(util::State status);
|
||||
};
|
||||
@@ -4,12 +4,14 @@ int Service::m_uid = 0;
|
||||
|
||||
Service::Service()
|
||||
: m_id("SRV" + std::to_string(++m_uid)),
|
||||
m_status(util::State::ACTIVE),
|
||||
m_laborCost(0.0) {}
|
||||
|
||||
Service::Service(const std::string& name, const util::Map<std::string, InventoryItem*>& requiredInventoryItems, double laborCost)
|
||||
: m_id("SRV" + std::to_string(++m_uid)),
|
||||
m_name(name),
|
||||
m_requiredInventoryItems(requiredInventoryItems),
|
||||
m_status(util::State::ACTIVE),
|
||||
m_laborCost(laborCost) {}
|
||||
|
||||
const std::string& Service::getId() const
|
||||
@@ -32,6 +34,11 @@ double Service::getLaborCost() const
|
||||
return m_laborCost;
|
||||
}
|
||||
|
||||
util::State Service::getState() const
|
||||
{
|
||||
return m_status;
|
||||
}
|
||||
|
||||
void Service::setId(const std::string& id)
|
||||
{
|
||||
m_id = id;
|
||||
@@ -51,3 +58,8 @@ void Service::setLaborCost(double laborCost)
|
||||
{
|
||||
m_laborCost = laborCost;
|
||||
}
|
||||
|
||||
void Service::setState(util::State status)
|
||||
{
|
||||
m_status = status;
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include "Map.h"
|
||||
#include "Enums.h"
|
||||
|
||||
class InventoryItem;
|
||||
|
||||
@@ -12,6 +13,7 @@ private:
|
||||
std::string m_name;
|
||||
util::Map<std::string, InventoryItem*> m_requiredInventoryItems;
|
||||
double m_laborCost;
|
||||
util::State m_status;
|
||||
public:
|
||||
Service();
|
||||
Service(const std::string& name, const util::Map<std::string, InventoryItem*>& requiredInventoryItems, double laborCost);
|
||||
@@ -19,8 +21,10 @@ public:
|
||||
const std::string& getName() const;
|
||||
const util::Map<std::string, InventoryItem*>& getRequiredInventoryItems() const;
|
||||
double getLaborCost() const;
|
||||
util::State getState() const;
|
||||
void setId(const std::string& id);
|
||||
void setName(const std::string& name);
|
||||
void setRequiredInventoryItems(const util::Map<std::string, InventoryItem*>& requiredInventoryItems);
|
||||
void setLaborCost(double laborCost);
|
||||
void setState(util::State status);
|
||||
};
|
||||
@@ -6,7 +6,8 @@ int User::m_uid = 0;
|
||||
|
||||
User::User()
|
||||
: m_id("USR" + std::to_string(++m_uid)),
|
||||
m_type(util::UserType()) {}
|
||||
m_type(util::UserType::CUSTOMER),
|
||||
m_status(util::State::ACTIVE) {}
|
||||
|
||||
User::User(const std::string& userName, const std::string& password, const std::string& name, const std::string& phone, const std::string& email, util::UserType role)
|
||||
: m_id("USR" + std::to_string(++m_uid)),
|
||||
@@ -15,7 +16,8 @@ User::User(const std::string& userName, const std::string& password, const std::
|
||||
m_name(name),
|
||||
m_phone(phone),
|
||||
m_email(email),
|
||||
m_type(role) {}
|
||||
m_type(role),
|
||||
m_status(util::State::ACTIVE) {}
|
||||
|
||||
User::~User()
|
||||
{
|
||||
@@ -65,6 +67,11 @@ util::UserType User::getUserType() const
|
||||
return m_type;
|
||||
}
|
||||
|
||||
util::State User::getState() const
|
||||
{
|
||||
return m_status;
|
||||
}
|
||||
|
||||
void User::setId(const std::string& id)
|
||||
{
|
||||
m_id = id;
|
||||
@@ -104,3 +111,8 @@ void User::setRole(util::UserType role)
|
||||
{
|
||||
m_type = role;
|
||||
}
|
||||
|
||||
void User::setState(util::State status)
|
||||
{
|
||||
m_status = status;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ private:
|
||||
std::string m_email;
|
||||
util::Map<std::string, Notification*> m_notifications;
|
||||
util::UserType m_type;
|
||||
util::State m_status;
|
||||
public:
|
||||
User();
|
||||
User(const std::string& userName, const std::string& password, const std::string& name, const std::string& phone, const std::string& email, util::UserType role);
|
||||
@@ -30,6 +31,7 @@ public:
|
||||
const std::string& getEmail() const;
|
||||
util::Map<std::string, Notification*>& getNotifications();
|
||||
util::UserType getUserType() const;
|
||||
util::State getState() const;
|
||||
void setId(const std::string& id);
|
||||
void setUserName(const std::string& userName);
|
||||
void setPassword(const std::string& password);
|
||||
@@ -38,4 +40,5 @@ public:
|
||||
void setEmail(const std::string& email);
|
||||
void addNotification(Notification* notification);
|
||||
void setRole(util::UserType role);
|
||||
void setState(util::State status);
|
||||
};
|
||||
|
||||
@@ -28,6 +28,12 @@ namespace util
|
||||
COMPLETED
|
||||
};
|
||||
|
||||
enum class State
|
||||
{
|
||||
ACTIVE,
|
||||
INACTIVE
|
||||
};
|
||||
|
||||
inline std::string getUserTypeString(UserType type)
|
||||
{
|
||||
switch (type)
|
||||
@@ -135,4 +141,29 @@ namespace util
|
||||
}
|
||||
throw std::invalid_argument("Invalid ServiceJobStatus string");
|
||||
}
|
||||
|
||||
inline std::string getStateString(State status)
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case State::ACTIVE:
|
||||
return "STARTED";
|
||||
case State::INACTIVE:
|
||||
return "COMPLETED";
|
||||
}
|
||||
throw std::invalid_argument("Invalid State");
|
||||
}
|
||||
|
||||
inline State getState(const std::string& value)
|
||||
{
|
||||
if (value == "ACTIVE")
|
||||
{
|
||||
return State::ACTIVE;
|
||||
}
|
||||
if (value == "COMPLETED")
|
||||
{
|
||||
return State::INACTIVE;
|
||||
}
|
||||
throw std::invalid_argument("Invalid State string");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,29 @@
|
||||
#include "CustomerMenu.h"
|
||||
#include "InputHelper.h"
|
||||
#include "OutputHelper.h"
|
||||
|
||||
void CustomerMenu::showMenu()
|
||||
{
|
||||
bool isMenuActive = true;
|
||||
while (isMenuActive)
|
||||
{
|
||||
try
|
||||
{
|
||||
int choice;
|
||||
util::clear();
|
||||
std::cout << "" << std::endl;
|
||||
util::read(choice);
|
||||
if (!handleOperation(choice))
|
||||
{
|
||||
isMenuActive = false;
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
std::cout << "Exception: " << e.what() << std::endl;
|
||||
util::pressEnter();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CustomerMenu::handleOperation(int choice)
|
||||
|
||||
@@ -4,6 +4,26 @@
|
||||
|
||||
void TechnicianMenu::showMenu()
|
||||
{
|
||||
bool isMenuActive = true;
|
||||
while (isMenuActive)
|
||||
{
|
||||
try
|
||||
{
|
||||
int choice;
|
||||
util::clear();
|
||||
std::cout << "" << std::endl;
|
||||
util::read(choice);
|
||||
if (!handleOperation(choice))
|
||||
{
|
||||
isMenuActive = false;
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
std::cout << "Exception: " << e.what() << std::endl;
|
||||
util::pressEnter();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool TechnicianMenu::handleOperation(int choice)
|
||||
|
||||
Reference in New Issue
Block a user