From dcfa6155a9f99d666fa7818c98495526ec1be0e7 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 14 Mar 2025 09:02:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4wpmw=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E7=BC=96=E5=8F=B7=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpmw/migrations/0005_wpr_wpr_from.py | 19 +++++++++++++++++++ apps/wpmw/models.py | 18 +++++++++++------- 2 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 apps/wpmw/migrations/0005_wpr_wpr_from.py diff --git a/apps/wpmw/migrations/0005_wpr_wpr_from.py b/apps/wpmw/migrations/0005_wpr_wpr_from.py new file mode 100644 index 00000000..df443c27 --- /dev/null +++ b/apps/wpmw/migrations/0005_wpr_wpr_from.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2025-03-14 01:02 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('wpmw', '0004_auto_20250312_1610'), + ] + + operations = [ + migrations.AddField( + model_name='wpr', + name='wpr_from', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wpmw.wpr', verbose_name='来源于'), + ), + ] diff --git a/apps/wpmw/models.py b/apps/wpmw/models.py index 5fbd25aa..08ffdc61 100644 --- a/apps/wpmw/models.py +++ b/apps/wpmw/models.py @@ -22,6 +22,7 @@ class Wpr(BaseModel): mb = models.ForeignKey("inm.materialbatch", verbose_name="仓库物料", on_delete=models.CASCADE, null=True, blank=True) wm = models.ForeignKey("wpm.wmaterial", verbose_name="车间物料", on_delete=models.CASCADE, null=True, blank=True) oinfo = models.JSONField(verbose_name="其他信息", default=dict, blank=True) + wpr_from = models.ForeignKey("self", verbose_name="来源于", on_delete=models.CASCADE, null=True, blank=True) @classmethod def change_or_new(cls, wpr=None, number=None, mb=None, wm=None, old_mb=None, old_wm=None, ftest=None): @@ -36,17 +37,20 @@ class Wpr(BaseModel): wpr.delete() return elif number: + wpr_from = None try: - if wm: - ins = cls.objects.get(number=number, wm__material=wm.material) - elif mb: - ins = cls.objects.get(number=number, mb__material=mb.material) + ins = cls.objects.get(number=number) + if ins.wm is None and ins.mb is None: + if ins.version > 1: # 说明被复用了 + wpr_from = ins + else: + raise ParseError(f"该物料编号{number}-已存在不可使用") else: - raise ParseError(f"该物料编号{number}-请指定ID") - raise ParseError(f"该物料编号{number}-已存在不可使用") + raise ParseError(f"该物料编号{number}-已存在不可使用") except cls.DoesNotExist: ins = cls(number=number) - ins.version = 0 + ins.wpr_from = wpr_from + ins.version = -1 if old_mb and ins.mb != old_mb: raise ParseError(f"请检查-{ins.number}-所属仓库批次")