[dyad] wrote 2 file(s)

This commit is contained in:
[dyad] 2025-09-12 10:20:23 +02:00
parent afe1727b77
commit 1d49b9d1f8
2 changed files with 43 additions and 43 deletions

View file

@ -23,6 +23,7 @@ import {
} from "@/components/ui/dropdown-menu"
import { jsPDF } from "jspdf"
import { ReceiveStockDialog } from "./ReceiveStockDialog"
import pb from "@/lib/pocketbase"
export type PurchaseOrder = {
id: string
@ -191,47 +192,46 @@ export function PurchaseOrderDataTable<TData, TValue>({
))}
</thead>
<tbody>
{table.getRowModel().rows.length ? (
table.getRowModel().rows.map(row => {
const order = row.original as PurchaseOrder
return (
<tr key={row.id} className="border-b hover:bg-gray-50">
{row.getVisibleCells().map(cell => (
<td key={cell.id} className="px-4 py-2 align-top">
{flexRender(cell.column.columnDef.cell, cell.getContext())}
</td>
))}
<td className="px-4 py-2 space-x-2">
{order.status === "Pending Approval" && (
<>
<Button size="sm" variant="outline" onClick={() => approveOrder(order)}>Approve</Button>
<Button size="sm" variant="destructive" onClick={() => rejectOrder(order)}>Reject</Button>
</>
)}
{order.status === "Approved" && (
<>
<Button size="sm" onClick={() => generatePDF(order)}>Download PDF</Button>
<Button size="sm" variant="secondary" onClick={() => openReceiveDialog(order)}>Receive Stock</Button>
</>
)}
{order.status === "Received" && (
<span className="text-green-600 font-semibold">Received</span>
)}
{order.status === "Rejected" && (
<span className="text-red-600 font-semibold">Rejected</span>
)}
{table.getRowModel().rows.map(row => {
const order = row.original as PurchaseOrder
return (
<tr key={row.id} className="border-b hover:bg-gray-50">
{row.getVisibleCells().map(cell => (
<td key={cell.id} className="px-4 py-2 align-top">
{flexRender(cell.column.columnDef.cell, cell.getContext())}
</td>
</tr>
)
})
) : (
<tr>
<td colSpan={columns.length + 1} className="h-24 text-center">No results.</td>
</tr>
)}
</tbody>
</table>
</div>
))}
<td className="px-4 py-2 space-x-2">
{order.status === "Pending Approval" && (
<>
<Button size="sm" variant="outline" onClick={() => approveOrder(order)}>Approve</Button>
<Button size="sm" variant="destructive" onClick={() => rejectOrder(order)}>Reject</Button>
</>
)}
{order.status === "Approved" && (
<>
<Button size="sm" onClick={() => generatePDF(order)}>Download PDF</Button>
<Button size="sm" variant="secondary" onClick={() => openReceiveDialog(order)}>Receive Stock</Button>
</>
)}
{order.status === "Received" && (
<span className="text-green-600 font-semibold">Received</span>
)}
{order.status === "Rejected" && (
<span className="text-red-600 font-semibold">Rejected</span>
)}
</td>
</tr>
)
})
) : (
<tr>
<td colSpan={columns.length + 1} className="h-24 text-center">No results.</td>
</tr>
)}
</tbody>
</table>
</div>
</div>
{selectedOrder && (

View file

@ -27,7 +27,7 @@ const formSchema = z.object({
status: z.enum(statusOptions),
items: z.array(z.object({
stockItemId: z.string({ required_error: "Select an item." }),
quantity: z.number().int().positive({ message: "Quantity must be positive." }),
quantity: z.coerce.number().int().positive({ message: "Quantity must be positive." }),
})).min(1, { message: "At least one item is required." }),
})
@ -98,9 +98,9 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro
form.reset()
setOpen(false)
refreshData()
} catch (err) {
} catch (err: any) {
console.error("Failed to create purchase order:", err)
showError("Failed to create purchase order. Please try again.")
showError(`Failed to create purchase order: ${err.message}`);
}
}