diff --git a/src/routes/invoices.$invoiceId.tsx b/src/routes/invoices.$invoiceId.tsx index 9007577..0568b1b 100644 --- a/src/routes/invoices.$invoiceId.tsx +++ b/src/routes/invoices.$invoiceId.tsx @@ -141,6 +141,8 @@ function InvoiceDetail() { const canEdit = isAdmin || invoice.created_by === user?.id; const isDraft = invoice.status === "draft"; + // Line items, notes, and tax can be edited on any non-void invoice (not just drafts). + const canModify = canEdit && invoice.status !== "void"; const balance = Number(invoice.total) - Number(invoice.amount_paid); const setStatus = async (status: string) => { @@ -420,7 +422,7 @@ function InvoiceDetail() { Qty Rate Amount - {canEdit && isDraft && } + {canModify && } @@ -433,13 +435,13 @@ function InvoiceDetail() { {sub.billable ? formatCurrency(sub.subtotal) : "—"} - {canEdit && isDraft && } + {canModify && } {sub.items.map((it) => ( {it.work_date ? formatDate(it.work_date) : "—"} - {canEdit && isDraft ? ( + {canModify ? ( e.target.value !== it.description && updateItem(it.id, { description: e.target.value })} /> ) : ( @@ -454,13 +456,13 @@ function InvoiceDetail() { )} - {canEdit && isDraft ? ( + {canModify ? ( Number(e.target.value) !== Number(it.quantity) && updateItem(it.id, { quantity: Number(e.target.value) })} /> ) : Number(it.quantity).toFixed(2)} - {canEdit && isDraft ? ( + {canModify ? ( Number(e.target.value) !== Number(it.rate) && updateItem(it.id, { rate: Number(e.target.value) })} /> ) : formatCurrency(it.rate)} @@ -468,7 +470,7 @@ function InvoiceDetail() { {sub.billable ? formatCurrency(it.amount) : "—"} - {canEdit && isDraft && ( + {canModify && ( @@ -501,7 +503,7 @@ function InvoiceDetail() { - {canEdit && isDraft ? ( + {canModify ? (