mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-27 00:52:50 +00:00
Invoice and clearance seal approval
This commit is contained in:
@@ -2351,7 +2351,7 @@ export class WarehouseInventoryService {
|
||||
.subtitle { margin-top: 6px; font-size: 12px; color: #475569; text-transform: uppercase; letter-spacing: .08em; }
|
||||
.ref { text-align: right; font-size: 12px; color: #475569; min-width: 210px; }
|
||||
.ref strong { display: block; color: #111827; font-size: 17px; margin: 4px 0 8px; }
|
||||
.seal { position: absolute; right: 32px; top: 126px; width: 124px; height: 124px; border: 4px double #14532d; border-radius: 999px; color: #14532d; display: flex; align-items: center; justify-content: center; text-align: center; font-weight: 800; font-size: 17px; line-height: 1.15; transform: rotate(-13deg); opacity: .86; text-transform: uppercase; }
|
||||
.seal { position: absolute; right: 8px; top: -42px; width: 112px; height: 112px; border: 4px double #14532d; border-radius: 999px; color: #14532d; display: flex; align-items: center; justify-content: center; text-align: center; font-weight: 800; font-size: 15px; line-height: 1.15; transform: rotate(-13deg); opacity: .86; text-transform: uppercase; }
|
||||
.seal::before { content: ""; position: absolute; inset: 10px; border: 1px solid #14532d; border-radius: inherit; }
|
||||
.notice { margin: 20px 154px 18px 0; padding: 13px 15px; background: #f0fdf4; border: 1px solid #86efac; border-left: 5px solid #14532d; font-size: 13px; line-height: 1.45; }
|
||||
.section-title { margin: 18px 0 8px; font-size: 13px; font-weight: 800; color: #14532d; text-transform: uppercase; letter-spacing: .08em; }
|
||||
@@ -2360,6 +2360,7 @@ export class WarehouseInventoryService {
|
||||
th, td { border: 1px solid #cbd5e1; padding: 8px 10px; font-size: 12.5px; vertical-align: top; }
|
||||
.clause { margin-top: 16px; border: 1px solid #cbd5e1; padding: 12px 14px; font-size: 12.5px; line-height: 1.45; }
|
||||
.signatures { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; margin-top: 42px; }
|
||||
.officer-signature { position: relative; min-height: 98px; padding-right: 132px; }
|
||||
.line { border-top: 1px solid #111827; padding-top: 8px; font-size: 12px; color: #334155; }
|
||||
.footer { margin-top: 22px; border-top: 1px solid #cbd5e1; padding-top: 9px; font-size: 10.5px; color: #475569; line-height: 1.45; }
|
||||
</style>
|
||||
@@ -2378,7 +2379,6 @@ export class WarehouseInventoryService {
|
||||
Issued: ${esc(issuedAt)}
|
||||
</div>
|
||||
</div>
|
||||
<div class="seal">EDR<br />Warehouse<br />Cleared</div>
|
||||
<div class="notice">
|
||||
This clearance document confirms that the listed booking/goods are authorized for warehouse exit, subject to gate identity verification and confirmation that no blocking warehouse fees remain unpaid.
|
||||
</div>
|
||||
@@ -2394,7 +2394,10 @@ export class WarehouseInventoryService {
|
||||
cargo details, clearance status, and payment records before permitting exit from the warehouse premises.
|
||||
</div>
|
||||
<div class="signatures">
|
||||
<div class="line">Authorized warehouse officer name / signature / date</div>
|
||||
<div class="officer-signature">
|
||||
<div class="seal">EDR<br />Warehouse<br />Cleared</div>
|
||||
<div class="line">Officer in charge name / signature / date</div>
|
||||
</div>
|
||||
<div class="line">Customer or driver name / signature / date</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
|
||||
@@ -112,12 +112,12 @@ export class WarehouseReleaseDocumentService {
|
||||
.join('\n');
|
||||
const stream = [
|
||||
this.lineOp(48, 752, 548, 752),
|
||||
this.circularSealOps(470, 690),
|
||||
body,
|
||||
this.lineOp(48, 126, 238, 126, '0 0 0'),
|
||||
this.textOp('Authorized warehouse officer name / signature / date', 48, 110, 9, 'F1'),
|
||||
this.lineOp(312, 126, 548, 126, '0 0 0'),
|
||||
this.textOp('Customer or driver name / signature / date', 312, 110, 9, 'F1'),
|
||||
this.circularSealOps(184, 154),
|
||||
this.lineOp(48, 92, 278, 92, '0 0 0'),
|
||||
this.textOp('Officer in charge name / signature / date', 48, 76, 9, 'F1'),
|
||||
this.lineOp(326, 92, 548, 92, '0 0 0'),
|
||||
this.textOp('Customer or driver name / signature / date', 326, 76, 9, 'F1'),
|
||||
this.textOp('OFFICIAL WAREHOUSE GATE CLEARANCE DOCUMENT', 145, 52, 9, 'F2', '0.08 0.32 0.18'),
|
||||
].join('\n');
|
||||
|
||||
|
||||
@@ -93,6 +93,16 @@ const buildAuthorizationBand = (label: 'PAID' | 'CLEARED') => [
|
||||
buildCircularSeal(452, 155, label),
|
||||
];
|
||||
|
||||
const buildWarehouseOfficerSealBand = () => [
|
||||
lineOp(60, 218, 535, 218),
|
||||
textOp('WAREHOUSE OFFICER SEAL', 92, 194, 9, true, GREEN),
|
||||
buildCircularSeal(170, 128, 'CLEARED'),
|
||||
textOp('Officer in charge name / signature / date:', 292, 154, 10),
|
||||
lineOp(292, 132, 535, 132, '0 0 0'),
|
||||
textOp('Customer or driver name / signature / date:', 292, 94, 10),
|
||||
lineOp(292, 72, 535, 72, '0 0 0'),
|
||||
];
|
||||
|
||||
function buildSimplePdf(lines: PdfLine[], rawOps: string[] = []): Blob {
|
||||
let y = 800;
|
||||
const streamLines = lines.map((line) => {
|
||||
@@ -258,10 +268,6 @@ export function buildWarehouseExitPaperPdf(input: WarehouseFeeInvoice | Warehous
|
||||
{ text: `Release Date & Time: ${fmtDate(releasedAt)}`, align: 'center' },
|
||||
{ text: 'This sealed document authorizes the listed booking/goods to leave the warehouse gate.', yGap: 30, align: 'center' },
|
||||
], [
|
||||
...buildAuthorizationBand('CLEARED'),
|
||||
textOp('Warehouse officer name / signature / date:', 72, 190, 10),
|
||||
lineOp(260, 188, 360, 188, '0 0 0'),
|
||||
textOp('Customer or driver name / signature / date:', 72, 148, 10),
|
||||
lineOp(260, 146, 360, 146, '0 0 0'),
|
||||
...buildWarehouseOfficerSealBand(),
|
||||
]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user