diff --git a/prisma/migrations/20260323_add_billing_text/migration.sql b/prisma/migrations/20260323_add_billing_text/migration.sql
new file mode 100644
index 0000000..7442be9
--- /dev/null
+++ b/prisma/migrations/20260323_add_billing_text/migration.sql
@@ -0,0 +1,2 @@
+-- Add billing_text column to invoices table
+ALTER TABLE `invoices` ADD COLUMN `billing_text` VARCHAR(500) NULL AFTER `issued_by`;
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 55a33b9..e1f9950 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -166,6 +166,7 @@ model invoices {
tax_date DateTime? @db.Date
paid_date DateTime? @db.Date
issued_by String? @db.VarChar(255)
+ billing_text String? @db.VarChar(500)
notes String? @db.Text
internal_notes String? @db.Text
created_at DateTime? @default(now()) @db.DateTime(0)
diff --git a/src/admin/pages/InvoiceDetail.tsx b/src/admin/pages/InvoiceDetail.tsx
index 1671310..32dd970 100644
--- a/src/admin/pages/InvoiceDetail.tsx
+++ b/src/admin/pages/InvoiceDetail.tsx
@@ -77,6 +77,7 @@ interface InvoiceForm {
payment_method: string
constant_symbol: string
issued_by: string
+ billing_text: string
notes: string
bank_account_id: number | string
bank_name: string
@@ -271,6 +272,7 @@ export default function InvoiceDetail() {
payment_method: 'Příkazem',
constant_symbol: '0308',
issued_by: user?.fullName || '',
+ billing_text: '',
notes: '',
bank_account_id: '',
bank_name: '',
@@ -855,6 +857,16 @@ export default function InvoiceDetail() {
+
+ setForm(prev => ({ ...prev, billing_text: e.target.value }))}
+ className="admin-form-input"
+ placeholder="Fakturujeme Vám za: (ponechte prázdné pro výchozí)"
+ />
+
+
{ setForm(prev => ({ ...prev, issue_date: val })); setErrors(prev => ({ ...prev, issue_date: '' })) }} />
diff --git a/src/routes/admin/invoices-pdf.ts b/src/routes/admin/invoices-pdf.ts
index 71b5ebc..914f735 100644
--- a/src/routes/admin/invoices-pdf.ts
+++ b/src/routes/admin/invoices-pdf.ts
@@ -880,7 +880,7 @@ ${indentCSS}
- ${escapeHtml(t.billing)}
+ ${escapeHtml(invoice.billing_text || t.billing)}
diff --git a/src/schemas/invoices.schema.ts b/src/schemas/invoices.schema.ts
index 6c04df3..ae4e79c 100644
--- a/src/schemas/invoices.schema.ts
+++ b/src/schemas/invoices.schema.ts
@@ -27,6 +27,7 @@ export const CreateInvoiceSchema = z.object({
due_date: z.string().nullish(),
tax_date: z.string().nullish(),
issued_by: z.string().nullish(),
+ billing_text: z.string().nullish(),
notes: z.string().nullish(),
internal_notes: z.string().nullish(),
items: z.array(InvoiceItemSchema).optional(),
diff --git a/src/services/invoices.service.ts b/src/services/invoices.service.ts
index 278c923..942a9a2 100644
--- a/src/services/invoices.service.ts
+++ b/src/services/invoices.service.ts
@@ -251,6 +251,7 @@ export async function createInvoice(body: Record) {
due_date: body.due_date ? new Date(String(body.due_date)) : null,
tax_date: body.tax_date ? new Date(String(body.tax_date)) : null,
issued_by: body.issued_by ? String(body.issued_by) : null,
+ billing_text: body.billing_text ? String(body.billing_text) : null,
notes: body.notes ? String(body.notes) : null,
internal_notes: body.internal_notes ? String(body.internal_notes) : null,
},
@@ -293,7 +294,7 @@ export async function updateInvoice(id: number, body: Record) {
// Only allow full editing in 'issued' state
const isDraft = currentStatus === 'issued';
if (isDraft) {
- const strFields = ['currency', 'payment_method', 'constant_symbol', 'bank_name', 'bank_swift', 'bank_iban', 'bank_account', 'issued_by'];
+ const strFields = ['currency', 'payment_method', 'constant_symbol', 'bank_name', 'bank_swift', 'bank_iban', 'bank_account', 'issued_by', 'billing_text'];
for (const f of strFields) {
if (body[f] !== undefined) data[f] = body[f] ? String(body[f]) : null;
}