mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-28 10:10:57 +00:00
release order document fix
This commit is contained in:
@@ -7,6 +7,9 @@ RUN apk add --no-cache libc6-compat
|
||||
# `--mount=type=cache,target=/pnpm/store` cache actually persists deps across builds.
|
||||
ENV PNPM_HOME="/pnpm"
|
||||
ENV PATH="$PNPM_HOME:$PATH"
|
||||
# Puppeteer uses the system Chromium installed in the runner stage — skip the
|
||||
# ~150MB bundled-Chromium download during pnpm install.
|
||||
ENV PUPPETEER_SKIP_DOWNLOAD=true
|
||||
RUN corepack enable
|
||||
WORKDIR /app
|
||||
|
||||
@@ -32,8 +35,14 @@ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
|
||||
pnpm deploy --filter="@edr/freight-api" --prod --legacy /deploy
|
||||
|
||||
FROM node:24.15.0-alpine AS runner
|
||||
RUN apk add --no-cache libc6-compat
|
||||
# Chromium + fonts for headless PDF rendering (puppeteer). Alpine ships the
|
||||
# binary at /usr/bin/chromium-browser, which the PDF renderer auto-detects
|
||||
# (also pinned via PUPPETEER_EXECUTABLE_PATH). Without this, PDF generation
|
||||
# falls back to a degraded hand-built layout.
|
||||
RUN apk add --no-cache libc6-compat \
|
||||
chromium nss freetype harfbuzz ca-certificates ttf-freefont
|
||||
ENV NODE_ENV=production
|
||||
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
|
||||
WORKDIR /app
|
||||
RUN addgroup --system --gid 1001 nodejs \
|
||||
&& adduser --system --uid 1001 --ingroup nodejs nestjs
|
||||
|
||||
@@ -1265,7 +1265,9 @@ export class TrainSchedulingService {
|
||||
performedBy: 'DOCUMENT_GENERATION',
|
||||
});
|
||||
const html = this.buildImportLoadListHtml(loadList);
|
||||
const buffer = await this.pdfDocuments.htmlToPdfBuffer(html);
|
||||
// Generic render — NOT the release-order fallback (would mislabel this as a
|
||||
// gate-clearance / release order when Chromium is unavailable).
|
||||
const buffer = await this.pdfDocuments.renderDocumentHtml(html, 'Import marshalling / load list');
|
||||
const reference = loadList.trainNumber ?? loadList.trainScheduleId;
|
||||
return {
|
||||
filename: `import-marshalling-${this.safeDocumentName(reference)}.pdf`,
|
||||
@@ -1283,7 +1285,8 @@ export class TrainSchedulingService {
|
||||
}
|
||||
|
||||
const html = this.buildExportLoadListHtml(schedule);
|
||||
const buffer = await this.pdfDocuments.htmlToPdfBuffer(html);
|
||||
// Generic render — NOT the release-order fallback (see importLoadListDocument).
|
||||
const buffer = await this.pdfDocuments.renderDocumentHtml(html, 'Export marshalling / load list');
|
||||
const reference = schedule.trainNumber ?? schedule.id;
|
||||
return {
|
||||
filename: `export-marshalling-${this.safeDocumentName(reference)}.pdf`,
|
||||
|
||||
@@ -20,6 +20,18 @@ export class WarehouseReleaseDocumentService {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Render arbitrary document HTML to PDF via the shared renderer WITHOUT the
|
||||
* release-order fallback. Non-release documents (e.g. the import/export
|
||||
* marshalling load list) must use this so a Chromium-less fallback degrades to
|
||||
* a plain-text dump of *their own* content — instead of masquerading as a
|
||||
* "Warehouse Gate Clearance / Release Order", which the release-specific
|
||||
* fallback would otherwise draw regardless of the input HTML.
|
||||
*/
|
||||
renderDocumentHtml(html: string, label = 'Document'): Promise<Buffer> {
|
||||
return this.pdf.htmlToPdfBuffer(html, { label });
|
||||
}
|
||||
|
||||
private htmlToBasicPdfBuffer(html: string): Buffer {
|
||||
const doc = this.extractReleaseDocument(html);
|
||||
const body: string[] = [
|
||||
|
||||
Reference in New Issue
Block a user