Fix/invoice delivery and payment accounts (#1116)

* fix: reconcile annual reports with final closing entries

* test: cover annual report depreciation and VAT balances

* Merge remote-tracking branch 'origin/main' into fix/usr-fdbck-ch

* fix: show exact invoice delivery details

* fix: use currency account in invoice emails

* fix: address invoice delivery review feedback

* fix: harden invoice delivery and payment accounts

* test: assert RLS-denied zero-row updates

* fix: close remaining invoice compliance gaps

* fix: harden invoice archive authorization

* fix: close invoice delivery review findings

* fix: verify delivery finalization results

* fix: cap combined invoice email recipients

* fix: close final invoice compliance findings

* fix: prevent stale payment account saves

* test: prove invoice delivery isolation

* fix: close invoice privacy review findings

* test: normalize delivery retention dates
This commit is contained in:
Mattsson
2026-07-23 09:54:02 +02:00
committed by GitHub
parent 321e684523
commit 466e55a015
83 changed files with 6619 additions and 671 deletions
+71 -1
View File
@@ -1697,6 +1697,64 @@
"firstname_note": "The first-name placeholder uses the first word of the customer's name.",
"toast_save_failed": "Could not save"
},
"settings_invoice_email_recipients": {
"heading": "Invoice email recipients",
"description": "These recipients are added automatically to every invoice email. You can add more recipients when sending an individual invoice.",
"cc_label": "Fixed copy (CC)",
"cc_placeholder": "info@company.com",
"cc_hint": "Enter one address per line, or separate addresses with commas or semicolons.",
"bcc_label": "Fixed blind copy (BCC)",
"bcc_placeholder": "archive@company.com",
"bcc_hint": "BCC recipients are hidden from the customer and other recipients.",
"invalid_title": "Invalid email address",
"invalid_description": "Check the address {address}.",
"too_many_title": "Too many recipients",
"too_many_description": "You can enter at most {count} fixed CC and BCC addresses in total.",
"save_failed": "Could not save the recipients",
"saved_title": "Recipients saved",
"saved_description": "The fixed CC and BCC recipients will be used for the next invoice email.",
"save_failed_title": "Could not save recipients",
"saving": "Saving...",
"save": "Save recipients"
},
"settings_invoice_payment_accounts": {
"heading": "Payment accounts by currency",
"description": "The invoice automatically shows the account matching its currency. A foreign-currency account must have an IBAN before the invoice can be sent.",
"currency_tabs_label": "Configured currencies",
"add_currency_label": "Add currency",
"add_currency_placeholder": "Select currency",
"add_currency": "Add account",
"account_heading": "Payment account for {currency}",
"foreign_account_hint": "This account is only used on invoices in {currency}.",
"remove_currency": "Remove account",
"bank_label": "Bank",
"clearing_label": "Clearing number",
"account_number_label": "Account number",
"bankgiro_label": "Bankgiro",
"plusgiro_label": "Plusgiro",
"swish_label": "Swish",
"iban_label": "IBAN",
"bic_label": "BIC/SWIFT",
"required_suffix": "(required)",
"validation_title": "Check the payment account",
"validation_clearing": "The clearing number for {currency} must contain 4 to 5 digits.",
"validation_account_number": "The account number for {currency} must contain 6 to 12 digits.",
"validation_bankgiro": "The bankgiro number for {currency} is invalid.",
"validation_plusgiro": "The plusgiro number for {currency} is invalid.",
"validation_swish": "The Swish number for {currency} is invalid.",
"validation_iban": "The IBAN for {currency} is invalid.",
"validation_bic": "The BIC/SWIFT for {currency} is invalid.",
"validation_foreign_iban": "Enter an IBAN for the {currency} payment account.",
"conflict_title": "Payment accounts changed elsewhere",
"conflict_description": "Reload the latest saved values before saving. Your unsaved edits will be discarded.",
"reload_server_values": "Reload saved values",
"save_failed": "Could not save the payment accounts",
"save_failed_title": "Could not save payment accounts",
"saved_title": "Payment accounts saved",
"saved_description": "New invoices use the account matching the invoice currency.",
"saving": "Saving...",
"save": "Save payment accounts"
},
"settings_period_locking": {
"heading": "Period locking",
"locked_through_label": "Bookkeeping locked through",
@@ -2689,6 +2747,7 @@
"load_customers_failed_description": "Check your connection and try again.",
"items_card_title": "Invoice lines",
"items_card_description": "Add products or services",
"more_references": "References & more",
"description_label": "Description",
"description_placeholder": "E.g. Instagram campaign",
"quantity_label": "Quantity",
@@ -2896,6 +2955,7 @@
"delivery_manual_unknown_details": "The invoice was delivered outside Accounted, so its recipients, message, and delivered file are unknown.",
"delivery_to_label": "To",
"delivery_cc_label": "Cc",
"delivery_bcc_label": "Bcc",
"delivery_reply_to_label": "Reply to",
"delivery_from_label": "Sender name",
"delivery_subject_label": "Subject",
@@ -3200,7 +3260,17 @@
"explain_deferred": "Register without booking: the invoice is marked as sent without a voucher. Booking happens in a separate step.",
"explain_credit_cash": "Cash method: the original invoice is unpaid, so no verifikat is created when the credit note is issued.",
"explain_email": "The invoice is sent to {email}.",
"explain_manual": "The invoice is marked as sent.",
"explain_manual": "The invoice is marked as sent, but no email is sent.",
"recipient_to_label": "To",
"recipient_fixed_cc_label": "Fixed CC",
"recipient_fixed_bcc_label": "Fixed BCC",
"recipient_none": "None",
"recipient_additional_cc_label": "Additional CC for this invoice",
"recipient_additional_bcc_label": "Additional BCC for this invoice",
"recipient_additional_placeholder": "name@company.com",
"recipient_additional_hint": "Separate multiple addresses with commas or semicolons.",
"recipient_invalid": "Invalid email address: {address}",
"recipient_too_many": "An invoice email can have at most {count} recipients in total.",
"cancel": "Cancel",
"later": "Do later",
"send_invoice": "Send invoice",
+71 -1
View File
@@ -1697,6 +1697,64 @@
"firstname_note": "Platshållaren förnamn använder första ordet i kundens namn.",
"toast_save_failed": "Kunde inte spara"
},
"settings_invoice_email_recipients": {
"heading": "Mottagare vid fakturautskick",
"description": "Dessa mottagare läggs automatiskt till på varje fakturamejl. Du kan komplettera listan när en enskild faktura skickas.",
"cc_label": "Fast kopia (CC)",
"cc_placeholder": "info@foretag.se",
"cc_hint": "En adress per rad, eller separera med komma eller semikolon.",
"bcc_label": "Fast dold kopia (BCC)",
"bcc_placeholder": "arkiv@foretag.se",
"bcc_hint": "BCC-mottagare visas inte för kunden eller övriga mottagare.",
"invalid_title": "Ogiltig e-postadress",
"invalid_description": "Kontrollera adressen {address}.",
"too_many_title": "För många mottagare",
"too_many_description": "Du kan ange högst {count} fasta CC- och BCC-adresser totalt.",
"save_failed": "Kunde inte spara mottagarna",
"saved_title": "Mottagare sparade",
"saved_description": "De fasta CC- och BCC-mottagarna används vid nästa fakturautskick.",
"save_failed_title": "Kunde inte spara mottagare",
"saving": "Sparar...",
"save": "Spara mottagare"
},
"settings_invoice_payment_accounts": {
"heading": "Betalningskonton per valuta",
"description": "Fakturan visar automatiskt kontot som matchar fakturans valuta. Ett utländskt konto måste ha IBAN för att fakturan ska kunna skickas.",
"currency_tabs_label": "Konfigurerade valutor",
"add_currency_label": "Lägg till valuta",
"add_currency_placeholder": "Välj valuta",
"add_currency": "Lägg till konto",
"account_heading": "Betalningskonto för {currency}",
"foreign_account_hint": "Detta konto används bara på fakturor i {currency}.",
"remove_currency": "Ta bort konto",
"bank_label": "Bank",
"clearing_label": "Clearingnummer",
"account_number_label": "Kontonummer",
"bankgiro_label": "Bankgiro",
"plusgiro_label": "Plusgiro",
"swish_label": "Swish",
"iban_label": "IBAN",
"bic_label": "BIC/SWIFT",
"required_suffix": "(obligatoriskt)",
"validation_title": "Kontrollera betalningskontot",
"validation_clearing": "Clearingnumret för {currency} måste vara 4 till 5 siffror.",
"validation_account_number": "Kontonumret för {currency} måste vara 6 till 12 siffror.",
"validation_bankgiro": "Bankgironumret för {currency} är ogiltigt.",
"validation_plusgiro": "Plusgironumret för {currency} är ogiltigt.",
"validation_swish": "Swish-numret för {currency} är ogiltigt.",
"validation_iban": "IBAN för {currency} är ogiltigt.",
"validation_bic": "BIC/SWIFT för {currency} är ogiltigt.",
"validation_foreign_iban": "Ange IBAN för betalningskontot i {currency}.",
"conflict_title": "Betalningskontona har ändrats någon annanstans",
"conflict_description": "Läs in de senast sparade värdena innan du sparar. Dina osparade ändringar tas bort.",
"reload_server_values": "Läs in sparade värden",
"save_failed": "Kunde inte spara betalningskontona",
"save_failed_title": "Kunde inte spara betalningskonton",
"saved_title": "Betalningskonton sparade",
"saved_description": "Nya fakturor använder kontot som matchar fakturans valuta.",
"saving": "Sparar...",
"save": "Spara betalningskonton"
},
"settings_period_locking": {
"heading": "Periodlåsning",
"locked_through_label": "Bokföring låst t.o.m.",
@@ -2689,6 +2747,7 @@
"load_customers_failed_description": "Kontrollera din anslutning och försök igen.",
"items_card_title": "Fakturarader",
"items_card_description": "Lägg till produkter eller tjänster",
"more_references": "Referenser & mer",
"description_label": "Beskrivning",
"description_placeholder": "T.ex. Instagram-kampanj",
"quantity_label": "Antal",
@@ -2896,6 +2955,7 @@
"delivery_manual_unknown_details": "Utskicket gjordes utanför Accounted. Mottagare, meddelande och den levererade filen är därför inte kända.",
"delivery_to_label": "Till",
"delivery_cc_label": "Kopia",
"delivery_bcc_label": "Dold kopia",
"delivery_reply_to_label": "Svara till",
"delivery_from_label": "Avsändarnamn",
"delivery_subject_label": "Ämne",
@@ -3200,7 +3260,17 @@
"explain_deferred": "Registrera utan bokföring: fakturan markeras som skickad utan verifikation. Bokföringen görs i ett separat steg.",
"explain_credit_cash": "Kontantmetoden: originalfakturan är obetald, så ingen verifikation skapas när kreditfakturan utfärdas.",
"explain_email": "Fakturan skickas till {email}.",
"explain_manual": "Fakturan markeras som skickad.",
"explain_manual": "Fakturan markeras som skickad, men inget e-postmeddelande skickas.",
"recipient_to_label": "Till",
"recipient_fixed_cc_label": "Fast CC",
"recipient_fixed_bcc_label": "Fast BCC",
"recipient_none": "Ingen",
"recipient_additional_cc_label": "Extra CC för denna faktura",
"recipient_additional_bcc_label": "Extra BCC för denna faktura",
"recipient_additional_placeholder": "namn@foretag.se",
"recipient_additional_hint": "Separera flera adresser med komma eller semikolon.",
"recipient_invalid": "Ogiltig e-postadress: {address}",
"recipient_too_many": "Ett fakturautskick får ha högst {count} mottagare totalt.",
"cancel": "Avbryt",
"later": "Gör senare",
"send_invoice": "Skicka faktura",