From f86271dd03a6dd0304c866090d2adf6a8ea52615 Mon Sep 17 00:00:00 2001 From: Alonso Lopez Date: Wed, 24 Jun 2026 05:24:19 +0000 Subject: [PATCH 1/3] fix: Show badges for flagged stock items --- src/frontend/src/components/render/Stock.tsx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/frontend/src/components/render/Stock.tsx b/src/frontend/src/components/render/Stock.tsx index 358413bfde59..64408b1e9466 100644 --- a/src/frontend/src/components/render/Stock.tsx +++ b/src/frontend/src/components/render/Stock.tsx @@ -13,6 +13,7 @@ import { type InstanceRenderInterface, RenderInlineModel } from './Instance'; +import { StatusRenderer, getStatusCodes } from './StatusRenderer'; /** * Inline rendering of a single StockLocation instance @@ -102,6 +103,17 @@ export function RenderStockItem( const showLocation: boolean = props.extra?.show_location !== false; const location: any = props.instance?.location_detail; + // Only flag the built-in "Attention needed" and "Damaged" stock statuses (#10769) + const statusKey = instance?.status_custom_key ?? instance?.status; + const flaggedStatusNames = ['ATTENTION', 'DAMAGED']; + const statusCodes = getStatusCodes(ModelType.stockitem); + const showStatus = + !!statusCodes && + Object.values(statusCodes.values).some( + (entry) => + entry.key == statusKey && flaggedStatusNames.includes(entry.name) + ); + // Form the "secondary" text to display const secondary: ReactNode = ( @@ -111,6 +123,9 @@ export function RenderStockItem( {instance.batch && ( )} + {showStatus && ( + + )} ); From 5b8d5a2beded2493d9b1f6f40c59289d7ed3d374 Mon Sep 17 00:00:00 2001 From: Alonso Lopez Date: Sun, 28 Jun 2026 08:11:34 +0000 Subject: [PATCH 2/3] Updated badge logic to only display on build order and sales order --- src/frontend/src/components/render/Stock.tsx | 2 +- src/frontend/src/forms/BuildForms.tsx | 3 +++ src/frontend/src/forms/SalesOrderForms.tsx | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/components/render/Stock.tsx b/src/frontend/src/components/render/Stock.tsx index 64408b1e9466..a6629f105aaa 100644 --- a/src/frontend/src/components/render/Stock.tsx +++ b/src/frontend/src/components/render/Stock.tsx @@ -103,11 +103,11 @@ export function RenderStockItem( const showLocation: boolean = props.extra?.show_location !== false; const location: any = props.instance?.location_detail; - // Only flag the built-in "Attention needed" and "Damaged" stock statuses (#10769) const statusKey = instance?.status_custom_key ?? instance?.status; const flaggedStatusNames = ['ATTENTION', 'DAMAGED']; const statusCodes = getStatusCodes(ModelType.stockitem); const showStatus = + props.extra?.show_status === true && !!statusCodes && Object.values(statusCodes.values).some( (entry) => diff --git a/src/frontend/src/forms/BuildForms.tsx b/src/frontend/src/forms/BuildForms.tsx index 8012bc44b8ec..539aaf9a7929 100644 --- a/src/frontend/src/forms/BuildForms.tsx +++ b/src/frontend/src/forms/BuildForms.tsx @@ -587,6 +587,9 @@ function BuildAllocateLineRow({ field_type: 'related field', api_url: apiUrl(ApiEndpoints.stock_item_list), model: ModelType.stockitem, + modelRenderer: ({ instance }: { instance: any }) => ( + + ), autoFill: !output || !!output?.serial, autoFillFilters: { serial: output?.serial diff --git a/src/frontend/src/forms/SalesOrderForms.tsx b/src/frontend/src/forms/SalesOrderForms.tsx index 6e9c955c5692..e5745273ae6b 100644 --- a/src/frontend/src/forms/SalesOrderForms.tsx +++ b/src/frontend/src/forms/SalesOrderForms.tsx @@ -15,6 +15,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import RemoveRowButton from '../components/buttons/RemoveRowButton'; import { StandaloneField } from '../components/forms/StandaloneField'; +import { RenderStockItem } from '../components/render/Stock'; import { ProgressBar } from '@lib/components/ProgressBar'; import { apiUrl } from '@lib/functions/Api'; @@ -320,6 +321,9 @@ function SalesOrderAllocateLineRow({ field_type: 'related field', api_url: apiUrl(ApiEndpoints.stock_item_list), model: ModelType.stockitem, + modelRenderer: ({ instance }: { instance: any }) => ( + + ), autoFill: true, filters: { available: true, From 3d510c5e1a9f67a5b5515fc843a38d1456f35102 Mon Sep 17 00:00:00 2001 From: Alonso Lopez Date: Sat, 15 Aug 2026 20:51:16 +0000 Subject: [PATCH 3/3] refactor: Remove unused modelRenderer for RenderStockItem in BuildForms and SalesOrderForms --- src/frontend/src/components/render/Stock.tsx | 19 +++++++------------ src/frontend/src/forms/BuildForms.tsx | 3 --- src/frontend/src/forms/SalesOrderForms.tsx | 4 ---- 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/frontend/src/components/render/Stock.tsx b/src/frontend/src/components/render/Stock.tsx index a6629f105aaa..4fa27673cb31 100644 --- a/src/frontend/src/components/render/Stock.tsx +++ b/src/frontend/src/components/render/Stock.tsx @@ -13,7 +13,7 @@ import { type InstanceRenderInterface, RenderInlineModel } from './Instance'; -import { StatusRenderer, getStatusCodes } from './StatusRenderer'; +import { StatusRenderer } from './StatusRenderer'; /** * Inline rendering of a single StockLocation instance @@ -104,15 +104,6 @@ export function RenderStockItem( const location: any = props.instance?.location_detail; const statusKey = instance?.status_custom_key ?? instance?.status; - const flaggedStatusNames = ['ATTENTION', 'DAMAGED']; - const statusCodes = getStatusCodes(ModelType.stockitem); - const showStatus = - props.extra?.show_status === true && - !!statusCodes && - Object.values(statusCodes.values).some( - (entry) => - entry.key == statusKey && flaggedStatusNames.includes(entry.name) - ); // Form the "secondary" text to display const secondary: ReactNode = ( @@ -123,8 +114,12 @@ export function RenderStockItem( {instance.batch && ( )} - {showStatus && ( - + {statusKey != null && ( + )} ); diff --git a/src/frontend/src/forms/BuildForms.tsx b/src/frontend/src/forms/BuildForms.tsx index 539aaf9a7929..8012bc44b8ec 100644 --- a/src/frontend/src/forms/BuildForms.tsx +++ b/src/frontend/src/forms/BuildForms.tsx @@ -587,9 +587,6 @@ function BuildAllocateLineRow({ field_type: 'related field', api_url: apiUrl(ApiEndpoints.stock_item_list), model: ModelType.stockitem, - modelRenderer: ({ instance }: { instance: any }) => ( - - ), autoFill: !output || !!output?.serial, autoFillFilters: { serial: output?.serial diff --git a/src/frontend/src/forms/SalesOrderForms.tsx b/src/frontend/src/forms/SalesOrderForms.tsx index e5745273ae6b..6e9c955c5692 100644 --- a/src/frontend/src/forms/SalesOrderForms.tsx +++ b/src/frontend/src/forms/SalesOrderForms.tsx @@ -15,7 +15,6 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import RemoveRowButton from '../components/buttons/RemoveRowButton'; import { StandaloneField } from '../components/forms/StandaloneField'; -import { RenderStockItem } from '../components/render/Stock'; import { ProgressBar } from '@lib/components/ProgressBar'; import { apiUrl } from '@lib/functions/Api'; @@ -321,9 +320,6 @@ function SalesOrderAllocateLineRow({ field_type: 'related field', api_url: apiUrl(ApiEndpoints.stock_item_list), model: ModelType.stockitem, - modelRenderer: ({ instance }: { instance: any }) => ( - - ), autoFill: true, filters: { available: true,