From 3ce0202ffde15f5b1f3b679d93f9a9e6478e2ae5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 7 Jul 2024 12:50:31 +1000 Subject: [PATCH] [PUI] Update part duplicate forms (#7575) - Enable copying of part details when duplicating a part - Update forms --- src/backend/InvenTree/part/serializers.py | 2 ++ src/frontend/src/forms/PartForms.tsx | 4 +++- src/frontend/src/pages/part/PartDetail.tsx | 27 ++++++++++++++++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index f299c74cbb..f89ce197d4 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -603,6 +603,8 @@ class PartSerializer( Used when displaying all details of a single component. """ + import_exclude_fields = ['duplicate'] + class Meta: """Metaclass defining serializer fields.""" diff --git a/src/frontend/src/forms/PartForms.tsx b/src/frontend/src/forms/PartForms.tsx index 8bd294d303..729b158c98 100644 --- a/src/frontend/src/forms/PartForms.tsx +++ b/src/frontend/src/forms/PartForms.tsx @@ -57,7 +57,9 @@ export function usePartFields({ fields.initial_stock = { icon: , children: { - quantity: {}, + quantity: { + value: 0 + }, location: {} } }; diff --git a/src/frontend/src/pages/part/PartDetail.tsx b/src/frontend/src/pages/part/PartDetail.tsx index 09e70f03f6..c569cd414d 100644 --- a/src/frontend/src/pages/part/PartDetail.tsx +++ b/src/frontend/src/pages/part/PartDetail.tsx @@ -34,6 +34,7 @@ import { DetailsImage } from '../../components/details/DetailsImage'; import { ItemDetailsGrid } from '../../components/details/ItemDetails'; import { PartIcons } from '../../components/details/PartIcons'; import NotesEditor from '../../components/editors/NotesEditor'; +import { ApiFormFieldSet } from '../../components/forms/fields/ApiFormField'; import { Thumbnail } from '../../components/images/Thumbnail'; import { ActionDropdown, @@ -718,12 +719,34 @@ export default function PartDetail() { onFormSuccess: refreshInstance }); + const createPartFields = usePartFields({ create: true }); + + const duplicatePartFields: ApiFormFieldSet = useMemo(() => { + return { + ...createPartFields, + duplicate: { + children: { + part: { + value: part.pk, + hidden: true + }, + copy_image: {}, + copy_bom: {}, + copy_notes: {}, + copy_parameters: {} + } + } + }; + }, [createPartFields, part]); + const duplicatePart = useCreateApiFormModal({ url: ApiEndpoints.part_list, title: t`Add Part`, - fields: partFields, + fields: duplicatePartFields, initialData: { - ...part + ...part, + active: true, + locked: false }, follow: true, modelType: ModelType.part