feat(invoices): offer proforma where the invoice is created (#2217) (#2254)

Proforma existed (document_type 'proforma', its own conversion path and
views) but the only way to pick it was the collapsed Förval panel inside
the editor. A user coming from Fortnox looked for it next to "Ny faktura",
did not find it, and concluded the feature was missing.

"Ny proformafaktura" is now an entry in the create split button on
/invoices, driven by ?proforma=1 exactly like ?quote=1 drives "Ny
offert": the URL opens NewInvoiceDialog with the proforma type
preselected, the dialog's accessible title says so, and closing the
dialog clears the param. Keys added to sv and en.

Closes #2217


Claude-Session: https://claude.ai/code/session_01VnConrmMCxJRQ5kfiPPWyy

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-09-03 18:56:14 +02:00
committed by GitHub
co-authored by Jakob Wennberg Claude Fable 5.1
parent c3b7e79af8
commit 2c3ffaf51c
4 changed files with 33 additions and 4 deletions
+4 -2
View File
@@ -30,7 +30,7 @@ interface Props {
copyFromId?: string | null
/** Preselect the självfaktura tab (split-button entry on /invoices). */
selfBilled?: boolean
/** Preselect a document type, e.g. 'quote' ("Ny offert" split-button entry). */
/** Preselect a document type: 'quote' ("Ny offert") or 'proforma' ("Ny proformafaktura") split-button entries. */
documentType?: InvoiceDocumentType
}
@@ -146,7 +146,9 @@ export default function NewInvoiceDialog({
? t('title_copy')
: documentType === 'quote' && !selfBilled
? t('title_quote')
: t('title_invoice')}
: documentType === 'proforma' && !selfBilled
? t('title_proforma')
: t('title_invoice')}
</DialogTitle>
{copyFromId ? (
copyLoadFailed ? (