Commit aee6356e: Implement Confirm Payment Functionality
<User Story> Complete Payments - 1797</User Story> <Changes> 1. Added Controller::getAllInvoices - Retrieves all invoices from PaymentManagementService and returns them as a read-only map. 2. Implemented Controller::confirmPayment - Delegates payment confirmation for a given invoice ID to PaymentManagementService. 3. Introduced PaymentManagementService::getAllInvoice - Provides access to all invoices stored in the datastore. 4. Added PaymentManagementService::confirmPayment - Confirms payment for a specific invoice, updates payment date and status, and sends notification. 5. Extended util::PaymentStatus enum - Added PAID status and updated string conversion. 6. Integrated AdminMenu::confirmPayment - Validates invoice list, filters by status, allows selection, and confirms payment. 7. Updated CustomerMenu::completePayments - Uses parameterized status filtering for invoice selection. 8. Enhanced MenuHelper::selectInvoiceFromUserForPayment - Accepts requiredStatus parameter for flexible filtering. 9. Adjusted AdminMenu options - Added "Confirm Payment" before Logout. </Changes> <Test> Acceptance Criteria: 1. Admin selects "Confirm Payment" from menu. - Verify system prompts and displays invoices filtered by status. 2. Admin selects invoice with status = PAID. - Verify payment confirmation updates date, sets status, and sends notification. 3. Admin attempts confirmation with empty invoice list. - Verify error message: "No pending invoices available for confirmation." 4. Customer completes payment. - Verify selection uses util::PaymentStatus::PENDING and payment flow works correctly. 5. Invalid invoice ID entered. - Verify system throws runtime_error with "Payment failed: invalid invoice ID." Precondition: 1. Admin logged into system. 2. At least one invoice exists in datastore. 3. Notification system available. Steps: 1. Navigate to Admin menu → Confirm Payment. 2. Select invoice with PAID status. 3. Confirm payment and check notification. 4. Attempt with empty invoice list. 5. Attempt with invalid invoice ID. </Test> <Review> Sreeja Reghukumar </Review>
This commit is contained in:
+46
-2
@@ -368,12 +368,12 @@ void PaymentManagementService::completePayment(const std::string& invoiceID, uti
|
||||
if (invoiceIndex != -1)
|
||||
{
|
||||
Invoice* invoice = currentInvoices.getValueAt(invoiceIndex);
|
||||
if (invoice && invoice->getStatus() != util::PaymentStatus::COMPLETED)
|
||||
if (invoice && invoice->getStatus() != util::PaymentStatus::PAID)
|
||||
{
|
||||
User* currentUser = invoice->getBooking()->getCustomer();
|
||||
invoice->setPaymentMethod(paymentMode);
|
||||
invoice->setPaymentDate(util::Timestamp());
|
||||
invoice->setStatus(util::PaymentStatus::COMPLETED);
|
||||
invoice->setStatus(util::PaymentStatus::PAID);
|
||||
std::string title, message;
|
||||
title = "Payment successful";
|
||||
message = "Payment successful for Invoice ID " + invoiceID;
|
||||
@@ -384,4 +384,48 @@ void PaymentManagementService::completePayment(const std::string& invoiceID, uti
|
||||
{
|
||||
throw std::runtime_error("Payment failed: invalid invoice ID.");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Function: getAllInvoice
|
||||
Description: Provides access to all invoices stored in the data store.
|
||||
Parameters:
|
||||
- none
|
||||
Returns:
|
||||
- util::Map<std::string, Invoice*>&: Map of invoice IDs to invoice objects
|
||||
*/
|
||||
util::Map<std::string, Invoice*>& PaymentManagementService::getAllInvoices()
|
||||
{
|
||||
return m_dataStore.getInvoices();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: confirmPayment
|
||||
Description: Confirms payment for a specific invoice. Updates payment date and status,
|
||||
then sends a notification to the customer.
|
||||
Parameters:
|
||||
- invoiceID: std::string, ID of the invoice to confirm
|
||||
Returns:
|
||||
- void
|
||||
Throws:
|
||||
- std::runtime_error if the invoice ID is invalid
|
||||
*/
|
||||
void PaymentManagementService::confirmPayment(const std::string& invoiceID)
|
||||
{
|
||||
auto& currentInvoices = m_dataStore.getInvoices();
|
||||
int invoiceIndex = currentInvoices.find(invoiceID);
|
||||
if (invoiceIndex == -1)
|
||||
{
|
||||
throw std::runtime_error("Payment confirmation failed: invalid invoice ID.");
|
||||
}
|
||||
Invoice* invoice = currentInvoices.getValueAt(invoiceIndex);
|
||||
if (!invoice || invoice->getStatus() != util::PaymentStatus::PAID)
|
||||
{
|
||||
throw std::runtime_error("Payment confirmation failed: invoice is not awaiting confirmation.");
|
||||
}
|
||||
User* currentUser = invoice->getBooking()->getCustomer();
|
||||
invoice->setStatus(util::PaymentStatus::COMPLETED);
|
||||
std::string title = "Payment Confirmed";
|
||||
std::string message = "Payment Confirmed for Invoice ID " + invoiceID;
|
||||
sendNotification(currentUser, title, message);
|
||||
}
|
||||
Reference in New Issue
Block a user