feat: 改版交接支持拆合批
This commit is contained in:
parent
75b2a420b7
commit
09c3bec66a
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.2.12 on 2025-12-08 05:37
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('wpm', '0125_auto_20251126_0953'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='handover',
|
||||||
|
name='state_changed',
|
||||||
|
field=models.PositiveSmallIntegerField(blank=True, choices=[(10, '合格'), (20, '不合格'), (30, '返修'), (34, '返修完成'), (40, '检验'), (50, '报废')], default=10, null=True, verbose_name='变更后状态'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='wmaterial',
|
||||||
|
name='state_origin',
|
||||||
|
field=models.PositiveSmallIntegerField(blank=True, choices=[(10, '合格'), (20, '不合格'), (30, '返修'), (34, '返修完成'), (40, '检验'), (50, '报废')], null=True, verbose_name='原始状态'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -119,6 +119,7 @@ class WMaterial(CommonBDModel):
|
||||||
defect = models.ForeignKey('qm.defect', verbose_name='缺陷', on_delete=models.SET_NULL, null=True, blank=True)
|
defect = models.ForeignKey('qm.defect', verbose_name='缺陷', on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
notok_sign = models.CharField('不合格标记', max_length=10, null=True, blank=True)
|
notok_sign = models.CharField('不合格标记', max_length=10, null=True, blank=True)
|
||||||
material_origin = models.ForeignKey(Material, verbose_name='原始物料', on_delete=models.SET_NULL, null=True, blank=True, related_name='wm_mo')
|
material_origin = models.ForeignKey(Material, verbose_name='原始物料', on_delete=models.SET_NULL, null=True, blank=True, related_name='wm_mo')
|
||||||
|
state_origin = models.PositiveSmallIntegerField('原始状态', choices=WmStateOption.choices, null=True, blank=True)
|
||||||
count_xtest = models.DecimalField('已检数量', null=True, blank=True, max_digits=11, decimal_places=1)
|
count_xtest = models.DecimalField('已检数量', null=True, blank=True, max_digits=11, decimal_places=1)
|
||||||
batch_ofrom = models.TextField('原料批次号', null=True, blank=True)
|
batch_ofrom = models.TextField('原料批次号', null=True, blank=True)
|
||||||
material_ofrom = models.ForeignKey(Material, verbose_name='原料物料', on_delete=models.SET_NULL, null=True, blank=True, related_name='wm_mofrom')
|
material_ofrom = models.ForeignKey(Material, verbose_name='原料物料', on_delete=models.SET_NULL, null=True, blank=True, related_name='wm_mofrom')
|
||||||
|
|
@ -601,6 +602,7 @@ class Handover(CommonADModel):
|
||||||
material = models.ForeignKey(
|
material = models.ForeignKey(
|
||||||
Material, verbose_name='物料', on_delete=models.CASCADE, related_name='h_ma')
|
Material, verbose_name='物料', on_delete=models.CASCADE, related_name='h_ma')
|
||||||
material_changed = models.ForeignKey(Material, verbose_name='变更后物料', on_delete=models.CASCADE, null=True, blank=True, related_name='h_ma_c')
|
material_changed = models.ForeignKey(Material, verbose_name='变更后物料', on_delete=models.CASCADE, null=True, blank=True, related_name='h_ma_c')
|
||||||
|
state_changed = models.PositiveSmallIntegerField('变更后状态', choices=WmStateOption.choices, default=10, null=True, blank=True)
|
||||||
count = models.DecimalField('送料数', default=0, max_digits=11, decimal_places=1)
|
count = models.DecimalField('送料数', default=0, max_digits=11, decimal_places=1)
|
||||||
count_eweight = models.FloatField('单数重量', default=0)
|
count_eweight = models.FloatField('单数重量', default=0)
|
||||||
recive_dept = models.ForeignKey(
|
recive_dept = models.ForeignKey(
|
||||||
|
|
|
||||||
|
|
@ -1195,13 +1195,6 @@ class HandoverSerializer(CustomModelSerializer):
|
||||||
attrs['mtype'] = Handover.H_NORMAL
|
attrs['mtype'] = Handover.H_NORMAL
|
||||||
if 'type' not in attrs:
|
if 'type' not in attrs:
|
||||||
attrs['type'] = Handover.H_NORMAL
|
attrs['type'] = Handover.H_NORMAL
|
||||||
|
|
||||||
if attrs["type"] == Handover.H_CHANGE:
|
|
||||||
attrs["mtype"] = Handover.H_MERGE
|
|
||||||
if "material_changed" in attrs and attrs["material_changed"]:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
raise ParseError("必须指定改版后的物料")
|
|
||||||
|
|
||||||
mtype = attrs["mtype"]
|
mtype = attrs["mtype"]
|
||||||
if mtype == Handover.H_MERGE:
|
if mtype == Handover.H_MERGE:
|
||||||
|
|
@ -1211,12 +1204,23 @@ class HandoverSerializer(CustomModelSerializer):
|
||||||
attrs['new_batch'] = new_wm.batch
|
attrs['new_batch'] = new_wm.batch
|
||||||
new_state = new_wm.state
|
new_state = new_wm.state
|
||||||
new_defect = new_wm.defect
|
new_defect = new_wm.defect
|
||||||
|
if attrs["type"] == Handover.H_CHANGE:
|
||||||
|
attrs["material_changed"] = new_wm.material
|
||||||
|
attrs["state_changed"] = new_wm.state
|
||||||
if not attrs.get("new_batch", None):
|
if not attrs.get("new_batch", None):
|
||||||
raise ParseError("必须指定合并后的批次")
|
raise ParseError("必须指定合并后的批次")
|
||||||
if 'undefined' in attrs['new_batch'] or 'null' in attrs['new_batch'] or '#' in attrs['new_batch']:
|
if 'undefined' in attrs['new_batch'] or 'null' in attrs['new_batch'] or '#' in attrs['new_batch']:
|
||||||
raise ParseError("新批次号含有不允许信息!")
|
raise ParseError("新批次号含有不允许信息!")
|
||||||
|
else:
|
||||||
|
attrs['new_batch'] = None
|
||||||
|
attrs['new_wm'] = None
|
||||||
|
|
||||||
|
if attrs["type"] == Handover.H_CHANGE:
|
||||||
|
if "material_changed" in attrs and attrs["material_changed"]:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise ParseError("必须指定改版后的物料")
|
||||||
|
|
||||||
wm:WMaterial = attrs.get('wm', None)
|
wm:WMaterial = attrs.get('wm', None)
|
||||||
if wm:
|
if wm:
|
||||||
attrs["batch"] = wm.batch
|
attrs["batch"] = wm.batch
|
||||||
|
|
|
||||||
|
|
@ -800,11 +800,12 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime,
|
||||||
elif handover.type == Handover.H_REPAIR:
|
elif handover.type == Handover.H_REPAIR:
|
||||||
# 返修交接
|
# 返修交接
|
||||||
recive_mgroup = handover.recive_mgroup
|
recive_mgroup = handover.recive_mgroup
|
||||||
if recive_mgroup:
|
wm_state = WMaterial.WM_REPAIR
|
||||||
# if recive_mgroup.process.type == Process.PRO_TEST:
|
if mtype == Handover.H_MERGE and handover.new_wm:
|
||||||
# wm_state = WMaterial.WM_REPAIRED
|
wm_to = handover.new_wm
|
||||||
# else:
|
if wm_to.state != WMaterial.WM_REPAIR or wm_to.material != wm_from.material:
|
||||||
wm_state = WMaterial.WM_REPAIR
|
raise ParseError("返修合并到的车间库存状态或物料异常")
|
||||||
|
elif recive_mgroup:
|
||||||
wm_to, _ = WMaterial.objects.get_or_create(
|
wm_to, _ = WMaterial.objects.get_or_create(
|
||||||
batch=batch,
|
batch=batch,
|
||||||
material=material,
|
material=material,
|
||||||
|
|
@ -824,6 +825,7 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime,
|
||||||
else:
|
else:
|
||||||
raise ParseError("返工交接必须指定接收工段")
|
raise ParseError("返工交接必须指定接收工段")
|
||||||
elif handover.type == Handover.H_TEST:
|
elif handover.type == Handover.H_TEST:
|
||||||
|
raise ParseError("检验交接已废弃")
|
||||||
wm_to, _ = WMaterial.objects.get_or_create(
|
wm_to, _ = WMaterial.objects.get_or_create(
|
||||||
batch=batch,
|
batch=batch,
|
||||||
material=material,
|
material=material,
|
||||||
|
|
@ -838,7 +840,11 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
elif handover.type == Handover.H_SCRAP:
|
elif handover.type == Handover.H_SCRAP:
|
||||||
if recive_mgroup:
|
if mtype == Handover.H_MERGE and handover.new_wm:
|
||||||
|
wm_to = handover.new_wm
|
||||||
|
if wm_to.state != WMaterial.WM_SCRAP or wm_to.material != wm_from.material:
|
||||||
|
raise ParseError("报废合并到的车间库存状态或物料异常")
|
||||||
|
elif recive_mgroup:
|
||||||
wm_to, _ = WMaterial.objects.get_or_create(
|
wm_to, _ = WMaterial.objects.get_or_create(
|
||||||
batch=batch,
|
batch=batch,
|
||||||
material=material,
|
material=material,
|
||||||
|
|
@ -857,23 +863,24 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime,
|
||||||
else:
|
else:
|
||||||
raise ParseError("不支持非工段报废")
|
raise ParseError("不支持非工段报废")
|
||||||
elif handover.type == Handover.H_CHANGE:
|
elif handover.type == Handover.H_CHANGE:
|
||||||
if handover.new_wm:
|
if mtype == Handover.H_MERGE and handover.new_wm:
|
||||||
wm_to = handover.new_wm
|
wm_to = handover.new_wm
|
||||||
elif handover.recive_mgroup:
|
elif handover.recive_mgroup:
|
||||||
wm_to, _ = WMaterial.objects.get_or_create(
|
wm_to, _ = WMaterial.objects.get_or_create(
|
||||||
batch=batch,
|
batch=batch,
|
||||||
material=handover.material_changed,
|
material=handover.material_changed,
|
||||||
|
state=handover.state_changed,
|
||||||
mgroup=recive_mgroup,
|
mgroup=recive_mgroup,
|
||||||
belong_dept=recive_dept,
|
belong_dept=recive_dept,
|
||||||
notok_sign=None,
|
notok_sign=wm_from.notok_sign,
|
||||||
defect=None,
|
defect=wm_from.defect,
|
||||||
material_origin=material,
|
material_origin=None if handover.material_changed == material else material,
|
||||||
state=WMaterial.WM_OK,
|
state_origin=None if handover.state_changed == wm_from.state else wm_from.state,
|
||||||
defaults={
|
defaults={
|
||||||
"batch_ofrom": wm_from.batch_ofrom,
|
"batch_ofrom": wm_from.batch_ofrom,
|
||||||
"material_ofrom": wm_from.material_ofrom,
|
"material_ofrom": wm_from.material_ofrom,
|
||||||
"create_by": user,
|
"create_by": user,
|
||||||
"number_from": wm_from.number_from
|
"number_from": wm_from.number_from
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue