diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj
index aaca946..063f776 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem.vcxproj
@@ -171,11 +171,13 @@
+
+
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp
index 298706c..1220088 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.cpp
@@ -163,5 +163,6 @@ void Controller::configureNotifications(const std::string& userID, bool paymentN
void Controller::runSystemChecks()
{
+ m_inventoryManagementService.sendLowStockAlerts();
}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h
index e1ecc49..041f6e2 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/controllers/Controller.h
@@ -4,6 +4,7 @@
#include "Enums.h"
#include "AuthenticationManagementService.h"
#include "UserManagementService.h"
+#include "InventoryManagementService.h"
class Service;
class ComboPackage;
@@ -19,6 +20,7 @@ class Controller
private:
AuthenticationManagementService m_authenticationManagementService;
UserManagementService m_userManagementService;
+ InventoryManagementService m_inventoryManagementService;
public:
bool login(const std::string& username, const std::string& password);
void logout();
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp
index 39ef719..aa15ae8 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/InventoryManagementService.cpp
@@ -1 +1,50 @@
+#include
#include "InventoryManagementService.h"
+#include "Vector.h"
+#include "Enums.h"
+#include "InventoryItem.h"
+#include "Config.h"
+
+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/utilities/Config.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Config.h
new file mode 100644
index 0000000..7a96ed6
--- /dev/null
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+namespace config
+{
+ namespace threshold
+ {
+ constexpr int INVENTORY_LOW_STOCK_THRESHOLD = 5;
+ }
+}
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Utility.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Utility.h
new file mode 100644
index 0000000..6f70f09
--- /dev/null
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Utility.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp
index 122f9a8..cc47e47 100644
--- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp
+++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/UserInterface.cpp
@@ -4,6 +4,7 @@
void UserInterface::run()
{
+ m_controller.runSystemChecks();
bool isMenuActive = true;
while (isMenuActive)
{