Changes:
- Added missing include for MenuHelper.h in project and AdminMenu
- Fixed typo in variable name inventoryIems to inventoryItems in Controller.cpp
- Removed stray semicolon from include in Controller.h
- Cleaned up duplicate comments in Controller.cpp description header
- Minor formatting adjustments with blank lines after headers in multiple files
- Updated ServiceManagementService notification message to remove informal wording
- Refactored AdminMenu::changePassword to use changePasswordHelper
- Added util::clear() call at start of viewStockLevels
- Removed redundant helper functions from AdminMenu.cpp and moved to shared helpers
- Fixed bug in removeInventoryItem to use activeItems instead of inventoryItems
- Enhanced createComboPackages to enforce selection of two distinct services
- General comment cleanup and formatting consistency across headers and implementation files
- Add serialize/deserialize support for core models
- Add file-based load/save functions in management services
- Introduce FileManager, Config, Utility and helper utilities
- Persist observer IDs for notification services
- Resolve object relationships during load (services, bookings, invoices, job cards)
- Add controller-level loadSystemData/saveSystemData
- Load data at app startup and save on shutdown
<UserStory> INV002: Add Stock </UserStory>
<Changes>
1. Added Controller integration with InventoryManagementService to support adding new inventory items and updating existing stock quantities.
2. Implemented InventoryManagementService::addInventoryItem to create new items via Factory and insert them into the DataStore.
3. Implemented InventoryManagementService::addInventoryItemStock to update stock quantities for existing items.
4. Enhanced AdminMenu with options to add new items or update stock quantities, including input validation and confirmation messages.
5. Added helper functions in AdminMenu to display inventory items and handle quantity updates interactively.
6. Included necessary headers (InventoryItem, Factory, iomanip) for new functionality.
</Changes>
<Test>
Precondition:
1. Admin user is logged into the system.
2. Inventory contains existing items with unique IDs.
3. DataStore is accessible and initialized.
Steps:
1. Navigate to Admin Menu and select "Add Inventory Item".
- Verify that the system prompts for part name, quantity, and price.
2. Enter details for a new item with a unique part name and ID.
- Verify that the item is successfully added and a confirmation message is displayed.
3. Attempt to add an item with a duplicate ID.
- Verify that the system rejects the duplicate and displays an error message.
4. Select "Add Quantity" option for an existing item.
- Verify that the system updates the stock quantity and displays the new total in the confirmation message.
5. Navigate to "View Stock Levels".
- Verify that the updated stock quantity is reflected in the inventory list.
</Test>
<Review>
Sreeja Reghukumar
</Review>
- Removed observer map from Subject base class
- Removed notify() from Subject interface
- Made NotificationManagementService abstract with pure virtual methods
- Added static observer maps to notification service implementations
- Added attach() and detach() overrides in inventory, payment, and service management services
- Added update() override in User model for observer pattern support
- Updated notification method declarations with override specifiers