mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-07 15:25:45 +00:00
Merge branch 'empty-return-requests-fix' into dev
This commit is contained in:
@@ -54,6 +54,33 @@ export interface EmptyReturnQuote {
|
|||||||
unavailableReason: string | null;
|
unavailableReason: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** A queue row: the request plus the booking and payer names staff read it by. */
|
||||||
|
export type EmptyReturnRequestRow = Pick<
|
||||||
|
EmptyReturnRequest,
|
||||||
|
| 'id'
|
||||||
|
| 'bookingId'
|
||||||
|
| 'companyId'
|
||||||
|
| 'status'
|
||||||
|
| 'containerNumbers'
|
||||||
|
| 'containerCount'
|
||||||
|
| 'quotedUnitAmount'
|
||||||
|
| 'quotedTotalAmount'
|
||||||
|
| 'currency'
|
||||||
|
| 'invoiceId'
|
||||||
|
| 'paidAt'
|
||||||
|
| 'requestedReturnDate'
|
||||||
|
| 'truckPlateNumber'
|
||||||
|
| 'truckDriverName'
|
||||||
|
| 'truckType'
|
||||||
|
| 'scheduledAt'
|
||||||
|
| 'submittedByUserId'
|
||||||
|
| 'submittedAt'
|
||||||
|
| 'reviewedByStaffId'
|
||||||
|
| 'reviewedAt'
|
||||||
|
| 'rejectionReason'
|
||||||
|
| 'completedAt'
|
||||||
|
> & { bookingReference: string | null; companyName: string | null };
|
||||||
|
|
||||||
export interface EmptyReturnEligibility {
|
export interface EmptyReturnEligibility {
|
||||||
eligible: boolean;
|
eligible: boolean;
|
||||||
/** Why the customer cannot request one, when `eligible` is false. */
|
/** Why the customer cannot request one, when `eligible` is false. */
|
||||||
@@ -82,13 +109,34 @@ export class EmptyReturnRequestsService {
|
|||||||
async findAll(filter: {
|
async findAll(filter: {
|
||||||
status?: EmptyReturnRequestStatus;
|
status?: EmptyReturnRequestStatus;
|
||||||
bookingId?: string;
|
bookingId?: string;
|
||||||
}): Promise<
|
}): Promise<EmptyReturnRequestRow[]> {
|
||||||
Array<EmptyReturnRequest & { bookingReference: string | null; companyName: string | null }>
|
// Raw SQL bypasses the entity mapping, so every column is aliased to the
|
||||||
> {
|
// property name the clients read — `r.*` would hand them snake_case.
|
||||||
return this.dataSource.query(
|
return this.dataSource.query(
|
||||||
`SELECT r.*,
|
`SELECT r.id,
|
||||||
b.reference AS "bookingReference",
|
r.booking_id AS "bookingId",
|
||||||
c.name AS "companyName"
|
r.company_id AS "companyId",
|
||||||
|
r.status,
|
||||||
|
r.container_numbers AS "containerNumbers",
|
||||||
|
r.container_count AS "containerCount",
|
||||||
|
r.quoted_unit_amount::float8 AS "quotedUnitAmount",
|
||||||
|
r.quoted_total_amount::float8 AS "quotedTotalAmount",
|
||||||
|
r.currency,
|
||||||
|
r.invoice_id AS "invoiceId",
|
||||||
|
r.paid_at AS "paidAt",
|
||||||
|
r.requested_return_date AS "requestedReturnDate",
|
||||||
|
r.truck_plate_number AS "truckPlateNumber",
|
||||||
|
r.truck_driver_name AS "truckDriverName",
|
||||||
|
r.truck_type AS "truckType",
|
||||||
|
r.scheduled_at AS "scheduledAt",
|
||||||
|
r.submitted_by_user_id AS "submittedByUserId",
|
||||||
|
r.submitted_at AS "submittedAt",
|
||||||
|
r.reviewed_by_staff_id AS "reviewedByStaffId",
|
||||||
|
r.reviewed_at AS "reviewedAt",
|
||||||
|
r.rejection_reason AS "rejectionReason",
|
||||||
|
r.completed_at AS "completedAt",
|
||||||
|
b.reference AS "bookingReference",
|
||||||
|
c.name AS "companyName"
|
||||||
FROM freight.empty_return_requests r
|
FROM freight.empty_return_requests r
|
||||||
LEFT JOIN freight.bookings b ON b.id = r.booking_id AND b.deleted_at IS NULL
|
LEFT JOIN freight.bookings b ON b.id = r.booking_id AND b.deleted_at IS NULL
|
||||||
LEFT JOIN freight.companies c ON c.id = r.company_id
|
LEFT JOIN freight.companies c ON c.id = r.company_id
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ export default function EmptyReturnRequestsPage() {
|
|||||||
const controls = useListControls(requests, {
|
const controls = useListControls(requests, {
|
||||||
dateKey: "submittedAt",
|
dateKey: "submittedAt",
|
||||||
searchValue: (row) =>
|
searchValue: (row) =>
|
||||||
`${row.bookingReference ?? ""} ${row.companyName ?? ""} ${row.containerNumbers.join(" ")}`,
|
`${row.bookingReference ?? ""} ${row.companyName ?? ""} ${(row.containerNumbers ?? []).join(" ")}`,
|
||||||
});
|
});
|
||||||
|
|
||||||
const invalidate = () => {
|
const invalidate = () => {
|
||||||
@@ -143,7 +143,7 @@ export default function EmptyReturnRequestsPage() {
|
|||||||
<Stack gap={2}>
|
<Stack gap={2}>
|
||||||
<Badge size="sm">{row.original.containerCount}</Badge>
|
<Badge size="sm">{row.original.containerCount}</Badge>
|
||||||
<Text size="xs" c="dimmed" lineClamp={2}>
|
<Text size="xs" c="dimmed" lineClamp={2}>
|
||||||
{row.original.containerNumbers.join(", ")}
|
{(row.original.containerNumbers ?? []).join(", ")}
|
||||||
</Text>
|
</Text>
|
||||||
</Stack>
|
</Stack>
|
||||||
),
|
),
|
||||||
@@ -386,7 +386,7 @@ function ApproveModal({
|
|||||||
Containers coming back
|
Containers coming back
|
||||||
</Text>
|
</Text>
|
||||||
<Text size="sm" c="dimmed">
|
<Text size="sm" c="dimmed">
|
||||||
{request.containerNumbers.join(", ")}
|
{(request.containerNumbers ?? []).join(", ")}
|
||||||
</Text>
|
</Text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user