feat: mlog 12 支持update

This commit is contained in:
caoqianming 2024-09-05 19:08:51 +08:00
parent ba8bc4fb72
commit fbaf4b5767
1 changed files with 60 additions and 24 deletions

View File

@ -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