diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index ec551dd8..9989011a 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -277,25 +277,7 @@ class MlogSerializer(CustomModelSerializer): } def create(self, validated_data): - mtaskb: Mtaskb = validated_data.get('mtaskb', None) - if mtaskb: - mtask = mtaskb.mtask - validated_data['mtask'] = mtask - validated_data['handle_user'] = mtaskb.handle_user - else: - mtask: Mtask = validated_data.get('mtask', None) - if mtask: - validated_data['mgroup'] = mtask.mgroup - validated_data['material_in'] = mtask.material_in - material_out = mtask.material_out - validated_data['material_out'] = material_out - if mtask.start_date == mtask.end_date: - validated_data['handle_date'] = mtask.end_date - else: - mgroup = validated_data['mgroup'] - material_out = validated_data['material_out'] - if not (mgroup and material_out): - raise ValidationError('缺少工段或产物!') + material_out = validated_data['material_out'] with transaction.atomic(): mlogb = validated_data.pop('mlogb', []) instance: Mlog = super().create(validated_data) @@ -336,14 +318,14 @@ class MlogSerializer(CustomModelSerializer): 'count_break_t': instance.count_break_t } for f in Mlogb._meta.fields: - if 'count_n_' in f.name and f.name != 'count_pn_jgqbl': + if 'count_n_' in f.name: add_dict_2[f.name] = getattr(instance, f.name) Mlogb.objects.create(**add_dict_2) return instance def update(self, instance, validated_data): - if instance.fill_way != Mlog.MLOG_2: - raise ValidationError('不支持编辑!') + if instance.fill_way == Mlog.MLOG_23: + raise ParseError('不支持的填写类型') validated_data.pop('mtask', None) validated_data.pop('mgroup', None) if instance.mtask: @@ -351,12 +333,47 @@ class MlogSerializer(CustomModelSerializer): # validated_data.pop('handle_user', None) with transaction.atomic(): mlogb = validated_data.pop('mlogb', []) - instance = super().update(instance, validated_data) - if mlogb: + instance: Mlog = super().update(instance, validated_data) + if instance.fill_way == Mlog.MLOG_12: + # 自动生成mlogb + batch_in = instance.batch + if instance.wm_in: + batch_in = instance.wm_in.batch + minx, _ = Mlogb.objects.get_or_create( + mlog=instance, + batch=batch_in, + wm_in=instance.wm_in, + mtask=instance.mtask, + material_in=instance.material_in + ) + minx.count_use = instance.count_use + minx.count_break = instance.count_break + minx.count_pn_jgqbl = instance.count_pn_jgqbl + minx.save() + + if mlogb and instance.fill_way == Mlog.MLOG_2: Mlogb.objects.filter(mlog=instance, material_out__isnull=False).update(count_ok=0) for item in mlogb: Mlogb.objects.filter(mlog=instance, material_out=item['material_out']).update( count_ok=item['count_ok']) + elif instance.fill_way == Mlog.MLOG_12: + # 生成产出物 + batch_out = instance.batch + if batch_out: + pass + else: + batch_out = generate_new_batch(batch_in, instance) + + mox, _ = Mlogb.objects.get_or_create(mlog=instance, batch=batch_out, + mtask=instance.mtask, material_out=instance.material_out) + mox.count_ok = instance.count_ok + mox.count_notok = instance.count_notok + mox.count_break_t = instance.count_break_t + mox.save() + for f in Mlogb._meta.fields: + if 'count_n_' in f.name: + setattr(mox, f.name, getattr(instance, f.name)) + Mlogb.objects.filter(mlog=instance, material_out__isnull=False).exclude(id=mox.id).delete() return instance def validate(self, attrs): @@ -405,6 +422,25 @@ class MlogSerializer(CustomModelSerializer): # pass # else: # raise ValidationError('操作日期错误') + mtaskb: Mtaskb = attrs.get('mtaskb', None) + if mtaskb: + mtask = mtaskb.mtask + attrs['mtask'] = mtask + attrs['handle_user'] = mtaskb.handle_user + else: + mtask: Mtask = attrs.get('mtask', None) + if mtask: + attrs['mgroup'] = mtask.mgroup + attrs['material_in'] = mtask.material_in + material_out = mtask.material_out + attrs['material_out'] = material_out + if mtask.start_date == mtask.end_date: + attrs['handle_date'] = mtask.end_date + else: + mgroup = attrs['mgroup'] + material_out = attrs['material_out'] + if not (mgroup and material_out): + raise ValidationError('缺少工段或产物!') return attrs