diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.cpp
index eff3229..3db950c 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.cpp
@@ -1,7 +1,24 @@
+/*
+File: Trenser.VehicleServiceSystem.cpp
+Description: Entry point for the Vehicle Service Management System.
+ Initializes the UserInterface and starts the application loop.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "UserInterface.h"
+/*
+Function: main
+Description: The main entry point of the application.
+ Creates a UserInterface object and invokes the run method to start the system.
+Parameters:
+ - None
+Returns:
+ - int: Exit status code (0 for successful execution).
+*/
int main()
{
UserInterface userInterface;
userInterface.run();
-}
+}
\ No newline at end of file
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj
index 0cb9d3f..063f776 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj
@@ -182,6 +182,7 @@
+
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj.filters b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj.filters
index 7c17f4e..69f87db 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj.filters
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj.filters
@@ -233,8 +233,14 @@
Header Files\Models
+
+ Header Files\Views
+
Header Files\Utilities
+
+ Header Files\Utilities
+
\ No newline at end of file
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp
index da2c182..5bbd32e 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp
@@ -6,9 +6,8 @@ Description: Implementation file containing the method definitions
Author: Trenser
Date:19-May-2026
*/
-#include
-#include "ComboPackage.h"
#include "Controller.h"
+#include "ComboPackage.h"
#include "Enums.h"
#include "InventoryItem.h"
#include "Invoice.h"
@@ -16,6 +15,8 @@ Date:19-May-2026
#include "Service.h"
#include "ServiceBooking.h"
#include "User.h"
+#include "User.h"
+#include
/*
Function: login
@@ -73,9 +74,9 @@ Parameter: const std::string& username - technician's username
const std::string& phoneNumber - technician's phone number
Return type: void
*/
-void Controller::createTechnician(const std::string& username, const std::string& password, const std::string& email, const std::string& phoneNumber)
+void Controller::createTechnician(const std::string& username, const std::string& name, const std::string& password, const std::string& email, const std::string& phoneNumber)
{
- m_userManagementService.createUser(username, password, email, phoneNumber, util::UserType::TECHNICIAN);
+ m_userManagementService.createUser(username, name, password, email, phoneNumber, util::UserType::TECHNICIAN);
}
void Controller::updateUserDetails(const std::string& email, const std::string& phone)
@@ -344,21 +345,95 @@ void Controller::completePayment(const std::string& invoiceID, util::PaymentMode
m_paymentManagementService.completePayment(invoiceID, paymentMode);
}
+/*
+Function: getNotifications
+Description: Retrieves all notifications for the currently authenticated user.
+ Converts them into a read-only vector before returning.
+Parameters: None
+Return type: util::Vector
+*/
util::Vector Controller::getNotifications()
{
- return util::Vector();
+ const User* authenticatedUser = m_authenticationManagementService.getAuthenticatedUser();
+ if (!authenticatedUser)
+ {
+ throw std::runtime_error("No user is currently logged in!");
+ }
+ auto notifications = m_userManagementService.getUserNotifications(authenticatedUser->getId());
+ int numberOfNotifications = notifications.getSize();
+ util::Vector readOnlyNotifications;
+ for (int index = 0; index < numberOfNotifications; index++)
+ {
+ readOnlyNotifications.push_back(notifications[index]);
+ }
+ return readOnlyNotifications;
}
+/*
+Function: deleteNotification
+Description: Deletes a specific notification for the currently authenticated user.
+Parameters:
+ - notificationID: std::string, the unique identifier of the notification
+Return type: void
+*/
void Controller::deleteNotification(const std::string& notificationID)
{
+ const User* authenticatedUser = m_authenticationManagementService.getAuthenticatedUser();
+ if (!authenticatedUser)
+ {
+ throw std::runtime_error("No user is currently logged in!");
+ }
+ m_userManagementService.deleteNotification(notificationID, authenticatedUser->getId());
}
-void Controller::configureNotifications(const std::string& userID, bool paymentNotifications, bool serviceNotifications)
+/*
+Function: configureNotifications
+Description: Configures notification preferences for the authenticated user.
+ Attaches or detaches the user from payment and service notifications.
+Parameters:
+ - paymentNotifications: bool, enable/disable payment notifications
+ - serviceNotifications: bool, enable/disable service notifications
+Return type: void
+*/
+void Controller::configureNotifications(bool paymentNotifications, bool serviceNotifications)
{
+ User* authenticatedUser = m_authenticationManagementService.getAuthenticatedUser();
+ if (authenticatedUser)
+ {
+ if (paymentNotifications)
+ {
+ m_paymentManagementService.attach(authenticatedUser);
+ }
+ else
+ {
+ m_paymentManagementService.detach(authenticatedUser);
+ }
+ if (serviceNotifications)
+ {
+ m_serviceManagementService.attach(authenticatedUser);
+ }
+ else
+ {
+ m_serviceManagementService.detach(authenticatedUser);
+ }
+ }
+ else
+ {
+ throw std::runtime_error("No user is currently logged in!");
+ }
}
+/*
+Function: runSystemChecks
+Description: Executes system checks including sending low stock alerts
+ and payment reminders.
+Parameters: None
+Return type: void
+*/
void Controller::runSystemChecks()
{
m_userManagementService.ensureAdminExists();
+ m_inventoryManagementService.sendLowStockAlerts();
+ m_paymentManagementService.sendPaymentReminders();
}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h
index f7694fc..a0aa280 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h
@@ -39,7 +39,7 @@ public:
void changePassword(const std::string& newPassword);
void createCustomer(const std::string& username, const std::string& name, const std::string& password, const std::string& email, const std::string& phone);
const User* getAuthenticatedUser();
- void createTechnician(const std::string& username, const std::string& password, const std::string& email, const std::string& phoneNumber);
+ void createTechnician(const std::string& username, const std::string& name, const std::string& password, const std::string& email, const std::string& phoneNumber);
void updateUserDetails(const std::string& email, const std::string& phone);
util::Map getServices();
util::Map getComboPackages();
@@ -48,6 +48,7 @@ public:
util::Map getInventoryItems();
const InventoryItem* getInventoryItem(const std::string& inventoryItemID);
void addInventoryItem(const std::string& partName, int quantity, double price);
+ void addInventoryItemStock(const std::string& selectedItemId, int quantity);
void removeInventoryItem(const std::string& inventoryItemID);
util::Map getServiceBookings();
util::Map getServiceBookingsByUser(const std::string userID);
@@ -65,7 +66,6 @@ public:
void completePayment(const std::string& invoiceID, util::PaymentMode paymentMode);
util::Vector getNotifications();
void deleteNotification(const std::string& notificationID);
- void configureNotifications(const std::string& userID, bool paymentNotifications, bool serviceNotifications);
- void addInventoryItemStock(const std::string& selectedItemId, int quantity);
+ void configureNotifications(bool paymentNotifications, bool serviceNotifications);
void runSystemChecks();
};
\ No newline at end of file
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/core/patterns/Observer.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/core/patterns/Observer.h
index 98f0efa..7fd7262 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/core/patterns/Observer.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/core/patterns/Observer.h
@@ -1,3 +1,10 @@
+/*
+File: Observer.h
+Description: Declares the Observer interface for handling notifications in the Vehicle Service Management System.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
class Notification;
@@ -6,5 +13,5 @@ class Observer
{
public:
virtual ~Observer() = default;
- virtual void update(Notification* notification) = 0;
+ virtual void addNotification(Notification* notification) = 0;
};
\ No newline at end of file
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/core/patterns/Subject.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/core/patterns/Subject.h
index 309a59d..4cfe5ce 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/core/patterns/Subject.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/core/patterns/Subject.h
@@ -1,3 +1,10 @@
+/*
+File: Subject.h
+Description: Declares the Subject interface for managing user attachments and detachments in the Observer design pattern within the Vehicle Service Management System.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include
#include "Map.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/datastores/DataStore.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/datastores/DataStore.cpp
index dd0e016..3419f44 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/datastores/DataStore.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/datastores/DataStore.cpp
@@ -1,46 +1,128 @@
+/*
+File: DataStore.cpp
+Description: Implements the DataStore class which provides a centralized singleton repository
+ for managing system data in the Vehicle Service Management System.
+ Includes accessors for users, services, combo packages, service bookings,
+ job cards, inventory items, invoices, and payments.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "DataStore.h"
+/*
+Function: getInstance
+Description: Provides a singleton instance of the DataStore class.
+Parameters:
+ - None
+Returns:
+ - Reference to the single DataStore instance.
+*/
DataStore& DataStore::getInstance()
{
static DataStore dataStore;
return dataStore;
}
+/*
+Function: getUsers
+Description: Retrieves the internal map of users.
+Parameters:
+ - None
+Returns:
+ - Reference to util::Map containing all users.
+*/
util::Map& DataStore::getUsers()
{
return m_users;
}
+/*
+Function: getServices
+Description: Retrieves the internal map of services.
+Parameters:
+ - None
+Returns:
+ - Reference to util::Map containing all services.
+*/
util::Map& DataStore::getServices()
{
return m_services;
}
+/*
+Function: getComboPackages
+Description: Retrieves the internal map of combo packages.
+Parameters:
+ - None
+Returns:
+ - Reference to util::Map containing all combo packages.
+*/
util::Map& DataStore::getComboPackages()
{
return m_comboPackages;
}
+/*
+Function: getServiceBookings
+Description: Retrieves the internal map of service bookings.
+Parameters:
+ - None
+Returns:
+ - Reference to util::Map containing all service bookings.
+*/
util::Map& DataStore::getServiceBookings()
{
return m_serviceBookings;
}
+/*
+Function: getJobCards
+Description: Retrieves the internal map of job cards.
+Parameters:
+ - None
+Returns:
+ - Reference to util::Map containing all job cards.
+*/
util::Map& DataStore::getJobCards()
{
return m_jobCards;
}
+/*
+Function: getInventoryItems
+Description: Retrieves the internal map of inventory items.
+Parameters:
+ - None
+Returns:
+ - Reference to util::Map containing all inventory items.
+*/
util::Map& DataStore::getInventoryItems()
{
return m_inventoryItems;
}
+/*
+Function: getInvoices
+Description: Retrieves the internal map of invoices.
+Parameters:
+ - None
+Returns:
+ - Reference to util::Map containing all invoices.
+*/
util::Map& DataStore::getInvoices()
{
return m_invoices;
}
+/*
+Function: getPayments
+Description: Retrieves the internal map of payments.
+Parameters:
+ - None
+Returns:
+ - Reference to util::Map containing all payments.
+*/
util::Map& DataStore::getPayments()
{
return m_payments;
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/datastores/DataStore.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/datastores/DataStore.h
index 924e8e4..cde9b4e 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/datastores/DataStore.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/datastores/DataStore.h
@@ -1,5 +1,11 @@
-#pragma once
+/*
+File: DataStore.h
+Description: Declares the DataStore singleton class responsible for managing collections of users, services, combo packages, service bookings, job cards, inventory items, invoices, and payments in the Vehicle Service Management System.
+Author: Trenser
+Date: 19-May-2026
+*/
+#pragma once
#include
#include "Map.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.cpp
index 6216922..41e75d0 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.cpp
@@ -1,12 +1,41 @@
+/*
+File: ComboPackage.cpp
+Description: Implements the ComboPackage class which represents a bundled set of services in the Vehicle Service Management System.
+ Provides constructors, accessors, and mutators for package details such as ID, name, discount percentage, state,
+ and associated services.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "ComboPackage.h"
int ComboPackage::m_uid = 0;
+/*
+Function: ComboPackage
+Description: Default constructor that initializes a new combo package with a unique ID,
+ active state, and zero discount percentage.
+Parameters:
+ - None
+Returns:
+ - A new ComboPackage object.
+*/
ComboPackage::ComboPackage()
: m_id("CMP" + std::to_string(++m_uid)),
m_status(util::State::ACTIVE),
m_discountPercentage(0.0) {}
+/*
+Function: ComboPackage
+Description: Parameterized constructor that initializes a new combo package with a unique ID,
+ specified package name, discount percentage, active state, and associated services.
+Parameters:
+ - packageName: Name of the combo package.
+ - discountPercentage: Discount percentage applied to the package.
+ - services: Map of services included in the package.
+Returns:
+ - A new ComboPackage object.
+*/
ComboPackage::ComboPackage(const std::string& packageName, double discountPercentage, const util::Map& services)
: m_id("CMP" + std::to_string(++m_uid)),
m_packageName(packageName),
@@ -14,51 +43,131 @@ ComboPackage::ComboPackage(const std::string& packageName, double discountPercen
m_status(util::State::ACTIVE),
m_services(services) {}
+/*
+Function: getId
+Description: Retrieves the unique ID of the combo package.
+Parameters:
+ - None
+Returns:
+ - const std::string& representing the package ID.
+*/
const std::string& ComboPackage::getId() const
{
return m_id;
}
+/*
+Function: getPackageName
+Description: Retrieves the name of the combo package.
+Parameters:
+ - None
+Returns:
+ - const std::string& representing the package name.
+*/
const std::string& ComboPackage::getPackageName() const
{
return m_packageName;
}
+/*
+Function: getDiscountPercentage
+Description: Retrieves the discount percentage applied to the combo package.
+Parameters:
+ - None
+Returns:
+ - double representing the discount percentage.
+*/
double ComboPackage::getDiscountPercentage() const
{
return m_discountPercentage;
}
+/*
+Function: getState
+Description: Retrieves the current state (ACTIVE/INACTIVE) of the combo package.
+Parameters:
+ - None
+Returns:
+ - util::State representing the package state.
+*/
util::State ComboPackage::getState() const
{
return m_status;
}
+/*
+Function: getServices
+Description: Retrieves the map of services included in the combo package.
+Parameters:
+ - None
+Returns:
+ - const util::Map& representing the services.
+*/
const util::Map& ComboPackage::getServices() const
{
return m_services;
}
+/*
+Function: setId
+Description: Sets the unique ID of the combo package.
+Parameters:
+ - id: New ID string.
+Returns:
+ - void
+*/
void ComboPackage::setId(const std::string& id)
{
m_id = id;
}
+/*
+Function: setPackageName
+Description: Sets the name of the combo package.
+Parameters:
+ - packageName: New package name string.
+Returns:
+ - void
+*/
void ComboPackage::setPackageName(const std::string& packageName)
{
m_packageName = packageName;
}
+/*
+Function: setDiscountPercentage
+Description: Sets the discount percentage for the combo package.
+Parameters:
+ - discountPercentage: New discount percentage value.
+Returns:
+ - void
+*/
void ComboPackage::setDiscountPercentage(double discountPercentage)
{
m_discountPercentage = discountPercentage;
}
+/*
+Function: setServices
+Description: Sets the services included in the combo package.
+Parameters:
+ - services: Map of services to be associated with the package.
+Returns:
+ - void
+*/
void ComboPackage::setServices(const util::Map& services)
{
m_services = services;
}
+/*
+Function: setState
+Description: Sets the state (ACTIVE/INACTIVE) of the combo package.
+Parameters:
+ - status: New state value.
+Returns:
+ - void
+*/
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 4b28d54..a620ee4 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ComboPackage.h
@@ -1,3 +1,10 @@
+/*
+File: ComboPackage.h
+Description: Declares the ComboPackage class which represents a service package with a unique ID, package name, discount percentage, associated services, and status in the Vehicle Service Management System.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include
#include "Map.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.cpp
index c3dbbaa..edc8654 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.cpp
@@ -1,13 +1,41 @@
+/*
+File: InventoryItem.cpp
+Description: Implements the InventoryItem class which represents an inventory item in the Vehicle Service Management System.
+ Provides constructors, accessors, and mutators for item details such as ID, part name, quantity, price, and state.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "InventoryItem.h"
int InventoryItem::m_uid = 0;
+/*
+Function: InventoryItem
+Description: Default constructor that initializes a new inventory item with a unique ID,
+ active state, zero quantity, and zero price.
+Parameters:
+ - None
+Returns:
+ - A new InventoryItem object.
+*/
InventoryItem::InventoryItem()
: m_id("IIM" + std::to_string(++m_uid)),
m_quantity(0),
m_status(util::State::ACTIVE),
m_price(0.0) {}
+/*
+Function: InventoryItem
+Description: Parameterized constructor that initializes a new inventory item with a unique ID,
+ specified part name, quantity, price, and active state.
+Parameters:
+ - partName: Name of the inventory item.
+ - quantity: Initial quantity of the item.
+ - price: Price of the item.
+Returns:
+ - A new InventoryItem object.
+*/
InventoryItem::InventoryItem(const std::string& partName, int quantity, double price)
: m_id("IIM" + std::to_string(++m_uid)),
m_partName(partName),
@@ -15,51 +43,131 @@ InventoryItem::InventoryItem(const std::string& partName, int quantity, double p
m_status(util::State::ACTIVE),
m_price(price) {}
+/*
+Function: getId
+Description: Retrieves the unique ID of the inventory item.
+Parameters:
+ - None
+Returns:
+ - const std::string& representing the item ID.
+*/
const std::string& InventoryItem::getId() const
{
return m_id;
}
+/*
+Function: getPartName
+Description: Retrieves the part name of the inventory item.
+Parameters:
+ - None
+Returns:
+ - const std::string& representing the part name.
+*/
const std::string& InventoryItem::getPartName() const
{
return m_partName;
}
+/*
+Function: getQuantity
+Description: Retrieves the current quantity of the inventory item.
+Parameters:
+ - None
+Returns:
+ - int representing the quantity.
+*/
int InventoryItem::getQuantity() const
{
return m_quantity;
}
+/*
+Function: getPrice
+Description: Retrieves the price of the inventory item.
+Parameters:
+ - None
+Returns:
+ - double representing the price.
+*/
double InventoryItem::getPrice() const
{
return m_price;
}
+/*
+Function: getState
+Description: Retrieves the current state (ACTIVE/INACTIVE) of the inventory item.
+Parameters:
+ - None
+Returns:
+ - util::State representing the item state.
+*/
util::State InventoryItem::getState() const
{
return m_status;
}
+/*
+Function: setId
+Description: Sets the unique ID of the inventory item.
+Parameters:
+ - id: New ID string.
+Returns:
+ - void
+*/
void InventoryItem::setId(const std::string& id)
{
m_id = id;
}
+/*
+Function: setPartName
+Description: Sets the part name of the inventory item.
+Parameters:
+ - partName: New part name string.
+Returns:
+ - void
+*/
void InventoryItem::setPartName(const std::string& partName)
{
m_partName = partName;
}
+/*
+Function: setQuantity
+Description: Sets the quantity of the inventory item.
+Parameters:
+ - quantity: New quantity value.
+Returns:
+ - void
+*/
void InventoryItem::setQuantity(int quantity)
{
m_quantity = quantity;
}
+/*
+Function: setPrice
+Description: Sets the price of the inventory item.
+Parameters:
+ - price: New price value.
+Returns:
+ - void
+*/
void InventoryItem::setPrice(double price)
{
m_price = price;
}
+/*
+Function: setState
+Description: Sets the state (ACTIVE/INACTIVE) of the inventory item.
+Parameters:
+ - status: New state value.
+Returns:
+ - void
+*/
void InventoryItem::setState(util::State status)
{
m_status = status;
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.h
index d9618bc..0cb36ac 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/InventoryItem.h
@@ -1,3 +1,12 @@
+/*
+File: InventoryItem.h
+Description: Declares the InventoryItem class which represents parts in the Vehicle Service Management System.
+ Each item has a unique ID, part name, quantity, price, and status.
+Author: Trenser
+Date: 19-May-2026
+*/
+
+
#pragma once
#include
#include "Enums.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Invoice.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Invoice.cpp
index 507f274..f15acda 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Invoice.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Invoice.cpp
@@ -1,7 +1,26 @@
+/*
+File: Invoice.cpp
+Description: Implements the Invoice class which represents an invoice in the Vehicle Service Management System.
+ Provides constructors, accessors, and mutators for invoice details such as ID, booking, costs,
+ discount percentage, total amount, payment details, and status.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "Invoice.h"
int Invoice::m_uid = 0;
+/*
+Function: Invoice
+Description: Default constructor that initializes a new invoice with a unique ID,
+ null booking, zero costs, zero discount, zero total amount,
+ and default payment method and status.
+Parameters:
+ - None
+Returns:
+ - A new Invoice object.
+*/
Invoice::Invoice()
: m_id("INV" + std::to_string(++m_uid)),
m_booking(nullptr),
@@ -12,6 +31,24 @@ Invoice::Invoice()
m_paymentMethod(util::PaymentMode()),
m_status(util::PaymentStatus()) {}
+/*
+Function: Invoice
+Description: Parameterized constructor that initializes a new invoice with a unique ID and specified details.
+Parameters:
+ - bookingId: ID of the associated service booking.
+ - booking: Pointer to the ServiceBooking object.
+ - invoiceDate: Timestamp of when the invoice was created.
+ - laborCost: Cost of labor for the service.
+ - parts: Map of inventory items used in the service.
+ - partsCost: Total cost of parts.
+ - discountPercentage: Discount applied to the invoice.
+ - totalAmount: Final total amount after discount.
+ - paymentDate: Timestamp of when payment was made.
+ - paymentMethod: Payment mode (ONLINE/OFFLINE).
+ - status: Payment status (PENDING/COMPLETED).
+Returns:
+ - A new Invoice object.
+*/
Invoice::Invoice(
const std::string& bookingId,
ServiceBooking* booking,
@@ -39,122 +76,290 @@ Invoice::Invoice(
m_paymentMethod(paymentMethod),
m_status(status) {}
+/*
+Function: getId
+Description: Retrieves the unique ID of the invoice.
+Returns:
+ - const std::string& representing the invoice ID.
+*/
const std::string& Invoice::getId() const
{
return m_id;
}
+/*
+Function: getBookingId
+Description: Retrieves the booking ID associated with the invoice.
+Returns:
+ - const std::string& representing the booking ID.
+*/
const std::string& Invoice::getBookingId() const
{
return m_bookingId;
}
+/*
+Function: getBooking
+Description: Retrieves the pointer to the associated ServiceBooking.
+Returns:
+ - ServiceBooking* representing the booking.
+*/
ServiceBooking* Invoice::getBooking() const
{
return m_booking;
}
+/*
+Function: getInvoiceDate
+Description: Retrieves the timestamp of the invoice creation date.
+Returns:
+ - const util::Timestamp& representing the invoice date.
+*/
const util::Timestamp& Invoice::getInvoiceDate() const
{
return m_invoiceDate;
}
+/*
+Function: getLaborCost
+Description: Retrieves the labor cost associated with the invoice.
+Returns:
+ - double representing the labor cost.
+*/
double Invoice::getLaborCost() const
{
return m_laborCost;
}
+/*
+Function: getParts
+Description: Retrieves the map of inventory items used in the service.
+Returns:
+ - const util::Map& representing the parts.
+*/
const util::Map& Invoice::getParts() const
{
return m_parts;
}
+/*
+Function: getPartsCost
+Description: Retrieves the total cost of parts used in the service.
+Returns:
+ - double representing the parts cost.
+*/
double Invoice::getPartsCost() const
{
return m_partsCost;
}
+/*
+Function: getDiscountPercentage
+Description: Retrieves the discount percentage applied to the invoice.
+Returns:
+ - double representing the discount percentage.
+*/
double Invoice::getDiscountPercentage() const
{
return m_discountPercentage;
}
+/*
+Function: getTotalAmount
+Description: Retrieves the total amount of the invoice after discount.
+Returns:
+ - double representing the total amount.
+*/
double Invoice::getTotalAmount() const
{
return m_totalAmount;
}
+/*
+Function: getPaymentDate
+Description: Retrieves the timestamp of the payment date.
+Returns:
+ - const util::Timestamp& representing the payment date.
+*/
const util::Timestamp& Invoice::getPaymentDate() const
{
return m_paymentDate;
}
+/*
+Function: getPaymentMethod
+Description: Retrieves the payment mode used for the invoice.
+Returns:
+ - util::PaymentMode representing the payment method.
+*/
util::PaymentMode Invoice::getPaymentMethod() const
{
return m_paymentMethod;
}
+/*
+Function: getStatus
+Description: Retrieves the payment status of the invoice.
+Returns:
+ - util::PaymentStatus representing the payment status.
+*/
util::PaymentStatus Invoice::getStatus() const
{
return m_status;
}
+/*
+Function: setId
+Description: Sets the unique ID of the invoice.
+Parameters:
+ - id: New invoice ID string.
+Returns:
+ - void
+*/
void Invoice::setId(const std::string& id)
{
m_id = id;
}
+/*
+Function: setBookingId
+Description: Sets the booking ID associated with the invoice.
+Parameters:
+ - bookingId: New booking ID string.
+Returns:
+ - void
+*/
void Invoice::setBookingId(const std::string& bookingId)
{
m_bookingId = bookingId;
}
+/*
+Function: setBooking
+Description: Sets the associated ServiceBooking pointer.
+Parameters:
+ - booking: Pointer to the ServiceBooking object.
+Returns:
+ - void
+*/
void Invoice::setBooking(ServiceBooking* booking)
{
m_booking = booking;
}
+/*
+Function: setInvoiceDate
+Description: Sets the invoice creation date.
+Parameters:
+ - invoiceDate: New timestamp for the invoice date.
+Returns:
+ - void
+*/
void Invoice::setInvoiceDate(const util::Timestamp& invoiceDate)
{
m_invoiceDate = invoiceDate;
}
+/*
+Function: setLaborCost
+Description: Sets the labor cost for the invoice.
+Parameters:
+ - laborCost: New labor cost value.
+Returns:
+ - void
+*/
void Invoice::setLaborCost(double laborCost)
{
m_laborCost = laborCost;
}
+/*
+Function: setParts
+Description: Sets the inventory items used in the service.
+Parameters:
+ - parts: Map of inventory items.
+Returns:
+ - void
+*/
void Invoice::setParts(const util::Map& parts)
{
m_parts = parts;
}
+/*
+Function: setPartsCost
+Description: Sets the total cost of parts used in the service.
+Parameters:
+ - partsCost: New parts cost value.
+Returns:
+ - void
+*/
void Invoice::setPartsCost(double partsCost)
{
m_partsCost = partsCost;
}
+/*
+Function: setDiscountPercentage
+Description: Sets the discount percentage applied to the invoice.
+Parameters:
+ - discountPercentage: New discount percentage value.
+Returns:
+ - void
+*/
void Invoice::setDiscountPercentage(double discountPercentage)
{
m_discountPercentage = discountPercentage;
}
+/*
+Function: setTotalAmount
+Description: Sets the total amount of the invoice.
+Parameters:
+ - totalAmount: New total amount value.
+Returns:
+ - void
+*/
void Invoice::setTotalAmount(double totalAmount)
{
m_totalAmount = totalAmount;
}
+/*
+Function: setPaymentDate
+Description: Sets the payment date for the invoice.
+Parameters:
+ - paymentDate: New timestamp for the payment date.
+Returns:
+ - void
+*/
void Invoice::setPaymentDate(const util::Timestamp& paymentDate)
{
m_paymentDate = paymentDate;
}
+/*
+Function: setPaymentMethod
+Description: Sets the payment mode for the invoice.
+Parameters:
+ - paymentMethod: New payment mode value.
+Returns:
+ - void
+*/
void Invoice::setPaymentMethod(util::PaymentMode paymentMethod)
{
m_paymentMethod = paymentMethod;
}
+/*
+Function: setStatus
+Description: Sets the payment status of the invoice.
+Parameters:
+ - status: New payment status value.
+Returns:
+ - void
+*/
void Invoice::setStatus(util::PaymentStatus status)
{
m_status = status;
-}
+}
\ No newline at end of file
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Invoice.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Invoice.h
index f78f7c9..5a540b0 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Invoice.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Invoice.h
@@ -1,3 +1,12 @@
+/*
+File: Invoice.h
+Description: Declares the Invoice class which represents billing details for a service booking in the Vehicle Service Management System.
+ Each invoice includes booking information, labor cost, parts used, discount percentage, total amount, payment details, and status.
+Author: Trenser
+Date: 19-May-2026
+*/
+
+
#pragma once
#include
#include "Map.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.cpp
index 7e441f2..b626891 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.cpp
@@ -12,10 +12,12 @@ int JobCard::m_uid = 0;
/*
Function: JobCard
-Description: Default constructor that initializes a new job card with
- a unique ID and default values.
-Parameter: None
-Return type: Constructor
+Description: Default constructor that initializes a new job card with a unique ID,
+ null booking, null service, null technician, and default job status.
+Parameters:
+ - None
+Returns:
+ - A new JobCard object.
*/
JobCard::JobCard()
: m_id("JC" + std::to_string(++m_uid)),
@@ -62,9 +64,9 @@ JobCard::JobCard(const std::string& bookingId,
/*
Function: getId
-Description: Retrieves the unique identifier of the job card.
-Parameter: None
-Return type: const std::string&
+Description: Retrieves the unique ID of the job card.
+Returns:
+ - const std::string& representing the job card ID.
*/
const std::string& JobCard::getId() const
{
@@ -74,8 +76,8 @@ const std::string& JobCard::getId() const
/*
Function: getBookingId
Description: Retrieves the booking ID associated with the job card.
-Parameter: None
-Return type: const std::string&
+Returns:
+ - const std::string& representing the booking ID.
*/
const std::string& JobCard::getBookingId() const
{
@@ -84,9 +86,9 @@ const std::string& JobCard::getBookingId() const
/*
Function: getBooking
-Description: Retrieves the booking object associated with the job card.
-Parameter: None
-Return type: ServiceBooking*
+Description: Retrieves the pointer to the associated ServiceBooking.
+Returns:
+ - ServiceBooking* representing the booking.
*/
ServiceBooking* JobCard::getBooking() const
{
@@ -95,9 +97,9 @@ ServiceBooking* JobCard::getBooking() const
/*
Function: getService
-Description: Retrieves the service object associated with the job card.
-Parameter: None
-Return type: Service*
+Description: Retrieves the pointer to the associated Service.
+Returns:
+ - Service* representing the service.
*/
Service* JobCard::getService() const
{
@@ -107,8 +109,8 @@ Service* JobCard::getService() const
/*
Function: getServiceId
Description: Retrieves the service ID associated with the job card.
-Parameter: None
-Return type: const std::string&
+Returns:
+ - const std::string& representing the service ID.
*/
const std::string& JobCard::getServiceId() const
{
@@ -117,9 +119,9 @@ const std::string& JobCard::getServiceId() const
/*
Function: getTechnicianId
-Description: Retrieves the technician ID assigned to the job card.
-Parameter: None
-Return type: const std::string&
+Description: Retrieves the technician ID associated with the job card.
+Returns:
+ - const std::string& representing the technician ID.
*/
const std::string& JobCard::getTechnicianId() const
{
@@ -128,9 +130,9 @@ const std::string& JobCard::getTechnicianId() const
/*
Function: getTechnician
-Description: Retrieves the technician object assigned to the job card.
-Parameter: None
-Return type: User*
+Description: Retrieves the pointer to the assigned technician.
+Returns:
+ - User* representing the technician.
*/
User* JobCard::getTechnician() const
{
@@ -139,9 +141,9 @@ User* JobCard::getTechnician() const
/*
Function: getAssignedDate
-Description: Retrieves the date when the job was assigned.
-Parameter: None
-Return type: const util::Timestamp&
+Description: Retrieves the timestamp of when the job was assigned.
+Returns:
+ - const util::Timestamp& representing the assigned date.
*/
const util::Timestamp& JobCard::getAssignedDate() const
{
@@ -161,9 +163,9 @@ util::ServiceJobStatus JobCard::getStatus() const
/*
Function: getCompletionDate
-Description: Retrieves the completion date of the job card.
-Parameter: None
-Return type: const util::Timestamp&
+Description: Retrieves the timestamp of when the job was completed.
+Returns:
+ - const util::Timestamp& representing the completion date.
*/
const util::Timestamp& JobCard::getCompletionDate() const
{
@@ -172,9 +174,11 @@ const util::Timestamp& JobCard::getCompletionDate() const
/*
Function: setId
-Description: Sets the unique identifier of the job card.
-Parameter: const std::string& id - new job card ID
-Return type: void
+Description: Sets the unique ID of the job card.
+Parameters:
+ - id: New job card ID string.
+Returns:
+ - void
*/
void JobCard::setId(const std::string& id)
{
@@ -183,9 +187,11 @@ void JobCard::setId(const std::string& id)
/*
Function: setBookingId
-Description: Sets the booking ID for the job card.
-Parameter: const std::string& bookingId - new booking ID
-Return type: void
+Description: Sets the booking ID associated with the job card.
+Parameters:
+ - bookingId: New booking ID string.
+Returns:
+ - void
*/
void JobCard::setBookingId(const std::string& bookingId)
{
@@ -194,9 +200,11 @@ void JobCard::setBookingId(const std::string& bookingId)
/*
Function: setBooking
-Description: Sets the booking object for the job card.
-Parameter: ServiceBooking* booking - pointer to the booking object
-Return type: void
+Description: Sets the associated ServiceBooking pointer.
+Parameters:
+ - booking: Pointer to the ServiceBooking object.
+Returns:
+ - void
*/
void JobCard::setBooking(ServiceBooking* booking)
{
@@ -205,9 +213,11 @@ void JobCard::setBooking(ServiceBooking* booking)
/*
Function: setService
-Description: Sets the service object for the job card.
-Parameter: Service* service - pointer to the service object
-Return type: void
+Description: Sets the associated Service pointer.
+Parameters:
+ - service: Pointer to the Service object.
+Returns:
+ - void
*/
void JobCard::setService(Service* service)
{
@@ -216,9 +226,11 @@ void JobCard::setService(Service* service)
/*
Function: setServiceId
-Description: Sets the service ID for the job card.
-Parameter: const std::string& serviceId - new service ID
-Return type: void
+Description: Sets the service ID associated with the job card.
+Parameters:
+ - serviceId: New service ID string.
+Returns:
+ - void
*/
void JobCard::setServiceId(const std::string& serviceId)
{
@@ -227,9 +239,11 @@ void JobCard::setServiceId(const std::string& serviceId)
/*
Function: setTechnicianId
-Description: Sets the technician ID for the job card.
-Parameter: const std::string& technicianId - new technician ID
-Return type: void
+Description: Sets the technician ID associated with the job card.
+Parameters:
+ - technicianId: New technician ID string.
+Returns:
+ - void
*/
void JobCard::setTechnicianId(const std::string& technicianId)
{
@@ -238,9 +252,11 @@ void JobCard::setTechnicianId(const std::string& technicianId)
/*
Function: setTechnician
-Description: Sets the technician object for the job card.
-Parameter: User* technician - pointer to the technician object
-Return type: void
+Description: Sets the pointer to the assigned technician.
+Parameters:
+ - technician: Pointer to the User object.
+Returns:
+ - void
*/
void JobCard::setTechnician(User* technician)
{
@@ -249,9 +265,11 @@ void JobCard::setTechnician(User* technician)
/*
Function: setAssignedDate
-Description: Sets the assigned date for the job card.
-Parameter: const util::Timestamp& assignedDate - new assigned date
-Return type: void
+Description: Sets the timestamp of when the job was assigned.
+Parameters:
+ - assignedDate: New timestamp for the assigned date.
+Returns:
+ - void
*/
void JobCard::setAssignedDate(const util::Timestamp& assignedDate)
{
@@ -271,9 +289,11 @@ void JobCard::setStatus(util::ServiceJobStatus status)
/*
Function: setCompletionDate
-Description: Sets the completion date for the job card.
-Parameter: const util::Timestamp& completionDate - new completion date
-Return type: void
+Description: Sets the timestamp of when the job was completed.
+Parameters:
+ - completionDate: New timestamp for the completion date.
+Returns:
+ - void
*/
void JobCard::setCompletionDate(const util::Timestamp& completionDate)
{
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Notification.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Notification.cpp
index dc3ed1d..353bcb2 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Notification.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Notification.cpp
@@ -1,11 +1,39 @@
+/*
+File: Notification.cpp
+Description: Implements the Notification class which represents system notifications in the Vehicle Service Management System.
+ Provides constructors, accessors, and mutators for notification details such as ID, recipient, title, message, and timestamp.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "Notification.h"
int Notification::m_uid = 0;
+/*
+Function: Notification
+Description: Default constructor that initializes a new notification with a unique ID and null recipient.
+Parameters:
+ - None
+Returns:
+ - A new Notification object.
+*/
Notification::Notification()
: m_id("NOT" + std::to_string(++m_uid)),
m_recipient(nullptr) {}
+/*
+Function: Notification
+Description: Parameterized constructor that initializes a new notification with a unique ID and specified details.
+Parameters:
+ - recipientUserId: ID of the recipient user.
+ - recipient: Pointer to the User object representing the recipient.
+ - title: Title of the notification.
+ - message: Message content of the notification.
+ - createdAt: Timestamp of when the notification was created.
+Returns:
+ - A new Notification object.
+*/
Notification::Notification(const std::string& recipientUserId, User* recipient, const std::string& title, const std::string& message, const util::Timestamp& createdAt)
: m_id("NOT" + std::to_string(++m_uid)),
m_recipientUserId(recipientUserId),
@@ -14,61 +42,145 @@ Notification::Notification(const std::string& recipientUserId, User* recipient,
m_message(message),
m_createdAt(createdAt) {}
+/*
+Function: getId
+Description: Retrieves the unique ID of the notification.
+Returns:
+ - const std::string& representing the notification ID.
+*/
const std::string& Notification::getId() const
{
return m_id;
}
+/*
+Function: getRecipientUserId
+Description: Retrieves the recipient user ID associated with the notification.
+Returns:
+ - const std::string& representing the recipient user ID.
+*/
const std::string& Notification::getRecipientUserId() const
{
return m_recipientUserId;
}
+/*
+Function: getRecipient
+Description: Retrieves the pointer to the recipient user.
+Returns:
+ - User* representing the recipient.
+*/
User* Notification::getRecipient() const
{
return m_recipient;
}
+/*
+Function: getTitle
+Description: Retrieves the title of the notification.
+Returns:
+ - const std::string& representing the notification title.
+*/
const std::string& Notification::getTitle() const
{
return m_title;
}
+/*
+Function: getMessage
+Description: Retrieves the message content of the notification.
+Returns:
+ - const std::string& representing the notification message.
+*/
const std::string& Notification::getMessage() const
{
return m_message;
}
+/*
+Function: getCreatedAt
+Description: Retrieves the timestamp of when the notification was created.
+Returns:
+ - const util::Timestamp& representing the creation timestamp.
+*/
const util::Timestamp& Notification::getCreatedAt() const
{
return m_createdAt;
}
+/*
+Function: setId
+Description: Sets the unique ID of the notification.
+Parameters:
+ - id: New notification ID string.
+Returns:
+ - void
+*/
void Notification::setId(const std::string& id)
{
m_id = id;
}
+/*
+Function: setRecipientUserId
+Description: Sets the recipient user ID for the notification.
+Parameters:
+ - recipientUserId: New recipient user ID string.
+Returns:
+ - void
+*/
void Notification::setRecipientUserId(const std::string& recipientUserId)
{
m_recipientUserId = recipientUserId;
}
+/*
+Function: setRecipient
+Description: Sets the recipient user pointer for the notification.
+Parameters:
+ - recipient: Pointer to the User object.
+Returns:
+ - void
+*/
void Notification::setRecipient(User* recipient)
{
m_recipient = recipient;
}
+/*
+Function: setTitle
+Description: Sets the title of the notification.
+Parameters:
+ - title: New notification title string.
+Returns:
+ - void
+*/
void Notification::setTitle(const std::string& title)
{
m_title = title;
}
+/*
+Function: setMessage
+Description: Sets the message content of the notification.
+Parameters:
+ - message: New notification message string.
+Returns:
+ - void
+*/
void Notification::setMessage(const std::string& message)
{
m_message = message;
}
+/*
+Function: setCreatedAt
+Description: Sets the timestamp of when the notification was created.
+Parameters:
+ - createdAt: New timestamp value.
+Returns:
+ - void
+*/
void Notification::setCreatedAt(const util::Timestamp& createdAt)
{
m_createdAt = createdAt;
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Notification.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Notification.h
index f86499e..0ba780b 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Notification.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Notification.h
@@ -1,3 +1,11 @@
+/*
+File: Notification.h
+Description: Declares the Notification class which represents system messages sent to users in the Vehicle Service Management System.
+ Each notification includes a unique ID, recipient details, title, message content, and timestamp of creation.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include
#include "Timestamp.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.cpp
index fa7f509..02fe9ea 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.cpp
@@ -1,12 +1,40 @@
+/*
+File: Service.cpp
+Description: Implements the Service class which represents a vehicle service in the Vehicle Service Management System.
+ Provides constructors, accessors, and mutators for service details such as ID, name, required inventory items,
+ labor cost, and state.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "Service.h"
int Service::m_uid = 0;
+/*
+Function: Service
+Description: Default constructor that initializes a new service with a unique ID,
+ active state, and zero labor cost.
+Parameters:
+ - None
+Returns:
+ - A new Service object.
+*/
Service::Service()
: m_id("SRV" + std::to_string(++m_uid)),
m_status(util::State::ACTIVE),
m_laborCost(0.0) {}
+/*
+Function: Service
+Description: Parameterized constructor that initializes a new service with a unique ID and specified details.
+Parameters:
+ - name: Name of the service.
+ - requiredInventoryItems: Map of inventory items required for the service.
+ - laborCost: Labor cost associated with the service.
+Returns:
+ - A new Service object.
+*/
Service::Service(const std::string& name, const util::Map& requiredInventoryItems, double laborCost)
: m_id("SRV" + std::to_string(++m_uid)),
m_name(name),
@@ -14,51 +42,121 @@ Service::Service(const std::string& name, const util::Map& representing the required inventory items.
+*/
const util::Map& Service::getRequiredInventoryItems() const
{
return m_requiredInventoryItems;
}
+/*
+Function: getLaborCost
+Description: Retrieves the labor cost associated with the service.
+Returns:
+ - double representing the labor cost.
+*/
double Service::getLaborCost() const
{
return m_laborCost;
}
+/*
+Function: getState
+Description: Retrieves the current state (ACTIVE/INACTIVE) of the service.
+Returns:
+ - util::State representing the service state.
+*/
util::State Service::getState() const
{
return m_status;
}
+/*
+Function: setId
+Description: Sets the unique ID of the service.
+Parameters:
+ - id: New service ID string.
+Returns:
+ - void
+*/
void Service::setId(const std::string& id)
{
m_id = id;
}
+/*
+Function: setName
+Description: Sets the name of the service.
+Parameters:
+ - name: New service name string.
+Returns:
+ - void
+*/
void Service::setName(const std::string& name)
{
m_name = name;
}
+/*
+Function: setRequiredInventoryItems
+Description: Sets the inventory items required for the service.
+Parameters:
+ - requiredInventoryItems: Map of inventory items.
+Returns:
+ - void
+*/
void Service::setRequiredInventoryItems(const util::Map& requiredInventoryItems)
{
m_requiredInventoryItems = requiredInventoryItems;
}
+/*
+Function: setLaborCost
+Description: Sets the labor cost for the service.
+Parameters:
+ - laborCost: New labor cost value.
+Returns:
+ - void
+*/
void Service::setLaborCost(double laborCost)
{
m_laborCost = laborCost;
}
+/*
+Function: setState
+Description: Sets the state (ACTIVE/INACTIVE) of the service.
+Parameters:
+ - status: New state value.
+Returns:
+ - void
+*/
void Service::setState(util::State status)
{
m_status = status;
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.h
index b0d3175..7d15ebe 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/Service.h
@@ -1,3 +1,12 @@
+/*
+File: Service.h
+Description: Declares the Service class which represents a vehicle service in the Vehicle Service Management System.
+ Each service includes a unique ID, name, required inventory items, labor cost, and status.
+Author: Trenser
+Date: 19-May-2026
+*/
+
+
#pragma once
#include
#include "Map.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.cpp
index 462c370..41b7700 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.cpp
@@ -12,10 +12,12 @@ int ServiceBooking::m_uid = 0;
/*
Function: ServiceBooking
-Description: Default constructor that initializes a new service booking
- with a unique ID, no customer, and zero discount.
-Parameter: None
-Return type: Constructor
+Description: Default constructor that initializes a new service booking with a unique ID,
+ null customer, and zero discount percentage.
+Parameters:
+ - None
+Returns:
+ - A new ServiceBooking object.
*/
ServiceBooking::ServiceBooking()
: m_id("SRV" + std::to_string(++m_uid)),
@@ -49,8 +51,6 @@ ServiceBooking::ServiceBooking(
const std::string& vehicleNumber,
const std::string& vehicleBrand,
const std::string& vehicleModel,
- const std::string& assignedTechnicianId,
- User* assignedTechnician,
double discountPercentage
)
: m_id("SRV" + std::to_string(++m_uid)),
@@ -69,9 +69,9 @@ ServiceBooking::ServiceBooking(
/*
Function: getId
-Description: Retrieves the unique identifier of the service booking.
-Parameter: None
-Return type: const std::string&
+Description: Retrieves the unique ID of the service booking.
+Returns:
+ - const std::string& representing the booking ID.
*/
const std::string& ServiceBooking::getId() const
{
@@ -81,8 +81,8 @@ const std::string& ServiceBooking::getId() const
/*
Function: getStatus
Description: Retrieves the current status of the service booking.
-Parameter: None
-Return type: util::ServiceJobStatus
+Returns:
+ - util::ServiceJobStatus representing the booking status.
*/
util::ServiceJobStatus ServiceBooking::getStatus() const
{
@@ -91,9 +91,9 @@ util::ServiceJobStatus ServiceBooking::getStatus() const
/*
Function: getServices
-Description: Retrieves the services associated with the booking.
-Parameter: None
-Return type: const util::Map&
+Description: Retrieves the map of services included in the booking.
+Returns:
+ - const util::Map& representing the services.
*/
const util::Map& ServiceBooking::getServices() const
{
@@ -103,8 +103,8 @@ const util::Map& ServiceBooking::getServices() const
/*
Function: getCustomerId
Description: Retrieves the customer ID associated with the booking.
-Parameter: None
-Return type: const std::string&
+Returns:
+ - const std::string& representing the customer ID.
*/
const std::string& ServiceBooking::getCustomerId() const
{
@@ -113,9 +113,9 @@ const std::string& ServiceBooking::getCustomerId() const
/*
Function: getCustomer
-Description: Retrieves the customer object associated with the booking.
-Parameter: None
-Return type: User*
+Description: Retrieves the pointer to the associated customer.
+Returns:
+ - User* representing the customer.
*/
User* ServiceBooking::getCustomer() const
{
@@ -124,9 +124,9 @@ User* ServiceBooking::getCustomer() const
/*
Function: getVehicleNumber
-Description: Retrieves the vehicle registration number for the booking.
-Parameter: None
-Return type: const std::string&
+Description: Retrieves the vehicle registration number.
+Returns:
+ - const std::string& representing the vehicle number.
*/
const std::string& ServiceBooking::getVehicleNumber() const
{
@@ -135,9 +135,9 @@ const std::string& ServiceBooking::getVehicleNumber() const
/*
Function: getVehicleBrand
-Description: Retrieves the brand of the vehicle for the booking.
-Parameter: None
-Return type: const std::string&
+Description: Retrieves the brand of the vehicle.
+Returns:
+ - const std::string& representing the vehicle brand.
*/
const std::string& ServiceBooking::getVehicleBrand() const
{
@@ -146,9 +146,9 @@ const std::string& ServiceBooking::getVehicleBrand() const
/*
Function: getVehicleModel
-Description: Retrieves the model of the vehicle for the booking.
-Parameter: None
-Return type: const std::string&
+Description: Retrieves the model of the vehicle.
+Returns:
+ - const std::string& representing the vehicle model.
*/
const std::string& ServiceBooking::getVehicleModel() const
{
@@ -157,9 +157,9 @@ const std::string& ServiceBooking::getVehicleModel() const
/*
Function: getAssignedTechnicianId
-Description: Retrieves the ID of the technician assigned to the booking.
-Parameter: None
-Return type: const std::string&
+Description: Retrieves the ID of the assigned technician.
+Returns:
+ - const std::string& representing the technician ID.
*/
const std::string& ServiceBooking::getAssignedTechnicianId() const
{
@@ -180,8 +180,8 @@ User* ServiceBooking::getAssignedTechnician() const
/*
Function: getDiscountPercentage
Description: Retrieves the discount percentage applied to the booking.
-Parameter: None
-Return type: double
+Returns:
+ - double representing the discount percentage.
*/
double ServiceBooking::getDiscountPercentage() const
{
@@ -190,9 +190,11 @@ double ServiceBooking::getDiscountPercentage() const
/*
Function: setId
-Description: Sets the unique identifier of the service booking.
-Parameter: const std::string& id - new booking ID
-Return type: void
+Description: Sets the unique ID of the service booking.
+Parameters:
+ - id: New booking ID string.
+Returns:
+ - void
*/
void ServiceBooking::setId(const std::string& id)
{
@@ -202,8 +204,10 @@ void ServiceBooking::setId(const std::string& id)
/*
Function: setStatus
Description: Sets the current status of the service booking.
-Parameter: const util::ServiceJobStatus& status - new booking status
-Return type: void
+Parameters:
+ - status: New booking status value.
+Returns:
+ - void
*/
void ServiceBooking::setStatus(const util::ServiceJobStatus& status)
{
@@ -212,9 +216,11 @@ void ServiceBooking::setStatus(const util::ServiceJobStatus& status)
/*
Function: setServices
-Description: Sets the services associated with the booking.
-Parameter: const util::Map& services - new services map
-Return type: void
+Description: Sets the services included in the booking.
+Parameters:
+ - services: Map of services.
+Returns:
+ - void
*/
void ServiceBooking::setServices(const util::Map& services)
{
@@ -223,9 +229,11 @@ void ServiceBooking::setServices(const util::Map& service
/*
Function: setCustomerId
-Description: Sets the customer ID for the booking.
-Parameter: const std::string& customerId - new customer ID
-Return type: void
+Description: Sets the customer ID associated with the booking.
+Parameters:
+ - customerId: New customer ID string.
+Returns:
+ - void
*/
void ServiceBooking::setCustomerId(const std::string& customerId)
{
@@ -234,9 +242,11 @@ void ServiceBooking::setCustomerId(const std::string& customerId)
/*
Function: setCustomer
-Description: Sets the customer object for the booking.
-Parameter: User* customer - pointer to the customer object
-Return type: void
+Description: Sets the pointer to the associated customer.
+Parameters:
+ - customer: Pointer to the User object.
+Returns:
+ - void
*/
void ServiceBooking::setCustomer(User* customer)
{
@@ -245,9 +255,11 @@ void ServiceBooking::setCustomer(User* customer)
/*
Function: setVehicleNumber
-Description: Sets the vehicle registration number for the booking.
-Parameter: const std::string& vehicleNumber - new vehicle number
-Return type: void
+Description: Sets the vehicle registration number.
+Parameters:
+ - vehicleNumber: New vehicle number string.
+Returns:
+ - void
*/
void ServiceBooking::setVehicleNumber(const std::string& vehicleNumber)
{
@@ -256,9 +268,11 @@ void ServiceBooking::setVehicleNumber(const std::string& vehicleNumber)
/*
Function: setVehicleBrand
-Description: Sets the brand of the vehicle for the booking.
-Parameter: const std::string& vehicleBrand - new vehicle brand
-Return type: void
+Description: Sets the brand of the vehicle.
+Parameters:
+ - vehicleBrand: New vehicle brand string.
+Returns:
+ - void
*/
void ServiceBooking::setVehicleBrand(const std::string& vehicleBrand)
{
@@ -267,9 +281,11 @@ void ServiceBooking::setVehicleBrand(const std::string& vehicleBrand)
/*
Function: setVehicleModel
-Description: Sets the model of the vehicle for the booking.
-Parameter: const std::string& vehicleModel - new vehicle model
-Return type: void
+Description: Sets the model of the vehicle.
+Parameters:
+ - vehicleModel: New vehicle model string.
+Returns:
+ - void
*/
void ServiceBooking::setVehicleModel(const std::string& vehicleModel)
{
@@ -278,9 +294,11 @@ void ServiceBooking::setVehicleModel(const std::string& vehicleModel)
/*
Function: setAssignedTechnicianId
-Description: Sets the ID of the technician assigned to the booking.
-Parameter: const std::string& assignedTechnicianId - new technician ID
-Return type: void
+Description: Sets the ID of the assigned technician.
+Parameters:
+ - assignedTechnicianId: New technician ID string.
+Returns:
+ - void
*/
void ServiceBooking::setAssignedTechnicianId(const std::string& assignedTechnicianId)
{
@@ -300,9 +318,11 @@ void ServiceBooking::setAssignedTechnician(User* assignedTechnician)
/*
Function: setDiscountPercentage
-Description: Sets the discount percentage for the booking.
-Parameter: double discountPercentage - new discount percentage
-Return type: void
+Description: Sets the discount percentage applied to the booking.
+Parameters:
+ - discountPercentage: New discount percentage value.
+Returns:
+ - void
*/
void ServiceBooking::setDiscountPercentage(double discountPercentage)
{
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.h
index e949188..48e3ba9 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.h
@@ -40,8 +40,6 @@ public:
const std::string& vehicleNumber,
const std::string& vehicleBrand,
const std::string& vehicleModel,
- const std::string& assignedTechnicianId,
- User* assignedTechnician,
double discountPercentage
);
const std::string& getId() const;
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.cpp
index 52d85a9..0b0fa58 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.cpp
@@ -1,14 +1,45 @@
+/*
+File: User.cpp
+Description: Implements the User class which represents system users in the Vehicle Service Management System.
+ Provides constructors, destructor, accessors, and mutators for user details such as ID, username,
+ password, name, phone, email, role, state, and notifications.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "User.h"
#include "Notification.h"
#include "Enums.h"
int User::m_uid = 0;
+/*
+Function: User
+Description: Default constructor that initializes a new user with a unique ID,
+ default role as CUSTOMER, and active state.
+Parameters:
+ - None
+Returns:
+ - A new User object.
+*/
User::User()
: m_id("USR" + std::to_string(++m_uid)),
m_type(util::UserType::CUSTOMER),
m_status(util::State::ACTIVE) {}
+/*
+Function: User
+Description: Parameterized constructor that initializes a new user with a unique ID and specified details.
+Parameters:
+ - userName: Username for login.
+ - password: Password for authentication.
+ - name: Full name of the user.
+ - phone: Phone number of the user.
+ - email: Email address of the user.
+ - role: Role of the user (CUSTOMER, ADMIN, TECHNICIAN, etc.).
+Returns:
+ - A new User object.
+*/
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)),
m_userName(userName),
@@ -19,6 +50,14 @@ User::User(const std::string& userName, const std::string& password, const std::
m_type(role),
m_status(util::State::ACTIVE) {}
+/*
+Function: ~User
+Description: Destructor that cleans up dynamically allocated notifications associated with the user.
+Parameters:
+ - None
+Returns:
+ - void
+*/
User::~User()
{
for (int index = 0; index < m_notifications.getSize(); index++)
@@ -27,96 +66,221 @@ User::~User()
}
}
+/*
+Function: getId
+Description: Retrieves the unique ID of the user.
+Returns:
+ - const std::string& representing the user ID.
+*/
const std::string& User::getId() const
{
return m_id;
}
+/*
+Function: getUserName
+Description: Retrieves the username of the user.
+Returns:
+ - const std::string& representing the username.
+*/
const std::string& User::getUserName() const
{
return m_userName;
}
+/*
+Function: getPassword
+Description: Retrieves the password of the user.
+Returns:
+ - const std::string& representing the password.
+*/
const std::string& User::getPassword() const
{
return m_password;
}
+/*
+Function: getName
+Description: Retrieves the full name of the user.
+Returns:
+ - const std::string& representing the name.
+*/
const std::string& User::getName() const
{
return m_name;
}
+/*
+Function: getPhone
+Description: Retrieves the phone number of the user.
+Returns:
+ - const std::string& representing the phone number.
+*/
const std::string& User::getPhone() const
{
return m_phone;
}
+/*
+Function: getEmail
+Description: Retrieves the email address of the user.
+Returns:
+ - const std::string& representing the email.
+*/
const std::string& User::getEmail() const
{
return m_email;
}
+/*
+Function: getNotifications
+Description: Retrieves the map of notifications associated with the user.
+Returns:
+ - util::Map& representing the notifications.
+*/
util::Map& User::getNotifications()
{
return m_notifications;
}
+/*
+Function: getUserType
+Description: Retrieves the role of the user.
+Returns:
+ - util::UserType representing the user role.
+*/
util::UserType User::getUserType() const
{
return m_type;
}
+/*
+Function: getState
+Description: Retrieves the current state (ACTIVE/INACTIVE) of the user.
+Returns:
+ - util::State representing the user state.
+*/
util::State User::getState() const
{
return m_status;
}
+/*
+Function: setId
+Description: Sets the unique ID of the user.
+Parameters:
+ - id: New user ID string.
+Returns:
+ - void
+*/
void User::setId(const std::string& id)
{
m_id = id;
}
+/*
+Function: setUserName
+Description: Sets the username of the user.
+Parameters:
+ - userName: New username string.
+Returns:
+ - void
+*/
void User::setUserName(const std::string& userName)
{
m_userName = userName;
}
+/*
+Function: setPassword
+Description: Sets the password of the user.
+Parameters:
+ - password: New password string.
+Returns:
+ - void
+*/
void User::setPassword(const std::string& password)
{
m_password = password;
}
+/*
+Function: setName
+Description: Sets the full name of the user.
+Parameters:
+ - name: New name string.
+Returns:
+ - void
+*/
void User::setName(const std::string& name)
{
m_name = name;
}
+/*
+Function: setPhone
+Description: Sets the phone number of the user.
+Parameters:
+ - phone: New phone number string.
+Returns:
+ - void
+*/
void User::setPhone(const std::string& phone)
{
m_phone = phone;
}
+/*
+Function: setEmail
+Description: Sets the email address of the user.
+Parameters:
+ - email: New email string.
+Returns:
+ - void
+*/
void User::setEmail(const std::string& email)
{
m_email = email;
}
+/*
+Function: addNotification
+Description: Adds a new notification to the user’s notification map.
+Parameters:
+ - notification: Pointer to the Notification object.
+Returns:
+ - void
+*/
void User::addNotification(Notification* notification)
{
- m_notifications.insert(notification->getId(), notification);
+ if (notification)
+ {
+ m_notifications.insert(notification->getId(), notification);
+ }
}
+/*
+Function: setRole
+Description: Sets the role of the user.
+Parameters:
+ - role: New user role value.
+Returns:
+ - void
+*/
void User::setRole(util::UserType role)
{
m_type = role;
}
+/*
+Function: setState
+Description: Sets the state (ACTIVE/INACTIVE) of the user.
+Parameters:
+ - status: New state value.
+Returns:
+ - void
+*/
void User::setState(util::State status)
{
m_status = status;
}
-
-void User::update(Notification* notification)
-{
-}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.h
index bde21e1..1c5c215 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/User.h
@@ -1,3 +1,12 @@
+/*
+File: User.h
+Description: Declares the User class which represents system users in the Vehicle Service Management System.
+ Each user has a unique ID, credentials, personal details, notifications, role type, and status.
+ The User class also implements the Observer interface to handle notifications.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include
#include "Map.h"
@@ -38,8 +47,7 @@ public:
void setName(const std::string& name);
void setPhone(const std::string& phone);
void setEmail(const std::string& email);
- void addNotification(Notification* notification);
+ void addNotification(Notification* notification) override;
void setRole(util::UserType role);
void setState(util::State status);
- void update(Notification* notification) override;
};
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp
index ef48930..d3635e7 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp
@@ -7,43 +7,50 @@ Author: Trenser
Date:19-May-2026
*/
#include "InventoryManagementService.h"
+#include "Vector.h"
+#include "Enums.h"
#include "InventoryItem.h"
+#include "Config.h"
+#include "User.h"
#include "Factory.h"
+#include "Timestamp.h"
+
+util::Map InventoryManagementService::m_observers{};
/*
Function: addInventoryItem
Description: Creates a new inventory item using the Factory and inserts it
- into the DataStore.
+ into the DataStore.
Parameter: const std::string& partName - name of the part
- int quantity - initial quantity of the part
- double price - price of the part
+ int quantity - initial quantity of the part
+ double price - price of the part
Return type: void
*/
void InventoryManagementService::addInventoryItem(const std::string& partName, int quantity, double price)
{
- InventoryItem* newItem = Factory::getObject(partName, quantity, price);
- m_dataStore.getInventoryItems().insert(newItem->getId(), newItem);
+ InventoryItem* newItem = Factory::getObject(partName, quantity, price);
+ m_dataStore.getInventoryItems().insert(newItem->getId(), newItem);
}
/*
Function: addInventoryItemStock
Description: Increases the stock quantity of an existing inventory item.
Parameter: const std::string& selectedItemId - ID of the inventory item
- int quantity - quantity to add
+ int quantity - quantity to add
Return type: void
*/
void InventoryManagementService::addInventoryItemStock(const std::string& selectedItemId, int quantity)
{
- int index = m_dataStore.getInventoryItems().find(selectedItemId);
- if (index != -1)
- {
- InventoryItem* item = m_dataStore.getInventoryItems().getValueAt(index);
- if (item != nullptr)
- {
- int totalQuantity = item->getQuantity() + quantity;
- item->setQuantity(totalQuantity);
- }
- }
+ int index = m_dataStore.getInventoryItems().find(selectedItemId);
+ if (index != -1)
+ {
+ InventoryItem* item = m_dataStore.getInventoryItems().getValueAt(index);
+ if (item != nullptr)
+ {
+ int totalQuantity = item->getQuantity() + quantity;
+ item->setQuantity(totalQuantity);
+ }
+ }
}
/*
@@ -65,15 +72,15 @@ Return type: void
*/
void InventoryManagementService::removeInventoryItem(const std::string& inventoryItemID)
{
- int index = m_dataStore.getInventoryItems().find(inventoryItemID);
- if (index != -1)
- {
- InventoryItem* item = m_dataStore.getInventoryItems().getValueAt(index);
- if (item != nullptr)
- {
- item->setState(util::State::INACTIVE);
- }
- }
+ int index = m_dataStore.getInventoryItems().find(inventoryItemID);
+ if (index != -1)
+ {
+ InventoryItem* item = m_dataStore.getInventoryItems().getValueAt(index);
+ if (item != nullptr)
+ {
+ item->setState(util::State::INACTIVE);
+ }
+ }
}
/*
@@ -84,10 +91,108 @@ Return type: InventoryItem*
*/
InventoryItem* InventoryManagementService::getInventoryItem(const std::string& inventoryItemID)
{
- int index = m_dataStore.getInventoryItems().find(inventoryItemID);
- if (index != -1)
- {
- return m_dataStore.getInventoryItems().getValueAt(index);
- }
- return nullptr;
-}
\ No newline at end of file
+ int index = m_dataStore.getInventoryItems().find(inventoryItemID);
+ if (index != -1)
+ {
+ return m_dataStore.getInventoryItems().getValueAt(index);
+ }
+ return nullptr;
+}
+
+void InventoryManagementService::attach(User* user)
+{
+ if (user)
+ {
+ const std::string& userID = user->getId();
+ if (m_observers.find(userID) == -1)
+ {
+ m_observers[userID] = user;
+ }
+ }
+}
+
+void InventoryManagementService::detach(User* user)
+{
+ if (user)
+ {
+ const std::string& userID = user->getId();
+ if (m_observers.find(userID) != -1)
+ {
+ m_observers.remove(userID);
+ }
+ }
+}
+
+void InventoryManagementService::sendNotification(User* user, const std::string& title, const std::string& message)
+{
+ if (user)
+ {
+ if (m_observers.find(user->getId()) != -1)
+ {
+ Notification* notification =
+ Factory::getObject(
+ user->getId(),
+ user,
+ "InventoryManagementService: " + title,
+ message,
+ util::Timestamp()
+ );
+ if (notification)
+ {
+ user->addNotification(notification);
+ }
+ else
+ {
+ throw std::runtime_error("Failed to create notification");
+ }
+ }
+ }
+}
+
+static void sendLowStockAlertsToAdmins(InventoryManagementService& inventoryManagementService, const InventoryItem* inventoryItem, const util::Vector& adminUsers)
+{
+ int adminUsersSize = adminUsers.getSize();
+ for (int index = 0; index < adminUsersSize; index++)
+ {
+ inventoryManagementService.sendNotification(
+ adminUsers[index],
+ "Low Stock Alert",
+ "The inventory item with ID " + inventoryItem->getId() +
+ " has very low quantity in the inventory"
+ );
+ }
+}
+
+void InventoryManagementService::sendLowStockAlerts()
+{
+ auto& inventoryItems = m_dataStore.getInventoryItems();
+ if (inventoryItems.isEmpty())
+ {
+ return;
+ }
+ int inventoryItemsSize = inventoryItems.getSize();
+ auto& usersMap = m_dataStore.getUsers();
+ int usersMapSize = usersMap.getSize();
+ util::Vector adminUsers;
+ for (int index = 0; index < usersMapSize; index++)
+ {
+ User* user = usersMap.getValueAt(index);
+ if (user->getUserType() == util::UserType::ADMIN)
+ {
+ adminUsers.push_back(user);
+ }
+ }
+ int adminUsersSize = adminUsers.getSize();
+ if (adminUsersSize < 1)
+ {
+ throw std::runtime_error("The system has no admins present!");
+ }
+ for (int index = 0; index <= inventoryItemsSize; index++)
+ {
+ InventoryItem* inventoryItem = inventoryItems.getValueAt(index);
+ if (inventoryItem && inventoryItem->getQuantity() < config::threshold::INVENTORY_LOW_STOCK_THRESHOLD)
+ {
+ sendLowStockAlertsToAdmins(*this, inventoryItem, adminUsers);
+ }
+ }
+}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/NotificationManagementService.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/NotificationManagementService.h
index b193b1d..18d0dda 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/NotificationManagementService.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/NotificationManagementService.h
@@ -1,6 +1,15 @@
+/*
+File: NotificationManagementService.h
+Description: Declares the NotificationManagementService abstract class which defines the contract for managing notifications in the Vehicle Service Management System.
+ Implements the Subject interface and provides pure virtual methods for sending notifications and managing user subscriptions (attach/detach).
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include
#include "Subject.h"
+#include "Notification.h"
#include "User.h"
class NotificationManagementService : public Subject
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.cpp
index 094e104..5ace3d8 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.cpp
@@ -1,13 +1,28 @@
-#include "PaymentManagementService.h"
-#include "ServiceBooking.h"
-#include "Service.h"
-#include "InventoryItem.h"
-#include "Utility.h"
+/*
+File: PaymentManagementService.cpp
+Description: Implements the PaymentManagementService class which manages payment-related operations
+ in the Vehicle Service Management System. Provides functionality for attaching/detaching observers,
+ sending notifications, and issuing payment reminders based on invoice status and thresholds.
+Author: Trenser
+Date: 20-May-2026
+*/
+
+#include "Config.h"
+#include "Enums.h"
+#include
+#include "Enums.h"
#include "Factory.h"
-#include "Timestamp.h"
+#include "InventoryItem.h"
#include "Invoice.h"
#include "JobCard.h"
-#include "Enums.h"
+#include "PaymentManagementService.h"
+#include "Service.h"
+#include "ServiceBooking.h"
+#include "Timestamp.h"
+#include "User.h"
+#include "Utility.h"
+
+util::Map PaymentManagementService::m_observers{};
static void createInventoryItemsMap(util::Map& completeInventoryItemMapOfBooking, const Service* currentService)
{
@@ -91,4 +106,120 @@ void PaymentManagementService::completePayment(const std::string& invoiceID, uti
{
throw std::runtime_error("Payment failed: invalid invoice ID.");
}
+}
+
+/*
+Function: attach
+Description: Attaches a user as an observer to the PaymentManagementService for receiving notifications.
+Parameters:
+ - user: Pointer to the User object to be attached.
+Returns:
+ - void
+*/
+void PaymentManagementService::attach(User* user)
+{
+ if (user)
+ {
+ const std::string& userID = user->getId();
+ if (m_observers.find(userID) == -1)
+ {
+ m_observers[userID] = user;
+ }
+ }
+}
+
+/*
+Function: detach
+Description: Detaches a user from the observer list of the PaymentManagementService.
+Parameters:
+ - user: Pointer to the User object to be detached.
+Returns:
+ - void
+*/
+void PaymentManagementService::detach(User* user)
+{
+ if (user)
+ {
+ const std::string& userID = user->getId();
+ if (m_observers.find(userID) != -1)
+ {
+ m_observers.remove(userID);
+ }
+ }
+}
+
+/*
+Function: sendNotification
+Description: Sends a notification to a user if they are registered as an observer.
+Parameters:
+ - user: Pointer to the User object to receive the notification.
+ - title: Title of the notification.
+ - message: Message content of the notification.
+Returns:
+ - void
+Throws:
+ - std::runtime_error if notification creation fails.
+*/
+void PaymentManagementService::sendNotification(User* user, const std::string& title, const std::string& message)
+{
+ if (user)
+ {
+ if (m_observers.find(user->getId()) != -1)
+ {
+ Notification* notification =
+ Factory::getObject(
+ user->getId(),
+ user,
+ "PaymentManagementService: " + title,
+ message,
+ util::Timestamp()
+ );
+ if (notification)
+ {
+ user->addNotification(notification);
+ }
+ else
+ {
+ throw std::runtime_error("Failed to create notification");
+ }
+ }
+ }
+}
+
+/*
+Function: sendPaymentReminders
+Description: Iterates through all invoices in the datastore and sends payment reminders to customers
+ whose invoices are pending beyond the configured threshold duration.
+Parameters:
+ - None
+Returns:
+ - void
+*/
+void PaymentManagementService::sendPaymentReminders()
+{
+ auto& invoicesMap = m_dataStore.getInvoices();
+ int invoicesMapSize = invoicesMap.getSize();
+ for (int index = 0; index < invoicesMapSize; index++)
+ {
+ const Invoice* invoice = invoicesMap.getValueAt(index);
+ if (invoice && invoice->getStatus() == util::PaymentStatus::PENDING)
+ {
+ util::Timestamp invoiceCreationTimestamp = invoice->getInvoiceDate();
+ util::Timestamp currentTimestamp;
+ if (util::Timestamp::getDurationInHours(invoiceCreationTimestamp, currentTimestamp) >= config::threshold::PAYMENT_REMINDER_THRESHOLD_HOURS)
+ {
+ const ServiceBooking* serviceBooking = invoice->getBooking();
+ if (serviceBooking)
+ {
+ User* customer = serviceBooking->getCustomer();
+ if (customer)
+ {
+ sendNotification(customer,
+ "Payment Reminder",
+ "Your payment for Invoice ID " + invoice->getId() + " is still pending.Please complete the payment." + invoice->getId());
+ }
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.h
index 56a2fd2..c6e43a0 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.h
@@ -1,3 +1,12 @@
+/*
+File: PaymentManagementService.h
+Description: Declares the PaymentManagementService class which manages payment operations in the Vehicle Service Management System.
+ Provides functionality to generate invoices, retrieve customer invoices, complete payments, send payment reminders,
+ and handle notifications using the Observer pattern.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include
#include "Map.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp
index f63a516..a2c9768 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp
@@ -8,23 +8,21 @@ Date:19-May-2026
*/
#include
#include "AuthenticationManagementService.h"
-#include "AuthenticationManagementService.h"
-#include "Service.h"
-#include "ServiceBooking.h"
#include "ComboPackage.h"
-#include "Factory.h"
-#include "UserManagementService.h"
-#include "ServiceBooking.h"
-#include "Factory.h"
-#include "JobCard.h"
-#include "Timestamp.h"
-#include "Service.h"
#include "Enums.h"
+#include "Factory.h"
#include "InventoryItem.h"
-#include "AuthenticationManagementService.h"
-#include "PaymentManagementService.h"
+#include "JobCard.h"
#include "NotificationManagementService.h"
+#include "PaymentManagementService.h"
+#include "Service.h"
+#include "ServiceBooking.h"
+#include "ServiceManagementService.h"
+#include "Timestamp.h"
#include "User.h"
+#include "UserManagementService.h"
+
+util::Map ServiceManagementService::m_observers{};
util::Map ServiceManagementService::getServiceBookings()
{
@@ -514,3 +512,81 @@ void ServiceManagementService::removeComboPackage(const std::string& comboPackag
throw std::runtime_error("Combo package with ID '" + comboPackageID + "' not found.");
}
}
+
+/*
+Function: attach
+Description: Attaches a user as an observer to the ServiceManagementService for receiving notifications.
+Parameters:
+ - user: Pointer to the User object to be attached.
+Returns:
+ - void
+*/
+void ServiceManagementService::attach(User* user)
+{
+ if (user)
+ {
+ const std::string& userID = user->getId();
+ if (m_observers.find(userID) == -1)
+ {
+ m_observers[userID] = user;
+ }
+ }
+}
+
+/*
+Function: detach
+Description: Detaches a user from the observer list of the ServiceManagementService.
+Parameters:
+ - user: Pointer to the User object to be detached.
+Returns:
+ - void
+*/
+void ServiceManagementService::detach(User* user)
+{
+ if (user)
+ {
+ const std::string& userID = user->getId();
+ if (m_observers.find(userID) != -1)
+ {
+ m_observers.remove(userID);
+ }
+ }
+}
+
+/*
+Function: sendNotification
+Description: Sends a notification to a user if they are registered as an observer.
+Parameters:
+ - user: Pointer to the User object to receive the notification.
+ - title: Title of the notification.
+ - message: Message content of the notification.
+Returns:
+ - void
+Throws:
+ - std::runtime_error if notification creation fails.
+*/
+void ServiceManagementService::sendNotification(User* user, const std::string& title, const std::string& message)
+{
+ if (user)
+ {
+ if (m_observers.find(user->getId()) != -1)
+ {
+ Notification* notification =
+ Factory::getObject(
+ user->getId(),
+ user,
+ "ServiceManagementService: " + title,
+ message,
+ util::Timestamp()
+ );
+ if (notification)
+ {
+ user->addNotification(notification);
+ }
+ else
+ {
+ throw std::runtime_error("Failed to create notification");
+ }
+ }
+ }
+}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp
index 44a36d7..ee20286 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp
@@ -5,6 +5,7 @@ Description: Implementation file containing the method definitions of the
Author: Trenser
Date:19-May-2026
*/
+#include "UserManagementService.h"
#include "Config.h"
#include "Enums.h"
#include "Factory.h"
@@ -12,7 +13,7 @@ Date:19-May-2026
#include "PaymentManagementService.h"
#include "ServiceManagementService.h"
#include "User.h"
-#include "UserManagementService.h"
+#include "Vector.h"
#include
void UserManagementService::ensureAdminExists()
@@ -140,3 +141,65 @@ void UserManagementService::removeUser(const std::string& userID)
}
}
}
+
+/*
+Function: getUserNotifications
+Description: Retrieves all notifications associated with a given user ID.
+Parameters:
+ - userID: The unique ID of the user whose notifications are to be retrieved.
+Returns:
+ - util::Vector containing all notifications for the user.
+Throws:
+ - std::runtime_error if no user is found with the given UserID or if the User object is invalid.
+*/
+util::Vector UserManagementService::getUserNotifications(const std::string& userID)
+{
+ auto& usersMap = m_dataStore.getUsers();
+ if (usersMap.find(userID) == -1)
+ {
+ throw std::runtime_error("No user found with given UserID");
+ }
+ User* user = usersMap[userID];
+ if (user)
+ {
+ auto& notifications = user->getNotifications();
+ int numberOfNotifications = notifications.getSize();
+ util::Vector notificationsVector;
+ for (int index = 0; index < numberOfNotifications; index++)
+ {
+ notificationsVector.push_back(notifications.getValueAt(index));
+ }
+ return notificationsVector;
+ }
+ else
+ {
+ throw std::runtime_error("Invalid User object");
+ }
+}
+
+/*
+Function: deleteNotification
+Description: Deletes a specific notification associated with a given user ID.
+Parameters:
+ - notificationID: The unique ID of the notification to be deleted.
+ - userID: The unique ID of the user whose notification is to be deleted.
+Returns:
+ - void
+Throws:
+ - std::runtime_error if no user is found with the given UserID or if no notification is found with the given NotificationID.
+*/
+void UserManagementService::deleteNotification(const std::string& notificationID, const std::string& userID)
+{
+ auto& usersMap = m_dataStore.getUsers();
+ if (usersMap.find(userID) == -1)
+ {
+ throw std::runtime_error("No user found with given UserID");
+ }
+ User* user = usersMap[userID];
+ auto& notifications = user->getNotifications();
+ if (notifications.find(notificationID) == -1)
+ {
+ throw std::runtime_error("No notification found with given NotificationID");
+ }
+ notifications.remove(notificationID);
+}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.h
index 6e122de..d1e6367 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.h
@@ -24,7 +24,7 @@ public:
void updateUserDetails(const std::string& userID, const std::string& email, const std::string& phone);
util::Map getUsers();
util::Map getUsers(util::UserType type);
- User* getUser(const std::string& userID);
+ User* getUser (const std::string& userID);
void removeUser(const std::string& userID);
util::Vector getUserNotifications(const std::string& userID);
void deleteNotification(const std::string& notificationID, const std::string& userID);
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Config.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Config.h
index 38c7bed..e58012f 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Config.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Config.h
@@ -1,3 +1,11 @@
+/*
+File: Config.h
+Description: Defines configuration constants for system thresholds in the Vehicle Service Management System.
+ Includes limits for inventory stock alerts and payment reminder intervals.
+Author: Trenser
+Date: 21-May-2026
+*/
+
#pragma once
namespace config
@@ -6,8 +14,14 @@ namespace config
{
constexpr const char* DEFAULT_ADMIN_USERNAME = "admin";
constexpr const char* DEFAULT_ADMIN_NAME = "admin";
- constexpr const char* DEFAULT_ADMIN_PASSWORD = "";
+ constexpr const char* DEFAULT_ADMIN_PASSWORD = "admin";
constexpr const char* DEFAULT_ADMIN_EMAIL = "admin@vss";
constexpr const char* DEFAULT_ADMIN_PHONE = "0000000000";
}
+
+ namespace threshold
+ {
+ constexpr int INVENTORY_LOW_STOCK_THRESHOLD = 5;
+ constexpr int PAYMENT_REMINDER_THRESHOLD_HOURS = 168;
+ }
}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h
index 893d382..d89217e 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Enums.h
@@ -1,3 +1,12 @@
+/*
+File: Enums.h
+Description: Declares enumerations and utility functions for user types, payment modes, payment status,
+ service job status, and state management in the Vehicle Service Management System.
+ Provides string conversion and parsing functions for each enum type.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include
@@ -37,6 +46,14 @@ namespace util
INACTIVE
};
+ /*
+ Function: getUserTypeString
+ Description: Converts a UserType enum value to its corresponding string representation.
+ Parameters:
+ - type: UserType enum value.
+ Returns:
+ - std::string representing the UserType.
+ */
inline std::string getUserTypeString(UserType type)
{
switch (type)
@@ -51,6 +68,16 @@ namespace util
throw std::invalid_argument("Invalid UserType");
}
+ /*
+ Function: getUserType
+ Description: Converts a string value to its corresponding UserType enum.
+ Parameters:
+ - value: std::string representing the UserType.
+ Returns:
+ - UserType enum value.
+ Throws:
+ - std::invalid_argument if the string does not match a valid UserType.
+ */
inline UserType getUserType(const std::string& value)
{
if (value == "ADMIN")
@@ -68,6 +95,14 @@ namespace util
throw std::invalid_argument("Invalid UserType string");
}
+ /*
+ Function: getPaymentModeString
+ Description: Converts a PaymentMode enum value to its corresponding string representation.
+ Parameters:
+ - mode: PaymentMode enum value.
+ Returns:
+ - std::string representing the PaymentMode.
+ */
inline std::string getPaymentModeString(PaymentMode mode)
{
switch (mode)
@@ -82,6 +117,16 @@ namespace util
throw std::invalid_argument("Invalid PaymentMode");
}
+ /*
+ Function: getPaymentMode
+ Description: Converts a string value to its corresponding PaymentMode enum.
+ Parameters:
+ - value: std::string representing the PaymentMode.
+ Returns:
+ - PaymentMode enum value.
+ Throws:
+ - std::invalid_argument if the string does not match a valid PaymentMode.
+ */
inline PaymentMode getPaymentMode(const std::string& value)
{
if (value == "ONLINE")
@@ -95,6 +140,14 @@ namespace util
throw std::invalid_argument("Invalid PaymentMode string");
}
+ /*
+ Function: getPaymentStatusString
+ Description: Converts a PaymentStatus enum value to its corresponding string representation.
+ Parameters:
+ - status: PaymentStatus enum value.
+ Returns:
+ - std::string representing the PaymentStatus.
+ */
inline std::string getPaymentStatusString(PaymentStatus status)
{
switch (status)
@@ -107,6 +160,16 @@ namespace util
throw std::invalid_argument("Invalid PaymentStatus");
}
+ /*
+ Function: getPaymentStatus
+ Description: Converts a string value to its corresponding PaymentStatus enum.
+ Parameters:
+ - value: std::string representing the PaymentStatus.
+ Returns:
+ - PaymentStatus enum value.
+ Throws:
+ - std::invalid_argument if the string does not match a valid PaymentStatus.
+ */
inline PaymentStatus getPaymentStatus(const std::string& value)
{
if (value == "PENDING")
@@ -122,6 +185,14 @@ namespace util
throw std::invalid_argument("Invalid PaymentStatus string");
}
+ /*
+ Function: getServiceJobStatusString
+ Description: Converts a ServiceJobStatus enum value to its corresponding string representation.
+ Parameters:
+ - status: ServiceJobStatus enum value.
+ Returns:
+ - std::string representing the ServiceJobStatus.
+ */
inline std::string getServiceJobStatusString(ServiceJobStatus status)
{
switch (status)
@@ -132,14 +203,22 @@ namespace util
return "STARTED";
case ServiceJobStatus::COMPLETED:
return "COMPLETED";
- case ServiceJobStatus::PENDING:
- return "STARTED";
case ServiceJobStatus::CANCELLED:
return "CANCELLED";
}
throw std::invalid_argument("Invalid ServiceJobStatus");
}
+ /*
+ Function: getServiceJobStatus
+ Description: Converts a string value to its corresponding ServiceJobStatus enum.
+ Parameters:
+ - value: std::string representing the ServiceJobStatus.
+ Returns:
+ - ServiceJobStatus enum value.
+ Throws:
+ - std::invalid_argument if the string does not match a valid ServiceJobStatus.
+ */
inline ServiceJobStatus getServiceJobStatus(const std::string& value)
{
if (value == "STARTED")
@@ -161,6 +240,14 @@ namespace util
throw std::invalid_argument("Invalid ServiceJobStatus string");
}
+ /*
+ Function: getStateString
+ Description: Converts a State enum value to its corresponding string representation.
+ Parameters:
+ - status: State enum value.
+ Returns:
+ - std::string representing the State.
+ */
inline std::string getStateString(State status)
{
switch (status)
@@ -173,6 +260,16 @@ namespace util
throw std::invalid_argument("Invalid State");
}
+ /*
+ Function: getState
+ Description: Converts a string value to its corresponding State enum.
+ Parameters:
+ - value: std::string representing the State.
+ Returns:
+ - State enum value.
+ Throws:
+ - std::invalid_argument if the string does not match a valid State.
+ */
inline State getState(const std::string& value)
{
if (value == "ACTIVE")
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Utility.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Utility.h
index 5ae7404..ef8315b 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Utility.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Utility.h
@@ -7,6 +7,7 @@ Date:19-May-2026
*/
#pragma once
#include "Service.h"
+#include "ComboPackage.h"
#include "InventoryItem.h"
/*
@@ -28,6 +29,15 @@ inline double calculatePartsCost(const Service* service)
return cost;
}
+/*
+Function: calculateComboServiceEstimatedCost
+Description: Calculates the estimated total cost of a combo package by summing
+ the labor cost and parts cost of all services included in the package.
+Parameters:
+ - comboPackage: const ComboPackage*, pointer to the combo package whose cost is to be estimated
+Returns:
+ - double: The estimated total cost of the combo package
+*/
inline double calculateComboServiceEstimatedCost(const ComboPackage* comboPackage)
{
double cost = 0;
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp
index 4a7cb6b..9134d8f 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp
@@ -13,6 +13,7 @@ Date:19-May-2026
#include "Enums.h"
#include "InputHelper.h"
#include "InventoryItem.h"
+#include "MenuHelper.h"
#include "OutputHelper.h"
#include "Service.h"
#include "ServiceBooking.h"
@@ -704,7 +705,7 @@ Return type: void
void AdminMenu::addTechnician()
{
util::clear();
- std::string username, password, email, phoneNumber;
+ std::string username, name, password, email, phoneNumber;
std::cout << std::left << std::setw(25) << "Enter Technician Username:";
util::read(username);
std::cout << std::setw(25) << "Enter Technician Password:";
@@ -715,6 +716,8 @@ void AdminMenu::addTechnician()
util::pressEnter();
return;
}
+ std::cout << std::left << std::setw(25) << "Enter Technician Name:";
+ util::read(name);
std::cout << std::setw(25) << "Enter Technician Email:";
util::read(email);
if(!util::isEmailValid(email))
@@ -731,7 +734,7 @@ void AdminMenu::addTechnician()
util::pressEnter();
return;
}
- m_controller.createTechnician(username, password, email, phoneNumber);
+ m_controller.createTechnician(username, name, password, email, phoneNumber);
std::cout << "\nTechnician Added Successfully.\n";
util::pressEnter();
}
@@ -1018,6 +1021,15 @@ void AdminMenu::removeComboPackage()
util::pressEnter();
}
+/*
+Function: viewNotifications
+Description: Displays notifications for the admin and allows deletion of notifications.
+Parameters:
+ - None
+Returns:
+ - void
+*/
void AdminMenu::viewNotifications()
{
+ viewAndDeleteNotification(m_controller);
}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp
index 4d8c3c6..974057a 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp
@@ -1,3 +1,13 @@
+/*
+File: CustomerMenu.cpp
+Description: Implements the CustomerMenu class which provides the customer’s console interface
+ in the Vehicle Service Management System. Handles menu display, user input, and
+ customer-specific operations such as booking services, viewing history, managing payments,
+ invoices, and notifications.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include
#include
#include "ComboPackage.h"
@@ -7,6 +17,7 @@
#include "InventoryItem.h"
#include "Invoice.h"
#include "Map.h"
+#include "MenuHelper.h"
#include "OutputHelper.h"
#include "Service.h"
#include "ServiceBooking.h"
@@ -16,6 +27,15 @@
#include "Validator.h"
#include "Vector.h"
+/*
+Function: showMenu
+Description: Displays the customer menu in a loop until the user chooses to logout.
+ Handles exceptions and ensures smooth user interaction.
+Parameters:
+ - None
+Returns:
+ - void
+*/
void CustomerMenu::showMenu()
{
while (true)
@@ -464,10 +484,66 @@ void CustomerMenu::viewInvoices()
displayInvoices(currentUserInvoices);
}
+/*
+Function: viewNotifications
+Description: Displays notifications for the customer and allows deletion of notifications.
+Parameters:
+ - None
+Returns:
+ - void
+*/
void CustomerMenu::viewNotifications()
{
+ viewAndDeleteNotification(m_controller);
}
+/*
+Function: getNotificationPreference (static helper)
+Description: Helper function to configure notification preferences for a specific service.
+Parameters:
+ - serviceName: Name of the service for which notifications are being configured.
+Returns:
+ - bool: True if notifications are enabled, False if disabled.
+*/
+static bool getNotificationPreference(const std::string& serviceName)
+{
+ int choice;
+ while (true)
+ {
+ util::clear();
+ std::cout << " Configure Notification Preferences\n";
+ std::cout << "\n" << serviceName << " Notifications\n";
+ std::cout << "1. Enable Notifications\n";
+ std::cout << "2. Disable Notifications\n";
+ std::cout << "Enter your choice: ";
+ util::read(choice);
+ if (choice == 1)
+ {
+ return true;
+ }
+ if (choice == 2)
+ {
+ return false;
+ }
+ std::cout << "\nInvalid choice. Please enter 1 or 2.\n";
+ util::pressEnter();
+ }
+}
+
+/*
+Function: configureNotifications
+Description: Allows the customer to configure notification preferences for payment and service management.
+Parameters:
+ - None
+Returns:
+ - void
+*/
void CustomerMenu::configureNotifications()
{
-}
\ No newline at end of file
+ bool paymentServiceNotifications = getNotificationPreference("Payment Management Service");
+ bool serviceManagementNotifications = getNotificationPreference("Service Management Service");
+ m_controller.configureNotifications(paymentServiceNotifications, serviceManagementNotifications);
+ util::clear();
+ std::cout << "Notification preferences updated successfully.\n";
+ util::pressEnter();
+}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.h
index 886cf62..b65bb9d 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.h
@@ -1,3 +1,12 @@
+/*
+File: CustomerMenu.h
+Description: Declares the CustomerMenu class which provides the customer-facing console menu in the Vehicle Service Management System.
+ Supports operations such as account management, service selection, combo package booking, viewing service history,
+ handling payments and invoices, and managing notifications.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include "Controller.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h
index 3ff1134..20a0221 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h
@@ -1,11 +1,32 @@
+/*
+File: MenuHelper.h
+Description: Provides inline utility functions to support menu operations in the Vehicle Service Management System.
+ Includes helper functions for selecting, displaying, and managing notifications, as well as
+ integrating with the controller for user interactions.
+Author: Trenser
+Date: 21-May-2026
+*/
+
#pragma once
#include
#include
+#include "Vector.h"
+#include "Controller.h"
#include "Notification.h"
#include "Map.h"
#include "InputHelper.h"
#include "OutputHelper.h"
+/*
+Function: selectNotification
+Description: Displays a list of notifications with index, ID, title, and timestamp,
+ then allows the user to select one by index.
+Parameters:
+ - notifications: Vector of Notification pointers to be displayed.
+Returns:
+ - const Notification* representing the selected notification.
+ - nullptr if no notifications are available or if the selection is invalid.
+*/
inline const Notification* selectNotification(const util::Vector& notifications)
{
if (notifications.getSize() == 0)
@@ -13,6 +34,7 @@ inline const Notification* selectNotification(const util::Vector indexedNotifications;
std::cout << std::left
<< std::setw(6) << "Index"
<< std::setw(15) << "ID"
@@ -20,9 +42,9 @@ inline const Notification* selectNotification(const util::VectorgetTitle()
<< std::setw(25) << currentNotification->getCreatedAt().toString()
<< std::endl;
+ indexedNotifications.insert(currentIndex, currentNotification);
currentIndex++;
}
}
int selectedIndex;
std::cout << "Select notification: ";
util::read(selectedIndex);
- if (selectedIndex < 1 || selectedIndex > notifications.getSize())
+ if (!indexedNotifications.containsKey(selectedIndex))
{
std::cout << "Invalid selection." << std::endl;
return nullptr;
}
- return notifications[selectedIndex - 1];
+ return indexedNotifications[selectedIndex];
+}
+
+/*
+Function: displayNotification
+Description: Displays detailed information about a single notification, including ID, title, timestamp, and message.
+Parameters:
+ - notification: Pointer to the Notification object to be displayed.
+Returns:
+ - void
+*/
+inline void displayNotification(const Notification* notification)
+{
+ util::clear();
+ if (!notification)
+ {
+ std::cout << "Notification not found." << std::endl;
+ return;
+ }
+ std::cout << "Notification Details" << std::endl;
+ std::cout << "ID : " << notification->getId() << std::endl;
+ std::cout << "Title : " << notification->getTitle() << std::endl;
+ std::cout << "Timestamp : " << notification->getCreatedAt().toString() << std::endl;
+ std::cout << "Message : " << notification->getMessage() << std::endl;
+}
+
+/*
+Function: viewAndDeleteNotification
+Description: Allows the user to view a notification and then delete it from the system using the controller.
+Parameters:
+ - controller: Reference to the Controller object used to manage notifications.
+Returns:
+ - void
+*/
+inline void viewAndDeleteNotification(Controller& controller)
+{
+ util::clear();
+ auto notifications = controller.getNotifications();
+ const Notification* selectedNotification = selectNotification(notifications);
+ if (!selectedNotification)
+ {
+ std::cout << "Failed to display notification!";
+ util::pressEnter();
+ return;
+ }
+ displayNotification(selectedNotification);
+ controller.deleteNotification(selectedNotification->getId());
+ util::pressEnter();
}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp
index eadd3f4..c1e22c7 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp
@@ -6,10 +6,12 @@ Description: Implementation file containing the method definitions of the
Author: Trenser
Date:19-May-2026
*/
+
#include
#include "Enums.h"
#include "InputHelper.h"
#include "JobCard.h"
+#include "MenuHelper.h"
#include "OutputHelper.h"
#include "Service.h"
#include "TechnicianMenu.h"
@@ -17,9 +19,12 @@ Date:19-May-2026
/*
Function: showMenu
-Description: Displays the technician menu and handles user input until logout is selected.
-Parameter: None
-Return type: void
+Description: Displays the technician menu in a loop until the user chooses to logout.
+ Handles exceptions and ensures smooth user interaction.
+Parameters:
+ - None
+Returns:
+ - void
*/
void TechnicianMenu::showMenu()
{
@@ -143,8 +148,17 @@ void TechnicianMenu::completeJob()
}
}
+/*
+Function: viewNotifications
+Description: Displays notifications for the technician and allows deletion of notifications.
+Parameters:
+ - None
+Returns:
+ - void
+*/
void TechnicianMenu::viewNotifications()
{
+ viewAndDeleteNotification(m_controller);
}
/*
@@ -155,7 +169,7 @@ Return type: void
*/
void TechnicianMenu::logout()
{
- m_controller.logout();
+ m_controller.logout();
}
/*
@@ -166,21 +180,21 @@ Return type: void
*/
void TechnicianMenu::changePassword()
{
- std::string newPassword;
- while (true)
- {
- util::clear();
- std::cout << "Enter new password: ";
- util::read(newPassword);
- if (!util::isPasswordValid(newPassword))
- {
- std::cout << "Error: Password is not strong enough!\n";
- util::pressEnter();
- continue;
- }
- m_controller.changePassword(newPassword);
- std::cout << "Password changed successfully\n";
- util::pressEnter();
- break;
- }
-}
\ No newline at end of file
+ std::string newPassword;
+ while (true)
+ {
+ util::clear();
+ std::cout << "Enter new password: ";
+ util::read(newPassword);
+ if (!util::isPasswordValid(newPassword))
+ {
+ std::cout << "Error: Password is not strong enough!\n";
+ util::pressEnter();
+ continue;
+ }
+ m_controller.changePassword(newPassword);
+ std::cout << "Password changed successfully\n";
+ util::pressEnter();
+ break;
+ }
+}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp
index 37239a0..2e7ee59 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp
@@ -22,6 +22,7 @@ Return type: void
*/
void UserInterface::run()
{
+ m_controller.runSystemChecks();
bool isMenuActive = true;
while (isMenuActive)
{
@@ -113,6 +114,14 @@ void UserInterface::login()
}
}
+/*
+Function: registerCustomer
+Description: Handles the registration process for new customers.
+Parameters:
+ - None
+Returns:
+ - void
+*/
void UserInterface::registerCustomer()
{
std::string username, name, email, phone, password;