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