fix(notifications): drop redundant "PO" prefix, link all notifications to /po/[id]

In-app notification bodies now lead directly with the PO number
(e.g. "PO-2024-12345 approved" → "PO-2024-12345 approved") without the
word "PO" repeated before the identifier, since the ID already makes
the context obvious.

All notification links now route to /po/[id] so clicking any
notification takes the user straight to the relevant PO detail page,
regardless of their role or the event type.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Hardik 2026-05-16 16:23:21 +05:30
parent f0b49c4b96
commit 48de2d08a2

View file

@ -72,68 +72,48 @@ function buildInAppBody(
switch (event) { switch (event) {
case "PO_SUBMITTED": case "PO_SUBMITTED":
// Manager sees who submitted; submitter gets a confirmation
return recipient.id === po.submitterId return recipient.id === po.submitterId
? `Your PO ${pn} has been submitted for review` ? `${pn} submitted for review`
: `${submitter} submitted PO ${pn} for your review`; : `${submitter} submitted ${pn} for your review`;
case "PO_APPROVED": case "PO_APPROVED":
case "PO_APPROVED_WITH_NOTE": case "PO_APPROVED_WITH_NOTE":
return recipient.id === po.submitterId return recipient.id === po.submitterId
? `Your PO ${pn} has been approved` ? `${pn} approved`
: `PO ${pn} approved — ready for payment`; : `${pn} approved — ready for payment`;
case "PO_REJECTED": case "PO_REJECTED":
return `Your PO ${pn} has been rejected`; return `${pn} rejected`;
case "EDITS_REQUESTED": case "EDITS_REQUESTED":
return `Edits requested on your PO ${pn}`; return `Edits requested on ${pn}`;
case "VENDOR_ID_REQUESTED": case "VENDOR_ID_REQUESTED":
return `Vendor ID needed before PO ${pn} can be approved`; return `Vendor ID needed before ${pn} can be approved`;
case "VENDOR_ID_PROVIDED": case "VENDOR_ID_PROVIDED":
return `Vendor ID provided for PO ${pn} — ready to review`; return `Vendor ID provided for ${pn} — ready to review`;
case "PAYMENT_PROCESSING": case "PAYMENT_PROCESSING":
return `Payment is being processed for PO ${pn}`; return `Payment processing for ${pn}`;
case "PAYMENT_SENT": case "PAYMENT_SENT":
return `Payment confirmed for PO ${pn} — please confirm receipt`; return `Payment confirmed for ${pn} — please confirm receipt`;
case "RECEIPT_CONFIRMED": case "RECEIPT_CONFIRMED":
return `Receipt confirmed — PO ${pn} is now closed`; return `Receipt confirmed — ${pn} closed`;
default: default:
return `Update on PO ${pn}`; return `Update on ${pn}`;
} }
} }
function buildInAppLink( function buildInAppLink(
event: NotificationEvent, _event: NotificationEvent,
po: PurchaseOrder & { submitter: User }, po: PurchaseOrder & { submitter: User },
recipient: User _recipient: User
): string { ): string {
switch (event) { return `/po/${po.id}`;
case "PO_SUBMITTED":
return recipient.id === po.submitterId ? `/po/${po.id}` : `/approvals/${po.id}`;
case "PO_APPROVED":
case "PO_APPROVED_WITH_NOTE":
return recipient.id === po.submitterId ? `/po/${po.id}` : `/payments`;
case "PO_REJECTED":
case "EDITS_REQUESTED":
case "VENDOR_ID_REQUESTED":
return `/po/${po.id}`;
case "VENDOR_ID_PROVIDED":
return `/approvals/${po.id}`;
case "PAYMENT_PROCESSING":
case "RECEIPT_CONFIRMED":
return `/po/${po.id}`;
case "PAYMENT_SENT":
return `/po/${po.id}/receipt`;
default:
return `/po/${po.id}`;
}
} }
// ── Email subject ───────────────────────────────────────────────────────────── // ── Email subject ─────────────────────────────────────────────────────────────