<UserStory> CUS007: Purchase Combo Package </UserStory>
<Changes>
1. Added combo package selection flow in CustomerMenu to list all active combo packages with estimated cost and allow customer selection.
2. Implemented Controller::purchaseComboPackage to delegate combo package booking requests to ServiceManagementService.
3. Added ServiceManagementService::purchaseComboPackage logic to validate authenticated user, fetch selected combo package, create a ServiceBooking, persist it in DataStore, and send booking confirmation notification.
4. Added helper functions in CustomerMenu to calculate combo package estimated cost based on included services and required inventory items.
5. Updated ServiceBooking model to use User* reference for assigned technician and simplified constructor to align booking model with object references.
</Changes>
<Test>
Precondition:
1. Customer account exists and is logged into the system.
2. Active combo packages are available in the system.
3. Combo package contains one or more active services.
4. Service bookings and notifications can be created successfully.
Steps:
1. Navigate to Customer Menu and select the combo package booking option.
2. View the list of available combo packages.
- Verify that all active combo packages are displayed with their details.
3. Select one combo package and enter vehicle number, vehicle brand, and vehicle model.
- Verify that a booking request is generated successfully.
4. Complete the booking flow.
- Verify that a confirmation message is displayed to the customer.
5. Check customer notifications.
- Verify that a booking confirmation notification is received.
</Test>
<Review>
Sreeja Reghukumar, please review
</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
<Changes>
1. Added State enum with ACTIVE and INACTIVE values in Enums.h.
2. Added state member, getter, and setter in User, Service, InventoryItem, and ComboPackage models.
3. Updated constructors to initialize model objects with ACTIVE state by default.
4. Added state string conversion helper functions in Enums.h.
5. Added default return values in Controller getter methods to complete stub implementations.
6. Added basic menu loop implementation in CustomerMenu and TechnicianMenu for handling user input.
</Changes>
Changes:
- Added stub implementations for Controller.cpp methods
- Fixed const issue in UserInterface methods (run, login, registerCustomer, handleOperation)
- Changed return types to use const pointers for read-only objects
- Updated maps and vectors to return const object pointers
- Fixed some function parameter names and signatures for consistency