- Shipped
- November 12, 2026 at 2:20 AM UTC
- Author
- Kamo
- Commit
- e57550d
- RecordInvoiceController (work orders and retail orders): POST {invoice}/credit-notes, GET credit-notes/{note}/pdf, GET credit-notes/{note}/delivery, POST credit-notes/{note}/send, POST {invoice}/refunds. Same rights as the invoice's other actions (MANAGE_SERVICE_WORK / MANAGE_ORDERS; viewing VIEW_*). A retail order's refunds are made on the order, so Record Refund is refused there, like Record Payment. - Email Credit Note reuses the invoice email machinery (InvoiceDelivery.sendTemplate, a recorded customer link) with commerce.credit_note_sent and the credit note's PDF; Sent and Shared shows it (email_kind CREDIT_NOTE). - The public invoice page gets the credit notes, credited/refunded totals, credit held and refund rows; CREDITED / REFUNDED / PARTIALLY_* statuses. A fully credited or refunded invoice is not emailed as an invoice. - An approved return or an order marked Refunded settles the order's invoice (refunds carried over); the order's Invoice tab and the account's invoice list reconcile refunded orders on read.
