diff --git a/frontend/src/pages/NewProductOrder.tsx b/frontend/src/pages/NewProductOrder.tsx index c3d96e0..14476b6 100644 --- a/frontend/src/pages/NewProductOrder.tsx +++ b/frontend/src/pages/NewProductOrder.tsx @@ -11,6 +11,8 @@ import { listOutputTypes } from '../api/outputTypes' import { createOrder } from '../api/orders' import { estimatePrice } from '../api/pricing' import { listGlobalRenderPositions } from '../api/renderPositions' +import { listMaterials } from '../api/materials' +import type { Material } from '../api/materials' import type { Product, RenderPosition } from '../api/products' import type { GlobalRenderPosition } from '../api/renderPositions' import type { OutputType } from '../api/outputTypes' @@ -47,6 +49,7 @@ export default function NewProductOrderPage() { const [positionSelections, setPositionSelections] = useState({}) const [globalPositionSelections, setGlobalPositionSelections] = useState({}) const [notes, setNotes] = useState('') + const [materialOverride, setMaterialOverride] = useState('') const [submitting, setSubmitting] = useState(false) // ---- Step 1: load products with STEP files ---- @@ -72,6 +75,13 @@ export default function NewProductOrderPage() { queryFn: listGlobalRenderPositions, }) + const { data: allMaterials } = useQuery({ + queryKey: ['materials'], + queryFn: listMaterials, + enabled: step >= 3, + }) + const libMaterials = (allMaterials ?? []).filter((m: Material) => m.schaeffler_code !== null).sort((a: Material, b: Material) => a.name.localeCompare(b.name)) + function initPositionsForProduct(product: Product, globals: GlobalRenderPosition[] = []) { // Pre-select all per-product positions (if any) if ((product.render_positions?.length ?? 0) > 0) { @@ -378,6 +388,7 @@ export default function NewProductOrderPage() { output_type_id: l.outputType.id, render_position_id: l.position?.id ?? null, global_render_position_id: l.globalPosition?.id ?? null, + material_override: materialOverride || null, })), }) toast.success(`Draft order ${result.order_number} created — review and submit`) @@ -823,6 +834,27 @@ export default function NewProductOrderPage() { + {/* Material Override */} +
+ +

+ Apply a single material to all parts of all products in this order. Leave empty to use each product's own materials. +

+ +
+ {/* Notes */}