From e24c4c56fae0a604fd6bbc456a9ed308d0117546 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 8 May 2024 12:19:09 +1000 Subject: [PATCH] [PUI] part stock (#7179) * [PUI] Update PartDetail page - Cleanup details fields - Add extra badge * Update StockItem table - Display items which are not "in stock" as red --- src/frontend/src/pages/part/PartDetail.tsx | 36 ++++++++++--------- .../src/tables/stock/StockItemTable.tsx | 17 ++++++++- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/frontend/src/pages/part/PartDetail.tsx b/src/frontend/src/pages/part/PartDetail.tsx index 1bb983e0c2..f897658890 100644 --- a/src/frontend/src/pages/part/PartDetail.tsx +++ b/src/frontend/src/pages/part/PartDetail.tsx @@ -188,18 +188,19 @@ export default function PartDetail() { ]; let tr: DetailsField[] = [ - { - type: 'string', - name: 'unallocated_stock', - unit: true, - label: t`Available Stock` - }, { type: 'string', name: 'total_in_stock', unit: true, label: t`In Stock` }, + { + type: 'string', + name: 'unallocated_stock', + unit: true, + label: t`Available Stock`, + hidden: part.total_in_stock == part.unallocated_stock + }, { type: 'string', name: 'minimum_stock', @@ -220,10 +221,7 @@ export default function PartDetail() { total: part.required_for_build_orders, progress: part.allocated_to_build_orders, label: t`Allocated to Build Orders`, - hidden: - !part.assembly || - (part.allocated_to_build_orders <= 0 && - part.required_for_build_orders <= 0) + hidden: !part.component || part.required_for_build_orders <= 0 }, { type: 'progressbar', @@ -231,10 +229,7 @@ export default function PartDetail() { total: part.required_for_sales_orders, progress: part.allocated_to_sales_orders, label: t`Allocated to Sales Orders`, - hidden: - !part.salable || - (part.allocated_to_sales_orders <= 0 && - part.required_for_sales_orders <= 0) + hidden: !part.salable || part.required_for_sales_orders <= 0 }, { type: 'string', @@ -306,7 +301,8 @@ export default function PartDetail() { name: 'creation_user', label: t`Created By`, badge: 'user', - icon: 'user' + icon: 'user', + hidden: !part.creation_user }, { type: 'string', @@ -645,11 +641,17 @@ export default function PartDetail() { return [ = part.minimum_stock ? 'green' : 'orange'} visible={part.in_stock > 0} key="in_stock" />, + , ]; diff --git a/src/frontend/src/tables/stock/StockItemTable.tsx b/src/frontend/src/tables/stock/StockItemTable.tsx index 0f2c7c4594..67165aa5b0 100644 --- a/src/frontend/src/tables/stock/StockItemTable.tsx +++ b/src/frontend/src/tables/stock/StockItemTable.tsx @@ -65,6 +65,18 @@ function stockItemTableColumns(): TableColumn[] { let extra: ReactNode[] = []; let color = undefined; + // Determine if a stock item is "in stock" + // TODO: Refactor this out into a function + let in_stock = + !record?.belongs_to && + !record?.consumed_by && + !record?.customer && + !record?.is_building && + !record?.sales_order && + !record?.expired && + record?.quantity && + record?.quantity > 0; + if (record.serial && quantity == 1) { text = `# ${record.serial}`; } @@ -166,7 +178,6 @@ function stockItemTableColumns(): TableColumn[] { } if (quantity <= 0) { - color = 'red'; extra.push(