From 500fe6cf946bd5e455a29a533b41e3c58927cb8e Mon Sep 17 00:00:00 2001 From: nobswebdev Date: Sun, 6 Sep 2026 00:42:05 +0200 Subject: [PATCH] use checkout payment method for shipping invoices Load btc details on admin order queries and issue shipping invoices in the same crypto the customer used at checkout. Co-authored-by: Cursor --- .../order/services/OrderService.spec.ts | 22 ++++++++++++++++++- .../modules/order/services/OrderService.ts | 5 +++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/backend/src/modules/order/services/OrderService.spec.ts b/backend/src/modules/order/services/OrderService.spec.ts index ab43bfa..a572e68 100644 --- a/backend/src/modules/order/services/OrderService.spec.ts +++ b/backend/src/modules/order/services/OrderService.spec.ts @@ -222,7 +222,7 @@ describe('OrderService', () => { ({ id: 'order-1', lines: [{ deliveryMode: DeliveryMode.Manual }], - checkoutInvoice: { id: 'checkout-invoice-1', fiatCurrency: 'USD' } + checkoutInvoice: { id: 'checkout-invoice-1', fiatCurrency: 'USD', paymentMethod: PaymentMethod.Xmr } }) as Order; it('throws when the order cannot be quoted', async () => { @@ -300,6 +300,26 @@ describe('OrderService', () => { }); expect(result).toBe(orderExtended); }); + + it('uses the checkout invoice payment method for shipping invoices', async () => { + orderRepo.findOne.mockResolvedValue({ + ...buildQuotableOrder(), + checkoutInvoice: { + id: 'checkout-invoice-1', + fiatCurrency: 'USD', + paymentMethod: PaymentMethod.Btc + } + }); + + await service.setDeliveryCost('order-1', { deliveryCost: 12.5 }); + + expect(invoiceService.issueInvoice).toHaveBeenCalledWith({ + paymentMethod: PaymentMethod.Btc, + reason: InvoiceReason.Shipping, + contextId: 'order-1', + amountFiat: 12.5 + }); + }); }); describe('fulfillManualLine', () => { diff --git a/backend/src/modules/order/services/OrderService.ts b/backend/src/modules/order/services/OrderService.ts index abc0a2d..34c229a 100644 --- a/backend/src/modules/order/services/OrderService.ts +++ b/backend/src/modules/order/services/OrderService.ts @@ -15,7 +15,6 @@ import type { InvoiceExtended } from '../../payment/types/InvoiceExtended'; import type { InvoicePaymentExtended } from '../../payment/types/InvoicePaymentExtended'; import { InvoiceReason } from '../../payment/types/InvoiceReason'; import { InvoiceService } from '../../payment/services/InvoiceService'; -import { PaymentMethod } from '../../payment/types/PaymentMethod'; import { DeliveryMode } from '../../product/types/DeliveryMode'; import { SetDeliveryCostDto } from '../dto/SetDeliveryCostDto'; import type { ListOrdersQueryDto } from '../dto/ListOrdersQueryDto'; @@ -99,9 +98,11 @@ export class OrderService { 'checkoutInvoice', 'checkoutInvoice.payments', 'checkoutInvoice.moneroDetails', + 'checkoutInvoice.btcDetails', 'shippingInvoice', 'shippingInvoice.payments', 'shippingInvoice.moneroDetails', + 'shippingInvoice.btcDetails', 'lines', 'lines.manualFulfillment', 'discounts', @@ -244,7 +245,7 @@ export class OrderService { } const shippingInvoice = await this.invoiceService.issueInvoice({ - paymentMethod: PaymentMethod.Xmr, + paymentMethod: order.checkoutInvoice.paymentMethod, reason: InvoiceReason.Shipping, contextId: orderId, amountFiat: deliveryCost