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.filters b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj.filters
index 77d0509..c72bd44 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj.filters
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj.filters
@@ -233,5 +233,8 @@
Header Files\Models
+
+ Header Files\Views
+
\ 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 893494e..e6ead9e 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp
@@ -210,17 +210,82 @@ void Controller::completePayment(const std::string& invoiceID, util::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!");
+ }
}
/*
@@ -232,5 +297,7 @@ 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 027ca20..9139d5d 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h
@@ -7,12 +7,14 @@ Author: Trenser
Date:19-May-2026
*/
#pragma once
-#include "Map.h"
#include
-#include "Enums.h"
#include "AuthenticationManagementService.h"
-#include "UserManagementService.h"
+#include "Enums.h"
+#include "InventoryManagementService.h"
+#include "Map.h"
+#include "PaymentManagementService.h"
#include "ServiceManagementService.h"
+#include "UserManagementService.h"
class Service;
class ComboPackage;
@@ -29,6 +31,8 @@ private:
AuthenticationManagementService m_authenticationManagementService;
UserManagementService m_userManagementService;
ServiceManagementService m_serviceManagementService;
+ InventoryManagementService m_inventoryManagementService;
+ PaymentManagementService m_paymentManagementService;
public:
bool login(const std::string& username, const std::string& password);
void logout();
@@ -61,6 +65,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 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 ba7bc84..7c06e5b 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,
@@ -38,122 +75,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 212d33f..b93cd77 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 04e9195..747da0f 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.cpp
@@ -1,7 +1,25 @@
+/*
+File: JobCard.cpp
+Description: Implements the JobCard class which represents a technician’s job assignment in the Vehicle Service Management System.
+ Provides constructors, accessors, and mutators for job details such as ID, booking, service, technician,
+ assigned date, completion date, and job status.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "JobCard.h"
int JobCard::m_uid = 0;
+/*
+Function: JobCard
+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)),
m_booking(nullptr),
@@ -9,6 +27,22 @@ JobCard::JobCard()
m_technician(nullptr),
m_status(ServiceJobStatus()) {}
+/*
+Function: JobCard
+Description: Parameterized constructor that initializes a new job card with a unique ID and specified details.
+Parameters:
+ - bookingId: ID of the associated service booking.
+ - booking: Pointer to the ServiceBooking object.
+ - service: Pointer to the Service object.
+ - serviceId: ID of the associated service.
+ - technicianId: ID of the assigned technician.
+ - technician: Pointer to the User object representing the technician.
+ - assignedDate: Timestamp of when the job was assigned.
+ - status: Current status of the job (STARTED/COMPLETED).
+ - completionDate: Timestamp of when the job was completed.
+Returns:
+ - A new JobCard object.
+*/
JobCard::JobCard(const std::string& bookingId,
ServiceBooking* booking,
Service* service,
@@ -30,101 +64,241 @@ JobCard::JobCard(const std::string& bookingId,
m_status(status),
m_completionDate(completionDate) {}
+/*
+Function: getId
+Description: Retrieves the unique ID of the job card.
+Returns:
+ - const std::string& representing the job card ID.
+*/
const std::string& JobCard::getId() const
{
return m_id;
}
+/*
+Function: getBookingId
+Description: Retrieves the booking ID associated with the job card.
+Returns:
+ - const std::string& representing the booking ID.
+*/
const std::string& JobCard::getBookingId() const
{
return m_bookingId;
}
+/*
+Function: getBooking
+Description: Retrieves the pointer to the associated ServiceBooking.
+Returns:
+ - ServiceBooking* representing the booking.
+*/
ServiceBooking* JobCard::getBooking() const
{
return m_booking;
}
+/*
+Function: getService
+Description: Retrieves the pointer to the associated Service.
+Returns:
+ - Service* representing the service.
+*/
Service* JobCard::getService() const
{
return m_service;
}
+/*
+Function: getServiceId
+Description: Retrieves the service ID associated with the job card.
+Returns:
+ - const std::string& representing the service ID.
+*/
const std::string& JobCard::getServiceId() const
{
return m_serviceId;
}
+/*
+Function: getTechnicianId
+Description: Retrieves the technician ID associated with the job card.
+Returns:
+ - const std::string& representing the technician ID.
+*/
const std::string& JobCard::getTechnicianId() const
{
return m_technicianId;
}
+/*
+Function: getTechnician
+Description: Retrieves the pointer to the assigned technician.
+Returns:
+ - User* representing the technician.
+*/
User* JobCard::getTechnician() const
{
return m_technician;
}
+/*
+Function: getAssignedDate
+Description: Retrieves the timestamp of when the job was assigned.
+Returns:
+ - const util::Timestamp& representing the assigned date.
+*/
const util::Timestamp& JobCard::getAssignedDate() const
{
return m_assignedDate;
}
+/*
+Function: getStatus
+Description: Retrieves the current status of the job.
+Returns:
+ - ServiceJobStatus representing the job status.
+*/
ServiceJobStatus JobCard::getStatus() const
{
return m_status;
}
+/*
+Function: getCompletionDate
+Description: Retrieves the timestamp of when the job was completed.
+Returns:
+ - const util::Timestamp& representing the completion date.
+*/
const util::Timestamp& JobCard::getCompletionDate() const
{
return m_completionDate;
}
+/*
+Function: setId
+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)
{
m_id = id;
}
+/*
+Function: setBookingId
+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)
{
m_bookingId = bookingId;
}
+/*
+Function: setBooking
+Description: Sets the associated ServiceBooking pointer.
+Parameters:
+ - booking: Pointer to the ServiceBooking object.
+Returns:
+ - void
+*/
void JobCard::setBooking(ServiceBooking* booking)
{
m_booking = booking;
}
+/*
+Function: setService
+Description: Sets the associated Service pointer.
+Parameters:
+ - service: Pointer to the Service object.
+Returns:
+ - void
+*/
void JobCard::setService(Service* service)
{
m_service = service;
}
+/*
+Function: setServiceId
+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)
{
m_serviceId = serviceId;
}
+/*
+Function: setTechnicianId
+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)
{
m_technicianId = technicianId;
}
+/*
+Function: setTechnician
+Description: Sets the pointer to the assigned technician.
+Parameters:
+ - technician: Pointer to the User object.
+Returns:
+ - void
+*/
void JobCard::setTechnician(User* technician)
{
m_technician = technician;
}
+/*
+Function: setAssignedDate
+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)
{
m_assignedDate = assignedDate;
}
+/*
+Function: setStatus
+Description: Sets the current status of the job.
+Parameters:
+ - status: New job status value.
+Returns:
+ - void
+*/
void JobCard::setStatus(ServiceJobStatus status)
{
m_status = status;
}
+/*
+Function: setCompletionDate
+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)
{
m_completionDate = completionDate;
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.h
index 15a8a5d..bdc736d 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/JobCard.h
@@ -1,3 +1,11 @@
+/*
+File: JobCard.h
+Description: Declares the JobCard class which represents a technician’s job assignment in the Vehicle Service Management System.
+ Each job card includes booking details, associated service, technician information, assigned and completion dates, and job status.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include
#include "Timestamp.h"
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 c7a4d88..18702ac 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/models/ServiceBooking.cpp
@@ -12,10 +12,10 @@ int ServiceBooking::m_uid = 0;
/*
Function: ServiceBooking
-Description: Default constructor that initializes a new service booking
- with a unique ID, no customer or technician, 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)),
@@ -25,17 +25,21 @@ ServiceBooking::ServiceBooking()
/*
Function: ServiceBooking
-Description: Parameterized constructor that initializes a service booking
- with customer, vehicle, services, and discount details.
-Parameter: util::ServiceJobStatus status - current booking status
- const util::Map& services - map of services
- const std::string& customerId - ID of the customer
- User* customer - pointer to the customer object
- const std::string& vehicleNumber - vehicle registration number
- const std::string& vehicleBrand - brand of the vehicle
- const std::string& vehicleModel - model of the vehicle
- double discountPercentage - discount applied to the booking
-Return type: Constructor
+Description: Parameterized constructor that initializes a new service booking with a unique ID and specified details.
+Parameters:
+ - id: Booking ID string.
+ - status: Current status of the booking (e.g., PENDING, COMPLETED).
+ - services: Map of services included in the booking.
+ - customerId: ID of the customer.
+ - customer: Pointer to the User object representing the customer.
+ - vehicleNumber: Vehicle registration number.
+ - vehicleBrand: Brand of the vehicle.
+ - vehicleModel: Model of the vehicle.
+ - assignedTechnicianId: ID of the assigned technician.
+ - assignedTechnician: Name of the assigned technician.
+ - discountPercentage: Discount applied to the booking.
+Returns:
+ - A new ServiceBooking object.
*/
ServiceBooking::ServiceBooking(
util::ServiceJobStatus status,
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 39ef719..4b2f003 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp
@@ -1 +1,105 @@
+#include
#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{};
+
+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();
+ 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/InventoryManagementService.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.h
index 099b964..da63a84 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.h
@@ -1,3 +1,11 @@
+/*
+File: InventoryManagementService.h
+Description: Declares the InventoryManagementService class which manages inventory operations in the Vehicle Service Management System.
+ Provides functionality to retrieve, add, and remove inventory items, send low stock alerts, 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/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 786ebcf..12082cf 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/PaymentManagementService.cpp
@@ -1 +1,136 @@
+/*
+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
#include "PaymentManagementService.h"
+#include "Invoice.h"
+#include "ServiceBooking.h"
+#include "Enums.h"
+#include "Timestamp.h"
+#include "Config.h"
+#include "User.h"
+#include "Factory.h"
+
+util::Map PaymentManagementService::m_observers{};
+
+/*
+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());
+ }
+ }
+ }
+ }
+ }
+}
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 c720c35..de777ec 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/ServiceManagementService.cpp
@@ -7,12 +7,14 @@ Author: Trenser
Date:19-May-2026
*/
#include
-#include "ServiceManagementService.h"
#include "AuthenticationManagementService.h"
-#include "Service.h"
-#include "ServiceBooking.h"
#include "ComboPackage.h"
#include "Factory.h"
+#include "Service.h"
+#include "ServiceBooking.h"
+#include "ServiceManagementService.h"
+#include "Timestamp.h"
+#include "User.h"
/*
Function: purchaseService
@@ -96,3 +98,83 @@ void ServiceManagementService::purchaseComboPackage(const std::string& comboPack
"Combo Package Service Booking succeeded",
"Your service booking for the combo package has been successfully placed with ID " + serviceBooking->getId());
}
+
+util::Map ServiceManagementService::m_observers{};
+
+/*
+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 9036731..63732a5 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp
@@ -7,14 +7,16 @@ Author: Trenser
Date:19-May-2026
*/
#include
-#include "User.h"
-#include "Enums.h"
#include "Config.h"
-#include "UserManagementService.h"
-#include "ServiceManagementService.h"
-#include "PaymentManagementService.h"
-#include "InventoryManagementService.h"
+#include "Enums.h"
#include "Factory.h"
+#include "InventoryManagementService.h"
+#include "PaymentManagementService.h"
+#include "ServiceManagementService.h"
+#include "User.h"
+#include "UserManagementService.h"
+#include "Vector.h"
+
/*
Function: ensureAdminExists
@@ -110,3 +112,65 @@ void UserManagementService::updateUserDetails(const std::string& userID, const s
user->setEmail(email);
user->setPhone(phone);
}
+
+/*
+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);
+}
\ No newline at end of file
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.h
index 5b89053..313b8d6 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.h
@@ -25,7 +25,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 ca5ea0e..f55529e 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Config.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Config.h
@@ -4,8 +4,9 @@ Description: Header file declaring configuration constants for the Vehicle Servi
Includes default admin account details such as username, name, password,
email, and phone number.
Author: Trenser
-Date:19-May-2026
+Date: 21-May-2026
*/
+
#pragma once
namespace config
@@ -18,4 +19,10 @@ namespace config
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 24bbdcd..60f2d9b 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
@@ -34,6 +43,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)
@@ -48,6 +65,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")
@@ -65,6 +92,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)
@@ -77,6 +112,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")
@@ -90,6 +135,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)
@@ -102,6 +155,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")
@@ -117,6 +180,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)
@@ -129,6 +200,16 @@ namespace util
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")
@@ -142,6 +223,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)
@@ -154,6 +243,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/views/AdminMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp
index 0432f3c..4e81925 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp
@@ -1,7 +1,27 @@
+/*
+File: AdminMenu.cpp
+Description: Implements the AdminMenu class which provides the administrator’s console interface
+ in the Vehicle Service Management System. Handles menu display, user input, and
+ admin-specific operations such as inventory management, technician management,
+ service creation, combo package management, job assignment, and notifications.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "AdminMenu.h"
#include "InputHelper.h"
#include "OutputHelper.h"
+#include "MenuHelper.h"
+/*
+Function: showMenu
+Description: Displays the admin menu in a loop until the user chooses to logout.
+ Handles exceptions and ensures smooth user interaction.
+Parameters:
+ - None
+Returns:
+ - void
+*/
void AdminMenu::showMenu()
{
bool isMenuActive = true;
@@ -84,6 +104,15 @@ void AdminMenu::removeComboPackage()
{
}
+/*
+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/AdminMenu.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.h
index 05fdd84..cc4ff2f 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.h
@@ -1,3 +1,12 @@
+/*
+File: AdminMenu.h
+Description: Declares the AdminMenu class which provides the administrative console menu in the Vehicle Service Management System.
+ Supports operations such as inventory management, job assignment, service creation/removal, technician management,
+ combo package handling, notification viewing, and account management functions like logout and password change.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include "Controller.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp
index b9a6d23..c812089 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/CustomerMenu.cpp
@@ -7,17 +7,17 @@ Author: Trenser
Date:19-May-2026
*/
#include
-#include "CustomerMenu.h"
-#include "Service.h"
-#include "InventoryItem.h"
#include "ComboPackage.h"
-#include "Service.h"
+#include "CustomerMenu.h"
#include "InputHelper.h"
+#include "InventoryItem.h"
+#include "Map.h"
+#include "MenuHelper.h"
#include "OutputHelper.h"
+#include "Service.h"
+#include "Utility.h"
#include "Validator.h"
#include "Vector.h"
-#include "Utility.h"
-#include "Map.h"
/*
Function: showMenu
@@ -344,10 +344,66 @@ void CustomerMenu::viewInvoices()
{
}
+/*
+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/MenuHelper.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h
index db8a6e4..3dfbeba 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h
@@ -4,15 +4,18 @@ Description: Header file declaring the MenuHelper class, which provides
utility functions for menu-driven operations such as
notification selection and display.
Author: Trenser
-Date:19-May-2026
+Date: 21-May-2026
*/
+
#pragma once
-#include
#include
-#include "Notification.h"
-#include "Map.h"
+#include
+#include "Controller.h"
#include "InputHelper.h"
+#include "Map.h"
+#include "Notification.h"
#include "OutputHelper.h"
+#include "Vector.h"
/*
Function: selectNotification
@@ -29,6 +32,7 @@ inline const Notification* selectNotification(const util::Vector indexedNotifications;
std::cout << std::left
<< std::setw(6) << "Index"
<< std::setw(15) << "ID"
@@ -36,9 +40,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 d6c4d57..ce1e5bc 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.cpp
@@ -1,7 +1,26 @@
+/*
+File: TechnicianMenu.cpp
+Description: Implements the TechnicianMenu class which provides the technician’s console interface
+ in the Vehicle Service Management System. Handles menu display, user input, and
+ technician-specific operations such as completing jobs and viewing notifications.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#include "TechnicianMenu.h"
#include "InputHelper.h"
#include "OutputHelper.h"
+#include "MenuHelper.h"
+/*
+Function: showMenu
+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()
{
bool isMenuActive = true;
@@ -35,6 +54,15 @@ 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);
}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h
index c366d9b..3383362 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/TechnicianMenu.h
@@ -1,3 +1,11 @@
+/*
+File: TechnicianMenu.h
+Description: Declares the TechnicianMenu class which provides the technician-facing console menu in the Vehicle Service Management System.
+ Supports operations such as viewing assigned jobs, completing jobs, and managing notifications.
+Author: Trenser
+Date: 19-May-2026
+*/
+
#pragma once
#include "Controller.h"
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp
index e774b1d..571cd33 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)
{