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; }