Implement Generate Invoice
<UserStory> PAY001: Generate Invoice </UserStory>
<Changes>
1. Added Utility.h to project configuration for supporting invoice generation utilities.
2. Updated Invoice model to use string-based keys for parts mapping instead of integer keys.
3. Implemented PaymentManagementService::generateInvoice to aggregate labour cost, parts cost, and apply discounts.
4. Integrated invoice creation with Factory to instantiate Invoice objects and persist them into datastore.
5. Enhanced Enums with PaymentMode::NOTSET to handle default invoice state.
</Changes>
<Test>
Acceptance Criteria:
1. Invoice auto-generates for each service booking once jobs are completed.
2. Invoice shows a clear breakdown of charges including labour cost, parts cost, discount, and total amount.
Precondition:
1. Service booking exists with at least one service and required inventory items.
2. Datastore is available for storing invoices.
3. Payment mode and status enums are properly configured.
Steps:
1. Complete all jobs in a service booking.
- Verify that PaymentManagementService::generateInvoice is triggered.
2. Check datastore for newly created invoice.
- Verify that invoice contains booking ID, labour cost, parts cost, discount, and total amount.
3. Inspect invoice details.
- Verify that breakdown of charges is accurate and discount is applied correctly.
4. Confirm invoice status.
- Verify that invoice is created with PaymentMode::NOTSET and PaymentStatus::PENDING.
</Test>
<Review>
Sreeja Reghukumar, please review
</Review>
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include "Enums.h"
|
||||
#include "Timestamp.h"
|
||||
|
||||
class ServiceBooking;
|
||||
class Service;
|
||||
class User;
|
||||
|
||||
enum class ServiceJobStatus : int;
|
||||
|
||||
class JobCard
|
||||
{
|
||||
@@ -20,7 +20,7 @@ private:
|
||||
std::string m_technicianId;
|
||||
User* m_technician;
|
||||
util::Timestamp m_assignedDate;
|
||||
ServiceJobStatus m_status;
|
||||
util::ServiceJobStatus m_status;
|
||||
util::Timestamp m_completionDate;
|
||||
|
||||
public:
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
const std::string& technicianId,
|
||||
User* technician,
|
||||
const util::Timestamp& assignedDate,
|
||||
ServiceJobStatus status,
|
||||
util::ServiceJobStatus status,
|
||||
const util::Timestamp& completionDate
|
||||
);
|
||||
const std::string& getId() const;
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
const std::string& getTechnicianId() const;
|
||||
User* getTechnician() const;
|
||||
const util::Timestamp& getAssignedDate() const;
|
||||
ServiceJobStatus getStatus() const;
|
||||
util::ServiceJobStatus getStatus() const;
|
||||
const util::Timestamp& getCompletionDate() const;
|
||||
void setId(const std::string& id);
|
||||
void setBookingId(const std::string& bookingId);
|
||||
@@ -53,6 +53,6 @@ public:
|
||||
void setTechnicianId(const std::string& technicianId);
|
||||
void setTechnician(User* technician);
|
||||
void setAssignedDate(const util::Timestamp& assignedDate);
|
||||
void setStatus(ServiceJobStatus status);
|
||||
void setStatus(util::ServiceJobStatus status);
|
||||
void setCompletionDate(const util::Timestamp& completionDate);
|
||||
};
|
||||
Reference in New Issue
Block a user