2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-19 13:35:40 +00:00

Check for duplicate BOM items as part of serializer validation

This commit is contained in:
Oliver
2022-02-07 11:35:07 +11:00
parent a2c48d308f
commit 2ade14c47b
4 changed files with 38 additions and 8 deletions

View File

@ -493,6 +493,22 @@ class BomItemSerializer(InvenTreeModelSerializer):
purchase_price_range = serializers.SerializerMethodField()
def validate(self, data):
# Check for duplicate BOM items
part = data['part']
sub_part = data['sub_part']
if BomItem.objects.get(part=part, sub_part=sub_part).exists():
raise serializers.ValidationError({
'part': _("Duplicate BOM item already exists"),
'sub_part': _("Duplicate BOM items already exists"),
})
data = super().validate(data)
return data
def __init__(self, *args, **kwargs):
# part_detail and sub_part_detail serializers are only included if requested.
# This saves a bunch of database requests
@ -962,8 +978,20 @@ class BomUploadSerializer(serializers.Serializer):
items = data['items']
with transaction.atomic():
try:
with transaction.atomic():
for item in items:
print(item)
for item in items:
part = item['part']
sub_part = item['sub_part']
# Ignore duplicate BOM items
if BomItem.objects.filter(part=part, sub_part=sub_part).exists():
continue
# Create a new BomItem object
BomItem.objects.create(**item)
except Exception as e:
raise serializers.ValidationError(detail=serializers.as_serializer_error(e))