<UserStory> NOT003: View Technician Notifications </UserStory>
<Changes>
1. Added MenuHelper.h to the project for shared notification viewing helper support.
2. Updated TechnicianMenu.cpp to include MenuHelper.h and route viewNotifications() through the shared notification handler.
</Changes>
<Test>
Precondition:
1. Technician user exists and is logged into the system.
2. Technician has one or more notifications available.
3. “View Notifications” option is visible in the Technician menu.
Steps:
1. Navigate to Technician Menu.
2. Select “View Notifications”.
3. Verify that the system displays a list of notifications showing title, message, and timestamp.
4. Select a notification to view full details.
- Verify that the selected notification is displayed and deleted after viewing.
5. Return to the notification list or reopen “View Notifications”.
- Verify that the previously viewed notification is no longer present.
</Test>
<Review>
Sreeja Reghukumar, please review
</Review>
<UserStory> NOT002: View Admin Notifications </UserStory>
<Changes>
1. Added shared notification view handler `viewAndDeleteNotification()` in MenuHelper.h for notification viewing and deletion logic reuse.
2. Updated AdminMenu.cpp to include MenuHelper.h and connected AdminMenu::viewNotifications() to the shared notification handler.
</Changes>
<Test>
Precondition:
1. Admin user exists and is logged into the system.
2. Admin has one or more notifications available.
3. “View Notifications” option is visible in the Admin menu.
Steps:
1. Navigate to Admin Menu.
2. Select “View Notifications”.
3. Verify that the system displays a list of notifications showing title, message, and timestamp.
4. Select a notification to view full details.
- Verify that the selected notification is displayed and deleted after viewing.
5. Return to the notification list or reopen “View Notifications”.
- Verify that the previously viewed notification is no longer present.
</Test>
<Review>
Sreeja Reghukumar, please review
</Review>
<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>
<UserStory> CUS006 Purchase Individual Service </UserStory>
<Changes>
1. Added service selection flow in CustomerMenu to display active services, allow customer to choose a service, and collect vehicle details for booking.
2. Implemented Controller::purchaseService to delegate service booking requests to ServiceManagementService.
3. Added ServiceManagementService::purchaseService logic to validate authenticated user, fetch selected services, create a ServiceBooking, and persist it in DataStore.
4. Updated ServiceBooking constructor and assigned technician handling to use User* references instead of technician name strings.
5. Integrated ServiceManagementService dependency into Controller
</Changes>
<Test>
Validate customer service booking flow and service status tracking
Precondition:
1. Customer account exists and is logged into the system.
2. Active services are available in the system.
3. Service bookings can be created and stored in DataStore.
4. Technician account exists to update service status.
Steps:
1. Navigate to Customer Menu and select the individual service booking option.
2. View the list of active services and select a service.
3. Enter vehicle number, vehicle brand, and vehicle model, then confirm booking.
- Verify that the service booking is created successfully with an initial status.
4. Technician updates the service booking status.
- Verify that the latest status is reflected in the system.
5. Customer refreshes or views service booking history.
- Verify that the updated status is shown correctly in booking history.
</Test>
<Review>
Sreeja Reghukumar, please review
</Review>
<UserStory> CUS005: Update Customer Profile Details </UserStory>
<Changes>
1. Added update profile flow in CustomerMenu to collect new email and phone number inputs.
2. Added validation for updated email and phone number before saving changes.
3. Updated Controller::updateUserDetails() to fetch the authenticated user and delegate profile update to UserManagementService.
4. Added user existence validation in UserManagementService before updating profile details.
5. Added logic in UserManagementService to update stored email and phone details for the selected user.
6. Added profile update confirmation message after successful save.
</Changes>
<Test>
Update Customer Profile Details
Precondition:
1. Application is running and a customer is logged into the system.
2. Customer record exists in DataStore.
3. Customer has existing profile details stored in the system.
Steps:
1. Select the Update Profile Details option.
2. Verify that the current profile details are displayed.
- Verify that the system shows the customer’s existing details.
3. Enter a new valid email address and phone number.
4. Save the updated details.
- Verify that the system accepts the changes and displays a success message.
5. Create or view a future booking using the same customer account.
- Verify that the updated profile details are reflected in future bookings.
</Test>
<Review>
Sreeja Reghukumar, please review
</Review>
<UserStory> CUS003: Implement change password functionality </UserStory>
<Changes>
1. Connected Controller::changePassword() with AuthenticationManagementService password update logic.
2. Added password validation before updating the user password.
3. Added logged-in user check before allowing password changes.
4. Implemented password update logic in AuthenticationManagementService.
5. Added change password flow in CustomerMenu to collect new password input and trigger password update.
6. Added success message display after password is changed successfully.
</Changes>
<Test>
Change password functionality validation
Precondition:
1. System is running.
2. A registered user exists in the data store.
3. User is logged in and customer menu is active.
Steps:
1. Launch the application and log in with valid credentials.
2. Select the Change Password option from the customer menu.
3. Enter a new password.
- Verify that the entered password is validated.
4. If the password is valid, complete the password change.
- Verify that the new password is saved successfully.
- Verify that the message "Password changed successfully" is displayed.
</Test>
<Review>
Sreeja Reghukumar, please review
</Review>
<UserStory> CUS002: Logout</UserStory>
<Changes>
1. Connected Controller::logout() with AuthenticationManagementService logout logic.
2. Added logout implementation in AuthenticationManagementService to clear the authenticated user session.
3. Added logout handling in CustomerMenu to invoke controller logout when the user selects the logout option.
4. Added authentication service dependency in Controller for logout support.
</Changes>
<Test>
Logout functionality validation
Precondition:
1. System is running.
2. A registered user exists in the data store.
3. User is logged in and customer menu is active.
Steps:
1. Launch the application and log in with valid credentials.
- Verify that access is granted and customer menu is displayed.
2. Select the Logout option from the customer menu.
- Verify that the logout operation is triggered immediately.
3. Complete the logout operation.
- Verify that the authenticated user session is cleared.
4. After logout completes.
- Verify that the user is redirected to the login menu.
</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