diff --git a/apps/edr-freight-api/src/modules/bookings/bookings.service.ts b/apps/edr-freight-api/src/modules/bookings/bookings.service.ts
index e4b902fe1..15799f000 100644
--- a/apps/edr-freight-api/src/modules/bookings/bookings.service.ts
+++ b/apps/edr-freight-api/src/modules/bookings/bookings.service.ts
@@ -424,7 +424,10 @@ export class BookingsService {
const departureStation = booking.originYard?.label ?? booking.originYard?.code ?? '-';
const arrivalStation = booking.destinationYard?.label ?? booking.destinationYard?.code ?? '-';
- const cargoName = booking.cargoType?.cargoTypeName ?? booking.cargoFreeText ?? '-';
+ // Container bookings carry no cargo type or free text — name the freight type
+ // rather than printing a dash in the Cargo Name column.
+ const cargoName =
+ booking.cargoType?.cargoTypeName ?? booking.cargoFreeText ?? booking.freightType ?? '-';
const currency = booking.paymentCurrency ?? 'ETB';
const totalAmount = Number(booking.adjustedTotalAmount ?? booking.totalAmount) || 0;
const prices = this.splitAmountAcrossWagons(
@@ -467,6 +470,28 @@ export class BookingsService {
)
.join('');
+ // The totals belong in
, not : the Chromium-less fallback
+ // renderer only parses tbody rows, so a silently drops every footer
+ // figure from the printed sheet.
+ const totalsRow = `
+ | TOT |
+ ${wagons.length} ${pendingWagons ? 'received lines' : 'wagons'} |
+ ${
+ pendingWagons
+ ? 'pending marshalling'
+ : `full ${fullWagons} / empty ${wagons.length - fullWagons}`
+ } |
+ ${num(totals.tare, 2)} |
+ ${num(totals.length)} |
+ ${num(totals.capacity)} |
+ |
+ Gross ${num(totals.tare + totals.load)} T |
+ |
+ |
+ |
+ ${money(totalAmount)} |
+
`;
+
return `
@@ -490,7 +515,7 @@ export class BookingsService {
th { background: #f8fafc; color: #475569; text-align: left; }
th, td { border: 1px solid #cbd5e1; padding: 5px 6px; font-size: 9.5px; vertical-align: top; }
.num { text-align: right; }
- tfoot td { background: #f8fafc; font-weight: 700; }
+ tr.totals td { background: #f8fafc; font-weight: 700; }
.notice { margin-top: 10px; border-left: 4px solid #0f766e; background: #f0fdfa; padding: 8px 10px; font-size: 10px; color: #134e4a; }
.signatures { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin-top: 34px; }
.line { border-top: 1px solid #334155; padding-top: 7px; font-size: 9px; color: #475569; min-height: 34px; }
@@ -538,21 +563,8 @@ export class BookingsService {
${rows}
+ ${totalsRow}
-
-
- | ${
- pendingWagons
- ? `Received lines: ${wagons.length} — wagons pending marshalling`
- : `Total wagons: ${wagons.length} (full ${fullWagons} / empty ${wagons.length - fullWagons})`
- } |
- ${num(totals.tare, 2)} |
- ${num(totals.length)} |
- ${num(totals.capacity)} |
- Gross weight (tare + load): ${num(totals.tare + totals.load)} T |
- ${money(totalAmount)} |
-
-