From 315a9c77598558fb9157ec581d6639725c5e3e47 Mon Sep 17 00:00:00 2001 From: davidels1 <87242587+davidels1@users.noreply.github.com> Date: Wed, 14 Jan 2026 09:01:49 +0200 Subject: [PATCH] feat(purchase-orders): add edit functionality and improve form validation - Implement EditPurchaseOrderDialog for modifying existing orders - Enhance form validation with better number handling and error messages - Add subtotal calculation to purchase order forms - Improve PDF generation with logo support and better layout - Update column definitions to include edit action - Add className prop to StockItemSearch for better styling control --- public/icons/icon-192x192.png | Bin 2745 -> 23623 bytes public/icons/icon-192x192.pngsss | Bin 0 -> 2745 bytes public/icons/icon-512x512.png | Bin 11518 -> 23623 bytes public/icons/icon-512x512.pngssss | Bin 0 -> 11518 bytes public/jeilogo.png | Bin 0 -> 23623 bytes .../EditPurchaseOrderDialog.tsx | 178 ++++++++++++++++++ .../PurchaseOrderDataTable.tsx | 143 +++++++++++--- .../purchase-orders/PurchaseOrderForm.tsx | 85 +++++++-- .../purchase-orders/StockItemSearch.tsx | 5 +- src/components/purchase-orders/columns.tsx | 13 +- src/pages/PurchaseOrders.tsx | 4 +- 11 files changed, 378 insertions(+), 50 deletions(-) create mode 100644 public/icons/icon-192x192.pngsss create mode 100644 public/icons/icon-512x512.pngssss create mode 100644 public/jeilogo.png create mode 100644 src/components/purchase-orders/EditPurchaseOrderDialog.tsx diff --git a/public/icons/icon-192x192.png b/public/icons/icon-192x192.png index dda2e0abf1a37e9a2be31db62e06239a314af17d..c73698771541cae0e055df5f235e905fd5f4e0e7 100644 GIT binary patch literal 23623 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 literal 2745 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 literal 11518 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 literal 0 HcmV?d00001 diff --git a/src/components/purchase-orders/EditPurchaseOrderDialog.tsx b/src/components/purchase-orders/EditPurchaseOrderDialog.tsx new file mode 100644 index 0000000..9c97501 --- /dev/null +++ b/src/components/purchase-orders/EditPurchaseOrderDialog.tsx @@ -0,0 +1,178 @@ +"use client" + +import * as React from "react" +import { zodResolver } from "@hookform/resolvers/zod" +import { useForm, useFieldArray } from "react-hook-form" +import * as z from "zod" +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog" +import { Button } from "@/components/ui/button" +import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form" +import { Input } from "@/components/ui/input" +import pb from "@/lib/pocketbase" +import { PurchaseOrder } from "./columns" +import { showError, showSuccess } from "@/utils/toast" + +const rowSchema = z.object({ + stockItemId: z.string(), + itemName: z.string(), + quantity: z.coerce.number().int().min(1), + unitPriceGBP: z.coerce.number().min(0), +}) + +const formSchema = z.object({ + rows: z.array(rowSchema), +}) + +interface EditPurchaseOrderDialogProps { + open: boolean + onOpenChange: (open: boolean) => void + order: PurchaseOrder + refreshData: () => void +} + +export function EditPurchaseOrderDialog({ open, onOpenChange, order, refreshData }: EditPurchaseOrderDialogProps) { + const form = useForm>({ + resolver: zodResolver(formSchema), + defaultValues: { + rows: order.items.map((item, idx) => ({ + stockItemId: item.stockItemId, + itemName: item.itemName, + quantity: order.quantities[idx] ?? 1, + unitPriceGBP: Number(item.costPriceGBP ?? 0), + })), + }, + }) + + const { fields } = useFieldArray({ + control: form.control, + name: "rows", + }) + + const rowsValues = form.watch("rows") + const subtotalGBP = React.useMemo( + () => + (rowsValues || []).reduce( + (sum, r) => sum + (Number(r.quantity || 0) * Number(r.unitPriceGBP || 0)), + 0 + ), + [rowsValues] + ) + + const onSubmit = async (values: z.infer) => { + try { + await pb.collection("purchase_orders").update(order.id, { + quantities: values.rows.map(r => r.quantity), + }) + + try { + await Promise.all(values.rows.map(async (r, idx) => { + const existingGBP = Number(order.items[idx].costPriceGBP ?? 0) + const newGBP = Number(r.unitPriceGBP || 0) + if (Number.isFinite(newGBP) && newGBP >= 0 && newGBP !== existingGBP) { + await pb.collection("stock_items").update(r.stockItemId, { cost_price_gbp: newGBP }) + } + })) + } catch (e) { + console.error("Stock price update error:", e) + } + + showSuccess("Purchase order updated") + refreshData() + onOpenChange(false) + } catch (e: any) { + console.error("Update order error:", e) + showError("Failed to update purchase order") + } + } + + return ( +

+ + + Edit Purchase Order + Order ID: {order.id} + +
+ +
+

Items

+ {fields.map((field, index) => ( +
+ ( + + Item + + + + + + )} + /> + ( + + Qty + + field.onChange(e.target.value.replace(/[^0-9]/g, ""))} + /> + + + + )} + /> + ( + + Unit Price (£) + + field.onChange(e.target.value.replace(",", "."))} + /> + + + + )} + /> +
+ ))} +
+
+
Items total (GBP)
+
£{subtotalGBP.toFixed(2)}
+
+
+
+ +
+ +
+
+ ) +} diff --git a/src/components/purchase-orders/PurchaseOrderDataTable.tsx b/src/components/purchase-orders/PurchaseOrderDataTable.tsx index e3dfe92..36cb233 100644 --- a/src/components/purchase-orders/PurchaseOrderDataTable.tsx +++ b/src/components/purchase-orders/PurchaseOrderDataTable.tsx @@ -25,6 +25,7 @@ import { jsPDF } from "jspdf" import { ReceiveStockDialog } from "./ReceiveStockDialog" import pb from "@/lib/pocketbase" import { createColumns, PurchaseOrder } from "./columns" +import { EditPurchaseOrderDialog } from "./EditPurchaseOrderDialog" import { Dialog, DialogContent, @@ -65,6 +66,7 @@ export function PurchaseOrderDataTable({ const [receiveDialogOpen, setReceiveDialogOpen] = React.useState(false) const [selectedOrder, setSelectedOrder] = React.useState(null) const [viewDialogOpen, setViewDialogOpen] = React.useState(false) + const [editDialogOpen, setEditDialogOpen] = React.useState(false) const openReceiveDialog = (order: PurchaseOrder) => { setSelectedOrder(order) @@ -81,12 +83,53 @@ export function PurchaseOrderDataTable({ setViewDialogOpen(true) } + const openEditDialog = (order: PurchaseOrder) => { + setSelectedOrder(order) + setEditDialogOpen(true) + } + const closeViewDialog = () => { setSelectedOrder(null) setViewDialogOpen(false) } - const generatePDF = (order: PurchaseOrder) => { + let logoDataUrlCache: string | null = null + const getLogoDataUrl = async (): Promise => { + if (logoDataUrlCache) return logoDataUrlCache + try { + const tryPaths = ["/brand.png", "/jei-logo.svg", "/icons/icon-512x512.png"] + const srcPath = tryPaths[0] + const img = new Image() + img.crossOrigin = "anonymous" + img.src = srcPath + await new Promise((resolve, reject) => { + img.onload = resolve + img.onerror = reject + }) + const canvas = document.createElement("canvas") + const targetW = 80 + const targetH = 80 + canvas.width = targetW + canvas.height = targetH + const ctx = canvas.getContext("2d") + if (!ctx) return null + ctx.clearRect(0, 0, targetW, targetH) + // preserve aspect ratio inside target box + const scale = Math.min(targetW / img.width, targetH / img.height) + const drawW = img.width * scale + const drawH = img.height * scale + const dx = (targetW - drawW) / 2 + const dy = (targetH - drawH) / 2 + ctx.drawImage(img, dx, dy, drawW, drawH) + const dataUrl = canvas.toDataURL("image/png") + logoDataUrlCache = dataUrl + return dataUrl + } catch { + return null + } + } + + const generatePDF = async (order: PurchaseOrder) => { try { console.log("Generating PDF for order:", order); const doc = new jsPDF(); @@ -97,16 +140,34 @@ export function PurchaseOrderDataTable({ const darkText = "#1a1a1a"; const lightGray = "#f5f5f5"; const mediumGray = "#666666"; + const pageHeight = (doc.internal as any).pageSize.getHeight ? (doc.internal as any).pageSize.getHeight() : doc.internal.pageSize.height; + const bottomMargin = 20; + const itemsTopY = 20; + const renderItemsHeader = (startY: number) => { + doc.setFillColor(brandBlack); + doc.roundedRect(14, startY, 182, 10, 1, 1, 'F'); + doc.setFont("helvetica", "bold"); + doc.setFontSize(9); + doc.setTextColor(255, 255, 255); + doc.text("#", 17, startY + 6); + doc.text("Description", 28, startY + 6); + doc.text("SKU", 100, startY + 6); + doc.text("Qty", 130, startY + 6, { align: "center" }); + doc.text("Unit Price", 155, startY + 6, { align: "right" }); + doc.text("Total", 188, startY + 6, { align: "right" }); + }; - // Create branded logo box - doc.setFillColor(brandBlack); - doc.roundedRect(14, 10, 20, 20, 3, 3, 'F'); - doc.setFont("helvetica", "bold"); - doc.setFontSize(16); - doc.setTextColor(255, 255, 255); - doc.text("JEI", 24, 23, { align: "center" }); // --- Modern Header with black background --- + // --- Modern Header with black background --- doc.setFillColor(brandBlack); doc.rect(0, 0, 210, 45, 'F'); + const logoDataUrl = await getLogoDataUrl() + if (logoDataUrl) { + doc.addImage(logoDataUrl, "PNG", 14, 9, 26, 26) + } else { + // Fallback simple box if logo couldn't load + doc.setFillColor(brandBlack); + doc.roundedRect(14, 9, 26, 26, 3, 3, 'F'); + } doc.setFillColor(accentYellow); doc.rect(0, 45, 210, 2, 'F'); // Accent line @@ -221,20 +282,7 @@ export function PurchaseOrderDataTable({ y += 8; - // Modern table header - doc.setFillColor(brandBlack); - doc.roundedRect(14, y, 182, 10, 1, 1, 'F'); - - doc.setFont("helvetica", "bold"); - doc.setFontSize(9); - doc.setTextColor(255, 255, 255); - doc.text("#", 17, y + 6); - doc.text("Description", 28, y + 6); - doc.text("SKU", 100, y + 6); - doc.text("Qty", 130, y + 6, { align: "center" }); - doc.text("Unit Price", 155, y + 6, { align: "right" }); - doc.text("Total", 188, y + 6, { align: "right" }); - + renderItemsHeader(y); y += 10; // Table rows with alternating colors and proper text wrapping @@ -253,6 +301,13 @@ export function PurchaseOrderDataTable({ const maxDescWidth = 65; const wrappedDesc = doc.splitTextToSize(item.itemName, maxDescWidth); const rowHeight = Math.max(10, wrappedDesc.length * 5 + 5); // Dynamic height + const bottomLimit = pageHeight - bottomMargin; + if (y + rowHeight > bottomLimit) { + doc.addPage(); + y = itemsTopY; + renderItemsHeader(y); + y += 10; + } // Alternating row background if (rowColor) { @@ -282,6 +337,11 @@ export function PurchaseOrderDataTable({ // --- Modern Totals Section --- y += 5; + const bottomLimit = pageHeight - bottomMargin; + if (y + 48 > bottomLimit) { + doc.addPage(); + y = itemsTopY; + } const carriageCharge = order.carriageCharge || 0; const grandTotal = subtotal + carriageCharge; @@ -289,7 +349,7 @@ export function PurchaseOrderDataTable({ // Totals box - increased height to accommodate carriage charge doc.setFillColor(lightGray); doc.roundedRect(130, y, 66, 38, 2, 2, 'F'); - + y += 7; doc.setFont("helvetica", "normal"); doc.setFontSize(9); @@ -324,6 +384,10 @@ export function PurchaseOrderDataTable({ // --- Footer (with more spacing from grand total) --- y += 25; // Add more space between grand total and footer + if (y + 10 > bottomLimit) { + doc.addPage(); + y = itemsTopY; + } doc.setFont("helvetica", "italic"); doc.setFontSize(8); doc.setTextColor(mediumGray); @@ -331,7 +395,9 @@ export function PurchaseOrderDataTable({ doc.text("This is a computer-generated document and does not require a signature.", 105, y + 5, { align: "center" }); console.log("Saving PDF..."); - doc.save(`PO_${order.id}_${new Date().toISOString().split('T')[0]}.pdf`); + const rawName = order.orderNumber || order.id || `PO_${Date.now()}` + const safeName = String(rawName).replace(/[^A-Za-z0-9_-]/g, "_") + doc.save(`PO_${safeName}.pdf`); console.log("PDF saved successfully!"); } catch (error: any) { console.error("Error generating PDF:", error); @@ -360,7 +426,11 @@ export function PurchaseOrderDataTable({ } } - const columnsWithActions = React.useMemo(() => createColumns({ onDownloadPdf: generatePDF, onViewOrder: handleViewOrder }), [generatePDF, handleViewOrder]); + const handleDownloadPdf = React.useCallback((order: PurchaseOrder) => { void generatePDF(order) }, []) + const columnsWithActions = React.useMemo( + () => createColumns({ onDownloadPdf: handleDownloadPdf, onViewOrder: handleViewOrder, onEditOrder: openEditDialog }), + [handleDownloadPdf, handleViewOrder] + ); const table = useReactTable({ data: data as PurchaseOrder[], @@ -449,16 +519,18 @@ export function PurchaseOrderDataTable({ ))} - {order.status === "Pending Approval" && ( + {(order.status === "Pending" || order.status === "Pending Approval") && ( <> + )} - {order.status === "Approved" && ( + {(order.status === "Approved" || order.status === "Ordered") && ( <> + )} {order.status === "Received" && ( @@ -520,6 +592,21 @@ export function PurchaseOrderDataTable({ refreshData={refreshData} /> )} + {selectedOrder && ( + { + if (!open) { + setEditDialogOpen(false) + setSelectedOrder(null) + } else { + setEditDialogOpen(true) + } + }} + order={selectedOrder} + refreshData={refreshData} + /> + )} ) -} \ No newline at end of file +} diff --git a/src/components/purchase-orders/PurchaseOrderForm.tsx b/src/components/purchase-orders/PurchaseOrderForm.tsx index 290988c..0a996a0 100644 --- a/src/components/purchase-orders/PurchaseOrderForm.tsx +++ b/src/components/purchase-orders/PurchaseOrderForm.tsx @@ -31,9 +31,9 @@ import { StockItemSearch } from "./StockItemSearch" const itemSchema = z.object({ stockItemId: z.string().min(1, { message: "Stock item ID is required." }), itemName: z.string().min(1, { message: "Item name is required." }), - quantity: z.number().int().positive(), + quantity: z.coerce.number().int().positive(), sku: z.string(), - costPrice: z.number(), + costPrice: z.coerce.number(), }) // Define the type for the items array @@ -45,7 +45,7 @@ const purchaseOrderFormSchema = z.object({ supplierName: z.string().min(1, { message: "Supplier name is required." }), accountRef: z.string().optional(), salesOrderNo: z.string().optional(), - carriageCharge: z.number().min(0).optional(), + carriageCharge: z.coerce.number().min(0).optional(), orderDate: z.date({ required_error: "Order date is required." }), items: z.array(itemSchema).min(1, { message: "At least one item is required." }), }) @@ -180,6 +180,17 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro name: "items", }); + const itemsValues = form.watch("items") as ItemSchemaType[]; + const subtotalGBP = React.useMemo( + () => + (itemsValues || []).reduce( + (sum, item) => + sum + (Number(item?.quantity || 0) * Number(item?.costPrice || 0)), + 0 + ), + [itemsValues] + ); + // Function to add a new item row const addItem = () => { @@ -218,14 +229,15 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro const selectedStockItem = stockItems.find(item => item.id === selectedItemId); if (selectedStockItem) { // Update the form fields with the selected stock item's details - handleItemChange(index, "stockItemId", selectedStockItem.id); - handleItemChange(index, "itemName", selectedStockItem.name); - handleItemChange(index, "sku", selectedStockItem.sku); + form.setValue(`items.${index}.stockItemId`, selectedStockItem.id, { shouldDirty: true }); + form.setValue(`items.${index}.itemName`, selectedStockItem.name, { shouldDirty: true }); + form.setValue(`items.${index}.sku`, selectedStockItem.sku, { shouldDirty: true }); // Use GBP price for purchase orders - handleItemChange(index, "costPrice", selectedStockItem.costPriceGBP); - // Quantity remains as is or defaults to 1 if not set - if (form.getValues("items")[index].quantity === 0) { - handleItemChange(index, "quantity", 1); + form.setValue(`items.${index}.costPrice`, selectedStockItem.costPriceGBP, { shouldDirty: true, shouldValidate: true }); + // Ensure quantity has a sensible default + const currentQty = form.getValues(`items.${index}.quantity`); + if (!currentQty || Number.isNaN(currentQty)) { + form.setValue(`items.${index}.quantity`, 1, { shouldDirty: true, shouldValidate: true }); } } } @@ -257,6 +269,24 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro console.log("Form values:", values); await pb.collection('purchase_orders').create(purchaseOrderData); + + // Update stock item GBP prices if missing or changed + try { + await Promise.all( + values.items.map(async (item) => { + const current = stockItems.find(si => si.id === item.stockItemId); + const newPrice = Number(item.costPrice || 0); + if (!current) return; + const existing = Number(current.costPriceGBP ?? 0); + if (Number.isFinite(newPrice) && newPrice > 0 && newPrice !== existing) { + await pb.collection('stock_items').update(item.stockItemId, { cost_price_gbp: newPrice }); + } + }) + ); + } catch (updateErr) { + console.error("Error updating stock item GBP prices:", updateErr); + } + showSuccess(`Purchase order ${values.orderNumber} created successfully!`); form.reset(); // Generate new order number for next use @@ -383,7 +413,10 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro

Order Items

{fields.map((item, index) => ( -
+
handleStockItemSelect(index, selectedItemId)} placeholder="Search by SKU or name..." + className="min-w-0" /> @@ -408,7 +442,7 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro SKU {/* Display SKU, but it's managed by handleStockItemSelect */} - + @@ -421,7 +455,14 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro Quantity - handleItemChange(index, "quantity", e.target.value)} /> + field.onChange(e.target.value.replace(/[^0-9]/g, ""))} + /> @@ -434,7 +475,15 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro Unit Price (£ GBP) - handleItemChange(index, "costPrice", e.target.value)} /> + field.onChange(e.target.value.replace(",", "."))} + /> @@ -452,10 +501,16 @@ export function PurchaseOrderForm({ setOpen, refreshData }: PurchaseOrderFormPro +
+
+
Items total (GBP)
+
£{subtotalGBP.toFixed(2)}
+
+
) -} \ No newline at end of file +} diff --git a/src/components/purchase-orders/StockItemSearch.tsx b/src/components/purchase-orders/StockItemSearch.tsx index a887d0a..05c454c 100644 --- a/src/components/purchase-orders/StockItemSearch.tsx +++ b/src/components/purchase-orders/StockItemSearch.tsx @@ -35,12 +35,13 @@ interface StockItemSearchProps { selectedItemName: string; onSelectItem: (itemId: string) => void; placeholder: string; + className?: string; } -export function StockItemSearch({ stockItems, selectedItemName, onSelectItem, placeholder }: StockItemSearchProps) { +export function StockItemSearch({ stockItems, selectedItemName, onSelectItem, placeholder, className }: StockItemSearchProps) { const [open, setOpen] = React.useState(false) const [search, setSearch] = React.useState("") @@ -51,7 +52,7 @@ export function StockItemSearch({ stockItems, selectedItemName, onSelectItem, pl variant="outline" role="combobox" aria-expanded={open} - className="w-full justify-between text-left font-normal" + className={cn("w-full justify-between text-left font-normal", className)} > {selectedItemName ? (
diff --git a/src/components/purchase-orders/columns.tsx b/src/components/purchase-orders/columns.tsx index dca9a78..4da0523 100644 --- a/src/components/purchase-orders/columns.tsx +++ b/src/components/purchase-orders/columns.tsx @@ -1,7 +1,7 @@ "use client" import { ColumnDef } from "@tanstack/react-table" -import { MoreHorizontal, Download, Eye } from "lucide-react" // Import Eye icon +import { MoreHorizontal, Download, Eye, Pencil } from "lucide-react" // Import Eye icon import { Button } from "@/components/ui/button" import { Dialog, @@ -45,10 +45,11 @@ export type PurchaseOrder = { interface ActionsColumnProps { onDownloadPdf: (order: PurchaseOrder) => void; onViewOrder: (order: PurchaseOrder) => void; // Add onViewOrder prop + onEditOrder?: (order: PurchaseOrder) => void; } // Export createColumns function -export const createColumns = ({ onDownloadPdf, onViewOrder }: ActionsColumnProps): ColumnDef[] => [ +export const createColumns = ({ onDownloadPdf, onViewOrder, onEditOrder }: ActionsColumnProps): ColumnDef[] => [ { accessorKey: "supplierName", header: "Supplier Name", @@ -101,6 +102,12 @@ export const createColumns = ({ onDownloadPdf, onViewOrder }: ActionsColumnProps View Order + {!!onEditOrder && ( + onEditOrder(order)}> + + Edit Order + + )} onDownloadPdf(order)}> Download PDF @@ -110,4 +117,4 @@ export const createColumns = ({ onDownloadPdf, onViewOrder }: ActionsColumnProps ) }, }, -] \ No newline at end of file +] diff --git a/src/pages/PurchaseOrders.tsx b/src/pages/PurchaseOrders.tsx index 72d477d..7711d06 100644 --- a/src/pages/PurchaseOrders.tsx +++ b/src/pages/PurchaseOrders.tsx @@ -100,7 +100,7 @@ const PurchaseOrders = () => { New Purchase Order - + New Purchase Order @@ -150,4 +150,4 @@ const PurchaseOrders = () => { ); }; -export default PurchaseOrders; \ No newline at end of file +export default PurchaseOrders;