feat(invoice): add Shopify order #, shipping address/method/cost and tracking

- Query Order.shippingLine and Order.fulfillments.trackingInfo from Admin GraphQL.
- Surface orderName (#1004) so customers recognise their order alongside the sequential invoice number.
- Render shipping cost as a synthetic line item (folds into the VAT breakdown).
- Show shipping method (Versandart / Shipping method) and tracking numbers (clickable when URL present) in the meta block.
- Render a separate delivery-address block when the shipping address differs from billing.
- DE strings stay informal (Versandart / Sendungsnummer / Lieferadresse / Versand).
This commit is contained in:
Gerhard Scheikl
2026-05-15 13:41:53 +02:00
parent 55a0dd03f2
commit 8780b4a68a
7 changed files with 345 additions and 16 deletions
+15
View File
@@ -58,6 +58,11 @@ export interface InvoiceStrings {
paymentStatusUnpaid: string;
paymentStatusPartial: string;
paymentStatusRefunded: string;
orderNumberLabel: string;
shippingAddressHeading: string;
shippingMethodLabel: string;
trackingLabel: string;
shippingItemPrefix: string;
}
/** Status displayed for the order's payment, derived from Shopify's
@@ -153,6 +158,11 @@ const de: InvoiceStrings = {
paymentStatusUnpaid: "Offen",
paymentStatusPartial: "Teilweise bezahlt",
paymentStatusRefunded: "Erstattet",
orderNumberLabel: "Bestellnummer",
shippingAddressHeading: "Lieferadresse",
shippingMethodLabel: "Versandart",
trackingLabel: "Sendungsnummer",
shippingItemPrefix: "Versand",
};
const en: InvoiceStrings = {
@@ -215,6 +225,11 @@ const en: InvoiceStrings = {
paymentStatusUnpaid: "Outstanding",
paymentStatusPartial: "Partially paid",
paymentStatusRefunded: "Refunded",
orderNumberLabel: "Order no.",
shippingAddressHeading: "Shipping address",
shippingMethodLabel: "Shipping method",
trackingLabel: "Tracking no.",
shippingItemPrefix: "Shipping",
};
// Locale → invoice language. We only render in German (`de`) when the