From 6dfa2b1696432bb551a7e627f030147aec4e0d68 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 1 Dec 2023 09:50:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20route=E5=88=9B=E5=BB=BA=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mtm/serializers.py | 50 ++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/apps/mtm/serializers.py b/apps/mtm/serializers.py index a783f6a7..6e8926d1 100644 --- a/apps/mtm/serializers.py +++ b/apps/mtm/serializers.py @@ -124,15 +124,16 @@ class RouteSerializer(CustomModelSerializer): fields = '__all__' read_only_fields = EXCLUDE_FIELDS - # def validate(self, attrs): - # material = attrs['material'] - # if material.type != Material.MA_TYPE_GOOD: - # raise ValidationError('请选择最终产品') - # return super().validate(attrs) + def validate(self, attrs): + if 'mgroup' in attrs and attrs['mgroup']: + attrs['process'] = attrs['mgroup'].process + if attrs.get('process', None) is None: + raise ParseError('未提供操作工序') + return super().validate(attrs) def gen_material_out(self, instance): """ - 废弃不用了 + 自动形成物料 """ name = f'{instance.material.name}-中' 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, 'number': instance.material.number, 'specification': instance.material.specification, + 'model': instance.material.model, 'type': Material.MA_TYPE_HALFGOOD, 'create_by': self.request.user, 'update_by': self.request.user, @@ -147,24 +149,40 @@ class RouteSerializer(CustomModelSerializer): instance.save() 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(): raise ValidationError('已选择该工序') with transaction.atomic(): instance = super().create(validated_data) - # if 'material_out' in validated_data and validated_data['material_out'] and instance.material: - # pass - # else: - # self.gen_material_out(instance) + material_out = instance.material_out + if material_out: + if material_out.process is None: + 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 def update(self, instance, validated_data): validated_data.pop('material', None) - validated_data.pop('process', None) + process = validated_data.pop('process', None) with transaction.atomic(): instance = super().update(instance, validated_data) - # if 'material_out' in validated_data and validated_data['material_out'] and instance.material: - # pass - # else: - # self.gen_material_out(instance) + material_out = instance.material_out + if material_out: + if material_out.process is None: + 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