Skip to content

Commit 41a60a3

Browse files
committed
fix: invoice number generation and PDF styling
Invoice Number: - Make invoice_number optional in createInvoiceSchema - Backend now generates invoice number if not provided - Properly trims and checks for empty strings - Removes frontend invoice number generation to avoid race conditions PDF Styling: - Update invoice number color to indigo (#6366F1) for consistency
1 parent db44951 commit 41a60a3

File tree

5 files changed

+6
-7
lines changed

5 files changed

+6
-7
lines changed

apps/api/src/routes/invoices.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,8 @@ invoices.post('/', async (c) => {
182182
const invoiceId = generateUUID();
183183
const now = new Date().toISOString();
184184

185-
// Generate invoice number if not provided
186-
let invoiceNumber = data.invoice_number;
185+
// Generate invoice number if not provided or empty
186+
let invoiceNumber = data.invoice_number?.trim();
187187
if (!invoiceNumber && settings) {
188188
invoiceNumber = generateInvoiceNumber(settings.invoice_prefix, settings.next_invoice_number);
189189
// Update next invoice number

apps/api/src/services/pdf.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export class PDFService {
9090
.invoice-number {
9191
font-size: 28px;
9292
font-weight: 700;
93-
color: #2563eb;
93+
color: #6366F1;
9494
margin-bottom: 8px;
9595
}
9696

apps/web/src/pages/invoices/form.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,8 @@ export function InvoiceFormPage() {
119119
dueDate.setDate(dueDate.getDate() + days);
120120
setValue('due_date', dueDate.toISOString().split('T')[0]);
121121

122-
// Generate invoice number
123-
const invoiceNumber = `${settings.invoice_prefix}-${settings.next_invoice_number.toString().padStart(5, '0')}`;
124-
setValue('invoice_number', invoiceNumber);
122+
// Don't set invoice_number for new invoices - let the backend generate it
123+
// This ensures proper incrementing even with concurrent invoice creation
125124
}
126125
}, [settings, isEditing, setValue]);
127126

170 KB
Loading

packages/shared/src/schemas.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ export const invoiceSchema = z.object({
116116

117117
export const createInvoiceSchema = z.object({
118118
client_id: z.string().uuid('Invalid client ID'),
119-
invoice_number: z.string().min(1, 'Invoice number is required').max(50),
119+
invoice_number: z.string().max(50).optional(), // Optional - backend generates if not provided
120120
issue_date: z.string(),
121121
due_date: z.string(),
122122
currency: currencySchema,

0 commit comments

Comments
 (0)