From d10cc91c4056d991d5e78711071cfb0a9d48126e Mon Sep 17 00:00:00 2001 From: Joel Thomas Date: Tue, 19 May 2026 16:21:56 +0530 Subject: [PATCH] Add state tracking for models and menu loop setup 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. --- .../controllers/Controller.cpp | 8 +++++ .../models/ComboPackage.cpp | 14 ++++++++- .../models/ComboPackage.h | 4 +++ .../models/InventoryItem.cpp | 12 +++++++ .../models/InventoryItem.h | 4 +++ .../models/Service.cpp | 12 +++++++ .../models/Service.h | 4 +++ .../models/User.cpp | 18 +++++++++-- .../models/User.h | 3 ++ .../utilities/Enums.h | 31 +++++++++++++++++++ .../views/CustomerMenu.cpp | 22 +++++++++++++ .../views/TechnicianMenu.cpp | 20 ++++++++++++ 12 files changed, 148 insertions(+), 4 deletions(-) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp index ddf5354..d536e8a 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp @@ -32,10 +32,12 @@ void Controller::updateUserDetails(const std::string& email, const std::string& util::Map Controller::getServices() { + return util::Map(); } util::Map Controller::getComboPackages() { + return util::Map(); } void Controller::purchaseService(const util::Vector& 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 Controller::getInventoryItems() { + return util::Map(); } const InventoryItem* Controller::getInventoryItem(const std::string& inventoryItemID) @@ -65,18 +68,22 @@ void Controller::removeInventoryItem(const std::string& inventoryItemID) util::Map Controller::getServiceBookings() { + return util::Map(); } util::Map Controller::getServiceBookingsByUser(const std::string userID) { + return util::Map(); } util::Map Controller::getUsers() { + return util::Map(); } util::Map Controller::getUsers(util::UserType userType) { + return util::Map(); } 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 Controller::getNotifications() { + return util::Vector(); } void Controller::deleteNotification(const std::string& notificationID) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.cpp index 300ebfc..6216922 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.cpp @@ -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& 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& ComboPackage::getServices() const { return m_services; @@ -50,4 +57,9 @@ void ComboPackage::setDiscountPercentage(double discountPercentage) void ComboPackage::setServices(const util::Map& services) { m_services = services; -} \ No newline at end of file +} + +void ComboPackage::setState(util::State status) +{ + m_status = status; +} diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.h index 38a04a1..4b28d54 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.h @@ -1,6 +1,7 @@ #pragma once #include #include "Map.h" +#include "Enums.h" class Service; @@ -12,6 +13,7 @@ private: std::string m_packageName; double m_discountPercentage; util::Map m_services; + util::State m_status; public: ComboPackage(); ComboPackage(const std::string& packageName, double discountPercentage, const util::Map& services); @@ -19,8 +21,10 @@ public: const std::string& getPackageName() const; double getDiscountPercentage() const; const util::Map& 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& services); + void setState(util::State status); }; \ No newline at end of file diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.cpp index 8a0f367..c3dbbaa 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.cpp @@ -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; @@ -51,4 +58,9 @@ void InventoryItem::setQuantity(int quantity) void InventoryItem::setPrice(double price) { m_price = price; +} + +void InventoryItem::setState(util::State status) +{ + m_status = status; } \ No newline at end of file diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.h index 9c23e04..d9618bc 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.h @@ -1,5 +1,6 @@ #pragma once #include +#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); }; \ No newline at end of file diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.cpp index c49b2e4..fa7f509 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.cpp @@ -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& 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; @@ -50,4 +57,9 @@ void Service::setRequiredInventoryItems(const util::Map #include "Map.h" +#include "Enums.h" class InventoryItem; @@ -12,6 +13,7 @@ private: std::string m_name; util::Map m_requiredInventoryItems; double m_laborCost; + util::State m_status; public: Service(); Service(const std::string& name, const util::Map& requiredInventoryItems, double laborCost); @@ -19,8 +21,10 @@ public: const std::string& getName() const; const util::Map& 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& requiredInventoryItems); void setLaborCost(double laborCost); + void setState(util::State status); }; \ No newline at end of file diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.cpp index 4ac1ce6..70d1ec8 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.cpp @@ -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; @@ -103,4 +110,9 @@ void User::addNotification(Notification* notification) void User::setRole(util::UserType role) { m_type = role; -} \ No newline at end of file +} + +void User::setState(util::State status) +{ + m_status = status; +} diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.h index 9bc848c..b03fc81 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.h @@ -18,6 +18,7 @@ private: std::string m_email; util::Map 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& 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); }; diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h index a9eb8e5..24bbdcd 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h @@ -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"); + } } diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp index c9cc854..047f471 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp @@ -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) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp index 91b2a14..d6c4d57 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp @@ -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)