Merge branch 'feature-notification-management-not004' into feature-notification-management

This commit is contained in:
Jissin Mathew
2026-05-21 20:54:20 +05:30
7 changed files with 65 additions and 0 deletions
@@ -171,11 +171,13 @@
<ClInclude Include="services\PaymentManagementService.h" />
<ClInclude Include="services\ServiceManagementService.h" />
<ClInclude Include="services\UserManagementService.h" />
<ClInclude Include="utilities\Config.h" />
<ClInclude Include="utilities\Enums.h" />
<ClInclude Include="utilities\InputHelper.h" />
<ClInclude Include="utilities\Map.h" />
<ClInclude Include="utilities\OutputHelper.h" />
<ClInclude Include="utilities\Timestamp.h" />
<ClInclude Include="utilities\Utility.h" />
<ClInclude Include="utilities\Validator.h" />
<ClInclude Include="utilities\Vector.h" />
<ClInclude Include="views\AdminMenu.h" />
@@ -163,5 +163,6 @@ void Controller::configureNotifications(const std::string& userID, bool paymentN
void Controller::runSystemChecks()
{
m_inventoryManagementService.sendLowStockAlerts();
}
@@ -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();
@@ -1 +1,50 @@
#include <stdexcept>
#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<User*>& 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<User*> 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);
}
}
}
@@ -0,0 +1,9 @@
#pragma once
namespace config
{
namespace threshold
{
constexpr int INVENTORY_LOW_STOCK_THRESHOLD = 5;
}
}
@@ -0,0 +1 @@
#pragma once
@@ -4,6 +4,7 @@
void UserInterface::run()
{
m_controller.runSystemChecks();
bool isMenuActive = true;
while (isMenuActive)
{