updates
This commit is contained in:
@@ -13,6 +13,7 @@ import { ScrollArea } from "@/shared/components/ui/scroll-area"
|
||||
import { BillForm } from "@/modules/bills/bill-form"
|
||||
import { toRelation } from "@/shared/lib/utils"
|
||||
import { usePurchaseOrder } from "./purchase-order-context"
|
||||
import { getFullName } from "@/shared/utils/getFullName"
|
||||
|
||||
/**
|
||||
* Maps a Purchase Order data object to a complete BillFormValues shape so that
|
||||
@@ -26,9 +27,9 @@ function mapPOToBillInitialData(po: Record<string, any>) {
|
||||
notes: po.notes ?? "",
|
||||
|
||||
// Relation fields — must be { value, label } objects for RhfAsyncSelectField
|
||||
vendor: toRelation(po.vendor_id, po.vendor_name),
|
||||
department: toRelation(po.department_id, po.department_name),
|
||||
job_card: toRelation(po.job_card_id, po.job_card_name ?? po.job_card_number),
|
||||
vendor: toRelation(po.vendor_id, getFullName(po.vendor)),
|
||||
department: toRelation(po.department_id, po.department.name),
|
||||
job_card: toRelation(po.job_card_id, po.job_card.title ),
|
||||
// Link bill back to the source PO
|
||||
purchase_order: toRelation(po.id, po.order_number ?? po.title),
|
||||
|
||||
|
||||
@@ -11,8 +11,10 @@ import {
|
||||
RhfTextareaField,
|
||||
RhfAsyncSelectField,
|
||||
RhfDateField,
|
||||
RhfAutoGenerateField,
|
||||
} from "@/shared/components/form"
|
||||
import { PartsSelectorField } from "@/modules/parts/parts-selector-field"
|
||||
import { VendorForm } from "@/modules/vendors/vendor-form"
|
||||
import { toast } from "sonner"
|
||||
import { useAuthApi } from "@/shared/useApi"
|
||||
import { useResourceForm } from "@/shared/hooks/use-resource-form"
|
||||
@@ -38,7 +40,7 @@ export type PurchaseOrderFormProps = {
|
||||
|
||||
const DEFAULT_VALUES: PurchaseOrderFormValues = {
|
||||
vendor: null,
|
||||
order_number: "" ,
|
||||
order_number: "",
|
||||
job_card: null,
|
||||
department: null,
|
||||
title: "",
|
||||
@@ -98,6 +100,13 @@ const mapLookupOption = (item: any) => ({
|
||||
label: item.name,
|
||||
})
|
||||
|
||||
const getVendorLabel = (item: any) => getFullName(item) || item.company_name || item.name || `#${item.id}`
|
||||
|
||||
const mapVendorOption = (item: any) => ({
|
||||
value: String(item.id),
|
||||
label: getVendorLabel(item),
|
||||
})
|
||||
|
||||
const STORE_OBJECT = { getOptionValue: (o: any) => o, getOptionLabel: (o: any) => o.label }
|
||||
|
||||
// ── Component ──
|
||||
@@ -147,8 +156,8 @@ export function PurchaseOrderForm({ resourceId, initialData, onSuccess }: Purcha
|
||||
<FieldGroup>
|
||||
|
||||
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
||||
<RhfTextField name="title" label="Title" placeholder="Enter purchase order title" required />
|
||||
<RhfTextField name="order_number" label="Order Number" placeholder="Enter purchase order number" required />
|
||||
<RhfTextField name="title" label="Title" placeholder="Enter purchase order title" required />
|
||||
<RhfAutoGenerateField autoFetch table="purchase-order" name="order_number" label="Order Number" placeholder="Enter purchase order number" required />
|
||||
<RhfDateField name="order_date" label="Order Date" />
|
||||
<RhfDateField name="delivery_date" label="Delivery Date" />
|
||||
</div>
|
||||
@@ -160,7 +169,16 @@ export function PurchaseOrderForm({ resourceId, initialData, onSuccess }: Purcha
|
||||
placeholder="Select vendor"
|
||||
queryKey={[VENDOR_ROUTES.INDEX]}
|
||||
listFn={() => api.vendors.list()}
|
||||
mapOption={(op: any) => ({ label: getFullName(op as any), value: String(op.id) })}
|
||||
mapOption={mapVendorOption}
|
||||
createForm={({ onSuccess }) => (
|
||||
<VendorForm
|
||||
onSuccess={(data) => {
|
||||
const vendor = (data as any)?.data ?? data
|
||||
onSuccess(vendor?.id ? mapVendorOption(vendor) : undefined)
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
createLabel="Vendor"
|
||||
{...STORE_OBJECT}
|
||||
/>
|
||||
<RhfAsyncSelectField
|
||||
|
||||
Reference in New Issue
Block a user