Add legalForm-driven Pflichtangaben (register court/number, managing director)
Mirrors the Payload backend's new company-settings.legalForm field: when present, registerCourt/registerNumber/managingDirector now appear in the email footer (buildLegalFooterLines) and both invoice PDF footers, matching §37a HGB / §35a GmbHG requirements for registered legal forms. A sole proprietorship (the default) renders identically to before — these fields are only appended when actually set. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,10 @@ export const metadata: Metadata = {
|
||||
|
||||
const FALLBACK: CompanySettings = {
|
||||
sellerName: "",
|
||||
legalForm: "sole-proprietorship",
|
||||
registerCourt: null,
|
||||
registerNumber: null,
|
||||
managingDirector: null,
|
||||
sellerStreet: "",
|
||||
sellerZip: "",
|
||||
sellerCity: "",
|
||||
|
||||
@@ -121,6 +121,13 @@ export type InvoiceSeller = {
|
||||
vatId: string;
|
||||
taxRatePercent: number;
|
||||
bankDetails?: string | null;
|
||||
// Pflichtangaben in Geschäftsbriefen for registered legal forms (§37a
|
||||
// HGB / §35a GmbHG) — optional because a sole proprietorship (the
|
||||
// default legalForm in company-settings) has neither. Mirrors
|
||||
// invoicePdf.tsx's own InvoiceSeller — see that file's comment.
|
||||
registerCourt?: string | null;
|
||||
registerNumber?: string | null;
|
||||
managingDirector?: string | null;
|
||||
};
|
||||
|
||||
// Stornorechnung: every item at its full ordered quantity (nothing
|
||||
@@ -266,6 +273,8 @@ function CorrectionInvoiceDocument({ kind, order, seller }: { kind: CorrectionIn
|
||||
<Text>
|
||||
{seller.sellerName} · {seller.sellerStreet}, {seller.sellerZip} {seller.sellerCity} · {seller.sellerEmail} · USt-IdNr.{" "}
|
||||
{seller.vatId}
|
||||
{seller.registerCourt && seller.registerNumber ? ` · ${seller.registerCourt} · ${seller.registerNumber}` : ""}
|
||||
{seller.managingDirector ? ` · Geschäftsführung: ${seller.managingDirector}` : ""}
|
||||
</Text>
|
||||
{seller.bankDetails ? <Text style={{ marginTop: 4 }}>Bankverbindung (für Überweisung): {seller.bankDetails}</Text> : null}
|
||||
</View>
|
||||
|
||||
@@ -80,10 +80,13 @@ export const DEFAULT_LEGAL_FOOTER_LINES: string[] = [
|
||||
// plus VAT ID once assigned) — not just a friendly "brand · email" line.
|
||||
// Built from the same company-settings fields the invoice PDFs already
|
||||
// render (app/lib/invoicePdf.tsx), so there is exactly one source of truth
|
||||
// for this business's legal identity. If company-settings ever grows a
|
||||
// Handelsregister court/number or Geschäftsführer field (needed once this
|
||||
// business is a registered legal form rather than a sole proprietorship),
|
||||
// add those lines here too.
|
||||
// for this business's legal identity.
|
||||
//
|
||||
// registerCourt/registerNumber/managingDirector are conditionally required
|
||||
// on the Payload side (CompanySettings.ts, gated by legalForm) — only
|
||||
// appended here when actually present, so a sole proprietorship's footer
|
||||
// stays exactly as short as before this field set existed. Keep this in
|
||||
// sync with the Payload backend's own copy in src/lib/sellerInfo.ts.
|
||||
export function buildLegalFooterLines(seller: CompanySettings | null): string[] {
|
||||
if (!seller) return DEFAULT_LEGAL_FOOTER_LINES;
|
||||
const lines = [
|
||||
@@ -93,6 +96,8 @@ export function buildLegalFooterLines(seller: CompanySettings | null): string[]
|
||||
`E-Mail: ${seller.sellerEmail}`,
|
||||
];
|
||||
if (seller.vatId) lines.push(`USt-IdNr.: ${seller.vatId}`);
|
||||
if (seller.registerCourt && seller.registerNumber) lines.push(`${seller.registerCourt} · ${seller.registerNumber}`);
|
||||
if (seller.managingDirector) lines.push(`Geschäftsführung: ${seller.managingDirector}`);
|
||||
return lines;
|
||||
}
|
||||
|
||||
|
||||
@@ -119,6 +119,14 @@ export type InvoiceSeller = {
|
||||
vatId: string;
|
||||
taxRatePercent: number;
|
||||
bankDetails?: string | null;
|
||||
// Pflichtangaben in Geschäftsbriefen for registered legal forms (§37a
|
||||
// HGB / §35a GmbHG) — optional because a sole proprietorship (the
|
||||
// default legalForm in company-settings) has neither. See
|
||||
// buildLegalFooterLines() in emailTemplates.ts for the same fields'
|
||||
// equivalent treatment in the email footer.
|
||||
registerCourt?: string | null;
|
||||
registerNumber?: string | null;
|
||||
managingDirector?: string | null;
|
||||
};
|
||||
|
||||
// Used only by /company-settings-preview's Live Preview — a fixed sample
|
||||
@@ -305,6 +313,8 @@ export function InvoiceDocument({ order, seller }: { order: InvoiceOrder; seller
|
||||
<Text>
|
||||
{seller.sellerName} · {seller.sellerStreet}, {seller.sellerZip} {seller.sellerCity} · {seller.sellerEmail} · USt-IdNr.{" "}
|
||||
{seller.vatId}
|
||||
{seller.registerCourt && seller.registerNumber ? ` · ${seller.registerCourt} · ${seller.registerNumber}` : ""}
|
||||
{seller.managingDirector ? ` · Geschäftsführung: ${seller.managingDirector}` : ""}
|
||||
</Text>
|
||||
{seller.bankDetails ? <Text style={{ marginTop: 4 }}>Bankverbindung (für Überweisung): {seller.bankDetails}</Text> : null}
|
||||
</View>
|
||||
|
||||
@@ -645,6 +645,13 @@ export async function getEmailTemplate(
|
||||
|
||||
export type CompanySettings = {
|
||||
sellerName: string;
|
||||
// Drives whether registerCourt/registerNumber/managingDirector are
|
||||
// populated — mirrors Payload's CompanySettings.ts collection exactly
|
||||
// (same option values), see buildLegalFooterLines() in emailTemplates.ts.
|
||||
legalForm: "sole-proprietorship" | "e-k" | "gbr" | "ohg" | "kg" | "gmbh" | "ug" | "ag";
|
||||
registerCourt: string | null;
|
||||
registerNumber: string | null;
|
||||
managingDirector: string | null;
|
||||
sellerStreet: string;
|
||||
sellerZip: string;
|
||||
sellerCity: string;
|
||||
|
||||
Reference in New Issue
Block a user