[dyad] wrote 3 file(s)
This commit is contained in:
parent
1d49b9d1f8
commit
10b03da677
2 changed files with 48 additions and 46 deletions
|
|
@ -23,7 +23,7 @@ import {
|
|||
} from "@/components/ui/dropdown-menu"
|
||||
import { jsPDF } from "jspdf"
|
||||
import { ReceiveStockDialog } from "./ReceiveStockDialog"
|
||||
import pb from "@/lib/pocketbase"
|
||||
import pb from "@/lib/pocketbase" // Import PocketBase client
|
||||
|
||||
export type PurchaseOrder = {
|
||||
id: string
|
||||
|
|
@ -192,52 +192,53 @@ export function PurchaseOrderDataTable<TData, TValue>({
|
|||
))}
|
||||
</thead>
|
||||
<tbody>
|
||||
{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())}
|
||||
{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>
|
||||
)}
|
||||
</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>
|
||||
)}
|
||||
</td>
|
||||
</tr>
|
||||
)
|
||||
})
|
||||
) : (
|
||||
<tr>
|
||||
<td colSpan={columns.length + 1} className="h-24 text-center">No results.</td>
|
||||
</tr>
|
||||
)}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</tr>
|
||||
)
|
||||
})
|
||||
) : (
|
||||
<tr>
|
||||
<td colSpan={columns.length + 1} className="h-24 text-center">No results.</td>
|
||||
</tr>
|
||||
)}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{selectedOrder && (
|
||||
<ReceiveStockDialog
|
||||
open={receiveDialogOpen}
|
||||
onOpenChange={setReceiveDialogOpen}
|
||||
onOpenChange={closeReceiveDialog}
|
||||
purchaseOrderId={selectedOrder.id}
|
||||
items={selectedOrder.items.map((item, idx) => ({
|
||||
stockItemId: item.stockItemId,
|
||||
|
|
|
|||
|
|
@ -20,14 +20,15 @@ import { showSuccess, showError } from "@/utils/toast"
|
|||
import pb from "@/lib/pocketbase"
|
||||
import { StockItem } from "@/components/stock/columns"
|
||||
|
||||
const statusOptions = ["Pending Approval", "Approved", "Rejected"] as const
|
||||
// Corrected status options to match the schema
|
||||
const statusOptions = ["Pending", "Ordered", "Received"] as const
|
||||
|
||||
const formSchema = z.object({
|
||||
supplierName: z.string().min(2, { message: "Supplier name must be at least 2 characters." }),
|
||||
status: z.enum(statusOptions),
|
||||
items: z.array(z.object({
|
||||
stockItemId: z.string({ required_error: "Select an item." }),
|
||||
quantity: z.coerce.number().int().positive({ message: "Quantity must be positive." }),
|
||||
quantity: z.number().int().positive({ message: "Quantity must be positive." }),
|
||||
})).min(1, { message: "At least one item is required." }),
|
||||
})
|
||||
|
||||
|
|
@ -67,7 +68,7 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro
|
|||
resolver: zodResolver(formSchema),
|
||||
defaultValues: {
|
||||
supplierName: "",
|
||||
status: "Pending Approval",
|
||||
status: "Pending", // Set default status to "Pending"
|
||||
items: [{ stockItemId: "", quantity: 1 }],
|
||||
},
|
||||
})
|
||||
|
|
@ -98,9 +99,9 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro
|
|||
form.reset()
|
||||
setOpen(false)
|
||||
refreshData()
|
||||
} catch (err: any) {
|
||||
} catch (err) {
|
||||
console.error("Failed to create purchase order:", err)
|
||||
showError(`Failed to create purchase order: ${err.message}`);
|
||||
showError("Failed to create purchase order. Please try again.")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue