mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-08 11:18:17 +00:00
feat(billing): search invoices by PNR and transaction ref
Both are numbers a customer or a provider support desk quotes back, so they belong in the free-text box rather than behind a filter pill. The transaction id and merchant order id are plain ORs — the payment alias is already joined by every caller of applyInvoiceFilters. The PNR folds into the existing booking EXISTS block instead of adding a second subquery, so it inherits that block's correlation and also matches warehouse-, first-mile- and last-mile-sourced invoices, not just booking-sourced ones. bk is promoted to alwaysJoin now that the export's scope() references it.
This commit is contained in:
@@ -351,20 +351,24 @@ export class BillingService {
|
||||
qb.andWhere("invoice.balanceAmount > 0 AND invoice.dueAt < now()");
|
||||
}
|
||||
if (filter.search) {
|
||||
// Searches what the row actually shows: its number, who it bills, and
|
||||
// the source record behind it (booking reference, GRN, shipping line).
|
||||
// Searches what the row actually shows: its number, who it bills, the
|
||||
// source record behind it (booking reference, PNR, GRN, shipping line)
|
||||
// and the payment references a customer or a provider support desk would
|
||||
// quote back — the gateway transaction id and our merchant order id.
|
||||
// The raw `sourceId` stays matchable so a pasted UUID still resolves.
|
||||
// Requires the `company` alias — every caller of this joins it.
|
||||
// Requires the `company` and `payment` aliases — every caller joins both.
|
||||
qb.andWhere(
|
||||
`(invoice.invoiceNumber ILIKE :search
|
||||
OR invoice.sourceId ILIKE :search
|
||||
OR company.name ILIKE :search
|
||||
OR payment.transactionId ILIKE :search
|
||||
OR payment.merchantOrderId ILIKE :search
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM freight.bookings b
|
||||
LEFT JOIN freight.warehouse_inventory wi ON wi.booking_id = b.id
|
||||
LEFT JOIN freight.first_mile fm ON fm.booking_id = b.id
|
||||
LEFT JOIN freight.last_mile lm ON lm.booking_id = b.id
|
||||
WHERE b.reference ILIKE :search
|
||||
WHERE (b.reference ILIKE :search OR b.pnr_code ILIKE :search)
|
||||
AND (b.id::text = invoice.source_id
|
||||
OR wi.id::text = invoice.source_id
|
||||
OR fm.id::text = invoice.source_id
|
||||
|
||||
Reference in New Issue
Block a user