fix: route创建时的校验

This commit is contained in:
caoqianming 2023-12-01 09:50:40 +08:00
parent 6e8d78a5e9
commit 6dfa2b1696
1 changed files with 34 additions and 16 deletions

View File

@ -124,15 +124,16 @@ class RouteSerializer(CustomModelSerializer):
fields = '__all__' fields = '__all__'
read_only_fields = EXCLUDE_FIELDS read_only_fields = EXCLUDE_FIELDS
# def validate(self, attrs): def validate(self, attrs):
# material = attrs['material'] if 'mgroup' in attrs and attrs['mgroup']:
# if material.type != Material.MA_TYPE_GOOD: attrs['process'] = attrs['mgroup'].process
# raise ValidationError('请选择最终产品') if attrs.get('process', None) is None:
# return super().validate(attrs) raise ParseError('未提供操作工序')
return super().validate(attrs)
def gen_material_out(self, instance): def gen_material_out(self, instance):
""" """
废弃不用了 自动形成物料
""" """
name = f'{instance.material.name}-中' name = f'{instance.material.name}-中'
instance.material_out, _ = Material.objects.get_or_create(type=Material.MA_TYPE_HALFGOOD, parent=instance.material, process=instance.process, instance.material_out, _ = Material.objects.get_or_create(type=Material.MA_TYPE_HALFGOOD, parent=instance.material, process=instance.process,
@ -140,6 +141,7 @@ class RouteSerializer(CustomModelSerializer):
'is_hidden': True, 'name': name, 'is_hidden': True, 'name': name,
'number': instance.material.number, 'number': instance.material.number,
'specification': instance.material.specification, 'specification': instance.material.specification,
'model': instance.material.model,
'type': Material.MA_TYPE_HALFGOOD, 'type': Material.MA_TYPE_HALFGOOD,
'create_by': self.request.user, 'create_by': self.request.user,
'update_by': self.request.user, 'update_by': self.request.user,
@ -147,24 +149,40 @@ class RouteSerializer(CustomModelSerializer):
instance.save() instance.save()
def create(self, validated_data): def create(self, validated_data):
process = validated_data.get('process', None) process = validated_data['process']
if process and Route.objects.filter(material=validated_data['material'], process=process).exists(): if process and Route.objects.filter(material=validated_data['material'], process=process).exists():
raise ValidationError('已选择该工序') raise ValidationError('已选择该工序')
with transaction.atomic(): with transaction.atomic():
instance = super().create(validated_data) instance = super().create(validated_data)
# if 'material_out' in validated_data and validated_data['material_out'] and instance.material: material_out = instance.material_out
# pass if material_out:
# else: if material_out.process is None:
# self.gen_material_out(instance) material_out.process = instance.process
if instance.material:
material_out.parent = instance.material
material_out.save()
elif material_out.process != process:
raise ParseError('物料工序错误!请重新选择')
else:
if instance.material:
self.gen_material_out()
return instance return instance
def update(self, instance, validated_data): def update(self, instance, validated_data):
validated_data.pop('material', None) validated_data.pop('material', None)
validated_data.pop('process', None) process = validated_data.pop('process', None)
with transaction.atomic(): with transaction.atomic():
instance = super().update(instance, validated_data) instance = super().update(instance, validated_data)
# if 'material_out' in validated_data and validated_data['material_out'] and instance.material: material_out = instance.material_out
# pass if material_out:
# else: if material_out.process is None:
# self.gen_material_out(instance) material_out.process = instance.process
if instance.material:
material_out.parent = instance.material
material_out.save()
elif material_out.process != process:
raise ParseError('物料工序错误!请重新选择')
else:
if instance.material:
self.gen_material_out()
return instance return instance