From a4d067fbe233c7eaf83dbf9b9b3c69f30a31fae1 Mon Sep 17 00:00:00 2001 From: Alonso Lopez Date: Wed, 24 Jun 2026 05:24:19 +0000 Subject: [PATCH 1/2] 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 1ecd89809b..ce31fa6d54 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 @@ -107,6 +108,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 = ( @@ -116,6 +128,9 @@ export function RenderStockItem( {instance.batch && ( )} + {showStatus && ( + + )} ); From 49609188469fcaf368dc412e17c9a013013ac32d Mon Sep 17 00:00:00 2001 From: Alonso Lopez Date: Sun, 28 Jun 2026 08:11:34 +0000 Subject: [PATCH 2/2] 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 ce31fa6d54..c65c14af2f 100644 --- a/src/frontend/src/components/render/Stock.tsx +++ b/src/frontend/src/components/render/Stock.tsx @@ -108,11 +108,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 3fd3acbc41..bc33a670a8 100644 --- a/src/frontend/src/forms/BuildForms.tsx +++ b/src/frontend/src/forms/BuildForms.tsx @@ -570,6 +570,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 125ca7f894..4630ea1c4d 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'; @@ -318,6 +319,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,