From 0e55c12ee9a39af2cdf44b1087d35399221b3c0f Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 29 Jun 2026 12:26:07 +0000 Subject: [PATCH] Adjustments for serialized stock --- src/frontend/src/forms/StockForms.tsx | 29 ++++++++++++++------ src/frontend/src/pages/stock/StockDetail.tsx | 2 ++ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/frontend/src/forms/StockForms.tsx b/src/frontend/src/forms/StockForms.tsx index 23db939a39..f8f90cdfed 100644 --- a/src/frontend/src/forms/StockForms.tsx +++ b/src/frontend/src/forms/StockForms.tsx @@ -757,7 +757,9 @@ function StockOperationsRow({ }, [record]); return !record ? ( -
{t`Loading...`}
+ + {t`Loading...`} + ) : ( <> [item.pk, item])); + // Only include items which are not serialized (serial number field is empty) + const validItems = items.filter((item) => !item.serial && item.quantity > 0); - const initialValue = mapAdjustmentItems(items).map((elem) => { + const records = Object.fromEntries(validItems.map((item) => [item.pk, item])); + + const initialValue = mapAdjustmentItems(validItems).map((elem) => { return { ...elem, quantity: 0 @@ -1107,9 +1112,12 @@ function stockAddFields(items: any[]): ApiFormFieldSet { return {}; } - const records = Object.fromEntries(items.map((item) => [item.pk, item])); + // Only include items which are not serialized (serial number field is empty) + const validItems = items.filter((item) => !item.serial); - const initialValue = mapAdjustmentItems(items).map((elem) => { + const records = Object.fromEntries(validItems.map((item) => [item.pk, item])); + + const initialValue = mapAdjustmentItems(validItems).map((elem) => { return { ...elem, quantity: 0 @@ -1243,19 +1251,22 @@ function stockMergeFields(items: any[]): ApiFormFieldSet { return {}; } - const records = Object.fromEntries(items.map((item) => [item.pk, item])); + // Only include items which are not serialized (serial number field is empty) + const validItems = items.filter((item) => !item.serial); + + const records = Object.fromEntries(validItems.map((item) => [item.pk, item])); // Extract all non-null location values from the items const locationValues = [ ...new Set( - items.filter((item) => item.location).map((item) => item.location) + validItems.filter((item) => item.location).map((item) => item.location) ) ]; // Extract all non-null default location values from the items const defaultLocationValues = [ ...new Set( - items + validItems .filter((item) => item.part_detail?.default_location) .map((item) => item.part_detail?.default_location) ) @@ -1272,7 +1283,7 @@ function stockMergeFields(items: any[]): ApiFormFieldSet { const fields: ApiFormFieldSet = { items: { field_type: 'table', - value: items.map((elem) => { + value: validItems.map((elem) => { return { item: elem.pk }; diff --git a/src/frontend/src/pages/stock/StockDetail.tsx b/src/frontend/src/pages/stock/StockDetail.tsx index 6a31d2807e..8b3992fa1d 100644 --- a/src/frontend/src/pages/stock/StockDetail.tsx +++ b/src/frontend/src/pages/stock/StockDetail.tsx @@ -828,6 +828,8 @@ export default function StockDetail() { formProps: stockOperationProps, delete: false, changeBatch: false, + add: !stockitem.serial, + remove: !stockitem.serial, assign: !!stockitem.in_stock && stockitem.part_detail?.salable, return: !!stockitem.consumed_by || !!stockitem.customer, merge: false