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:
@@ -16,7 +16,7 @@ private:
|
||||
ServiceBooking* m_booking;
|
||||
util::Timestamp m_invoiceDate;
|
||||
double m_laborCost;
|
||||
util::Map<int, InventoryItem*> m_parts;
|
||||
util::Map<std::string, InventoryItem*> m_parts;
|
||||
double m_partsCost;
|
||||
double m_discountPercentage;
|
||||
double m_totalAmount;
|
||||
@@ -30,8 +30,8 @@ public:
|
||||
const std::string& bookingId,
|
||||
ServiceBooking* booking,
|
||||
const util::Timestamp& invoiceDate,
|
||||
double laborCost, const util::Map<int,
|
||||
InventoryItem*>& parts,
|
||||
double laborCost,
|
||||
const util::Map<std::string,InventoryItem*>& parts,
|
||||
double partsCost,
|
||||
double discountPercentage,
|
||||
double totalAmount,
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
ServiceBooking* getBooking() const;
|
||||
const util::Timestamp& getInvoiceDate() const;
|
||||
double getLaborCost() const;
|
||||
const util::Map<int, InventoryItem*>& getParts() const;
|
||||
const util::Map<std::string, InventoryItem*>& getParts() const;
|
||||
double getPartsCost() const;
|
||||
double getDiscountPercentage() const;
|
||||
double getTotalAmount() const;
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
void setBooking(ServiceBooking* booking);
|
||||
void setInvoiceDate(const util::Timestamp& invoiceDate);
|
||||
void setLaborCost(double laborCost);
|
||||
void setParts(const util::Map<int, InventoryItem*>& parts);
|
||||
void setParts(const util::Map<std::string, InventoryItem*>& parts);
|
||||
void setPartsCost(double partsCost);
|
||||
void setDiscountPercentage(double discountPercentage);
|
||||
void setTotalAmount(double totalAmount);
|
||||
|
||||
Reference in New Issue
Block a user