From be6d51af7d770992bb71c671e9933489ec779f33 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 13 May 2025 11:00:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20wpr=E6=B7=BB=E5=8A=A0=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E7=89=A9=E6=96=99=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0006_auto_20250513_1100.py | 25 +++++++++++++++++++ apps/wpmw/models.py | 10 +++++++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 apps/wpmw/migrations/0006_auto_20250513_1100.py diff --git a/apps/wpmw/migrations/0006_auto_20250513_1100.py b/apps/wpmw/migrations/0006_auto_20250513_1100.py new file mode 100644 index 00000000..944e43f9 --- /dev/null +++ b/apps/wpmw/migrations/0006_auto_20250513_1100.py @@ -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='当前物料形态'), + ), + ] diff --git a/apps/wpmw/models.py b/apps/wpmw/models.py index f1121708..fff350ec 100644 --- a/apps/wpmw/models.py +++ b/apps/wpmw/models.py @@ -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)