diff options
| author | T <t@tjp.lol> | 2026-02-23 11:27:12 -0700 |
|---|---|---|
| committer | T <t@tjp.lol> | 2026-02-23 11:30:58 -0700 |
| commit | f9b23f5c12eda13c6014f6291bdeecb77bb40141 (patch) | |
| tree | 85a8cd0b4a44830c0176dfe3b81240a81bb21c8f /internal/reports | |
| parent | b53c952fc8a054d935d90db2ccf3f0b897e6c771 (diff) | |
Diffstat (limited to 'internal/reports')
| -rw-r--r-- | internal/reports/invoice.go | 8 | ||||
| -rw-r--r-- | internal/reports/testdata/invoice_test_data.json | 28 |
2 files changed, 21 insertions, 15 deletions
diff --git a/internal/reports/invoice.go b/internal/reports/invoice.go index 4ac5eb4..503851e 100644 --- a/internal/reports/invoice.go +++ b/internal/reports/invoice.go @@ -106,7 +106,7 @@ func GenerateInvoiceData( return nil, fmt.Errorf("unsupported entry type") } - lineItems := groupTimeEntriesIntoLineItems(timeEntries) + lineItems := groupTimeEntriesIntoLineItems(timeEntries, contractor.Label) totalHours := 0.0 totalAmount := 0.0 @@ -133,7 +133,7 @@ func GenerateInvoiceData( return invoice, nil } -func groupTimeEntriesIntoLineItems(entries []timeEntryData) []LineItem { +func groupTimeEntriesIntoLineItems(entries []timeEntryData, contractorLabel string) []LineItem { var lineItems []LineItem // Group 1: Entries with overridden rates @@ -187,13 +187,13 @@ func groupTimeEntriesIntoLineItems(entries []timeEntryData) []LineItem { // Process client rates for _, entries := range clientRateGroups { if len(entries) > 0 { - clientName := entries[0].ClientName rateCents := int64(0) if entries[0].ClientBillableRate.Valid { rateCents = entries[0].ClientBillableRate.Int64 } - lineItem := createLineItem(entries, rateCents, fmt.Sprintf("General work - %s", clientName)) + clientName := entries[0].ClientName + lineItem := createLineItem(entries, rateCents, fmt.Sprintf("%s - %s", contractorLabel, clientName)) lineItems = append(lineItems, lineItem) } } diff --git a/internal/reports/testdata/invoice_test_data.json b/internal/reports/testdata/invoice_test_data.json index a6adc28..499f104 100644 --- a/internal/reports/testdata/invoice_test_data.json +++ b/internal/reports/testdata/invoice_test_data.json @@ -1,26 +1,32 @@ { - "client_name": "Test Client", - "project_name": "Test Project", + "client_name": "Acme Corporation", + "project_name": "", "date_range_start": "2025-07-01", "date_range_end": "2025-07-31", "generated_date": "2025-08-04", "invoice_number": "2025-07-001", "line_items": [ { - "description": "Development work", - "hours": 8.5, + "description": "Software Development - Acme Corporation", + "hours": 14.5, "rate": 150.0, - "amount": 1275.0 + "amount": 2175.0 }, { - "description": "Code review and testing", - "hours": 2.25, - "rate": 150.0, - "amount": 337.5 + "description": "Platform Modernization", + "hours": 8.0, + "rate": 175.0, + "amount": 1400.0 + }, + { + "description": "Custom rate work", + "hours": 3.0, + "rate": 225.0, + "amount": 675.0 } ], - "total_hours": 10.75, - "total_amount": 1612.5, + "total_hours": 25.5, + "total_amount": 4250.0, "contractor_name": "Travis Parker", "contractor_label": "Software Development", "contractor_email": "travis.parker@gmail.com" |
