Apply pattern to BuildOrder
This commit is contained in:
parent
32fa0fc85a
commit
855c463528
|
|
@ -34,6 +34,7 @@ from generic.states.fields import InvenTreeCustomStatusSerializerMixin
|
|||
from InvenTree.mixins import DataImportExportSerializerMixin
|
||||
from InvenTree.serializers import (
|
||||
CustomStatusSerializerMixin,
|
||||
DuplicateOptionsSerializer,
|
||||
FilterableSerializerMixin,
|
||||
InvenTreeDecimalField,
|
||||
InvenTreeModelSerializer,
|
||||
|
|
@ -67,6 +68,11 @@ class BuildSerializer(
|
|||
):
|
||||
"""Serializes a Build object."""
|
||||
|
||||
export_exclude_fields = ['duplicate']
|
||||
import_exclude_fields = ['duplicate']
|
||||
|
||||
SKIP_CREATE_FIELDS = ['duplicate']
|
||||
|
||||
class Meta:
|
||||
"""Serializer metaclass."""
|
||||
|
||||
|
|
@ -80,6 +86,7 @@ class BuildSerializer(
|
|||
'completed',
|
||||
'completion_date',
|
||||
'destination',
|
||||
'duplicate',
|
||||
'external',
|
||||
'parent',
|
||||
'part',
|
||||
|
|
@ -190,12 +197,29 @@ class BuildSerializer(
|
|||
|
||||
return queryset
|
||||
|
||||
duplicate = DuplicateOptionsSerializer(Build.objects.all(), copy_parameters=True)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Determine if extra serializer fields are required."""
|
||||
kwargs.pop('create', False)
|
||||
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, validated_data):
|
||||
"""Create a new Build instance, optionally copying data from an existing build."""
|
||||
duplicate = validated_data.pop('duplicate', None)
|
||||
|
||||
instance = super().create(validated_data)
|
||||
|
||||
if duplicate:
|
||||
original = duplicate['original']
|
||||
|
||||
if duplicate.get('copy_parameters', True):
|
||||
instance.copy_parameters_from(original)
|
||||
|
||||
return instance
|
||||
|
||||
def validate_reference(self, reference):
|
||||
"""Custom validation for the Build reference field."""
|
||||
# Ensure the reference matches the required pattern
|
||||
|
|
|
|||
|
|
@ -43,9 +43,11 @@ import { ProjectCodeField, TagsField } from './CommonFields';
|
|||
*/
|
||||
export function useBuildOrderFields({
|
||||
create,
|
||||
duplicateBuildId,
|
||||
modalId
|
||||
}: {
|
||||
create: boolean;
|
||||
duplicateBuildId?: number | null;
|
||||
modalId: string;
|
||||
}): ApiFormFieldSet {
|
||||
const [destination, setDestination] = useState<number | null | undefined>(
|
||||
|
|
@ -133,7 +135,16 @@ export function useBuildOrderFields({
|
|||
is_active: true
|
||||
}
|
||||
},
|
||||
external: {}
|
||||
external: {},
|
||||
duplicate: {
|
||||
children: {
|
||||
original: {
|
||||
value: duplicateBuildId,
|
||||
hidden: true
|
||||
},
|
||||
copy_parameters: {}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (!globalSettings.isSet('PROJECT_CODES_ENABLED', true)) {
|
||||
|
|
@ -144,8 +155,19 @@ export function useBuildOrderFields({
|
|||
delete fields.external;
|
||||
}
|
||||
|
||||
if (!duplicateBuildId) {
|
||||
delete fields.duplicate;
|
||||
}
|
||||
|
||||
return fields;
|
||||
}, [create, destination, batchCode, batchGenerator.result, globalSettings]);
|
||||
}, [
|
||||
create,
|
||||
destination,
|
||||
batchCode,
|
||||
batchGenerator.result,
|
||||
globalSettings,
|
||||
duplicateBuildId
|
||||
]);
|
||||
}
|
||||
|
||||
export function useBuildOrderOutputFields({
|
||||
|
|
|
|||
|
|
@ -632,6 +632,7 @@ export default function BuildDetail() {
|
|||
|
||||
const duplicateBuildOrderFields = useBuildOrderFields({
|
||||
create: false,
|
||||
duplicateBuildId: build.pk,
|
||||
modalId: 'duplicate-build-order'
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue