feat: wpr添加初始物料字段

This commit is contained in:
caoqianming 2025-05-13 11:00:45 +08:00
parent 98bf81f5e0
commit be6d51af7d
2 changed files with 34 additions and 1 deletions

View File

@ -0,0 +1,25 @@
# Generated by Django 3.2.12 on 2025-05-13 03:00
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('mtm', '0057_process_number_to_batch'),
('wpmw', '0005_wpr_wpr_from'),
]
operations = [
migrations.AddField(
model_name='wpr',
name='material_start',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='material_start_wpr', to='mtm.material', verbose_name='初始物料'),
),
migrations.AlterField(
model_name='wpr',
name='material',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_wpr', to='mtm.material', verbose_name='当前物料形态'),
),
]

View File

@ -16,7 +16,8 @@ class Wpr(BaseModel):
number = models.CharField("编号", max_length=50, null=True, blank=True)
version = models.PositiveIntegerField("版本号", default=9999)
state = models.PositiveSmallIntegerField('状态', default=10, choices=WmStateOption.choices)
material = models.ForeignKey(Material, verbose_name="当前物料形态", on_delete=models.CASCADE)
material = models.ForeignKey(Material, verbose_name="当前物料形态", on_delete=models.CASCADE, related_name="material_wpr")
material_start = models.ForeignKey(Material, verbose_name="初始物料", on_delete=models.CASCADE, null=True, blank=True, related_name="material_start_wpr")
defects = models.ManyToManyField("qm.defect", through="wpmw.wprdefect", verbose_name="缺陷项")
@ -27,6 +28,7 @@ class Wpr(BaseModel):
@classmethod
def change_or_new(cls, wpr=None, number=None, mb=None, wm=None, old_mb=None, old_wm=None, ftest=None, wpr_from=None):
is_create = False
if wpr is None and number is None:
raise ParseError("id和number不能同时为空")
if mb and wm:
@ -48,6 +50,7 @@ class Wpr(BaseModel):
ins = cls(number=number)
ins.version = -1
ins.oinfo = {}
is_create = True
else:
raise ParseError(f"该物料编号{number}-已存在不可使用")
else:
@ -56,6 +59,7 @@ class Wpr(BaseModel):
ins = cls(number=number)
ins.version = -1
ins.oinfo = {}
is_create = True
# if batch_from: # 尝试从批号追踪来源
# ins_from = cls.objects.filter(number=batch_from).order_by("-version").first()
# if ins_from:
@ -86,11 +90,15 @@ class Wpr(BaseModel):
ins.mb = mb
if mb:
ins.material = mb.material
if is_create:
ins.material_start = mb.material
ins.wm = wm
if wm:
ins.material = wm.material
ins.state = wm.state
if is_create:
ins.material_start = wm.material
WprDefect.objects.filter(wpr=ins).delete()
if wm.defect:
WprDefect.objects.create(wpr=ins, defect=wm.defect, is_main=True)