diff --git a/apps/wpmw/models.py b/apps/wpmw/models.py index 2f408b2a..6d106957 100644 --- a/apps/wpmw/models.py +++ b/apps/wpmw/models.py @@ -26,7 +26,7 @@ class Wpr(BaseModel): 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, 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, batch_from=None): if wpr is None and number is None: raise ParseError("id和number不能同时为空") if mb and wm: @@ -39,11 +39,11 @@ class Wpr(BaseModel): return elif number: try: - ins = cls.objects.get(number=number) - if ins.wm is None and ins.mb is None: - if ins.version > 1: # 说明被复用了 + ins_x = cls.objects.get(number=number) + if ins_x.wm is None and ins_x.mb is None: + if ins_x.version > 1: # 说明被复用了 if wpr_from is None: - wpr_from = ins + wpr_from = ins_x else: raise ParseError(f"该物料编号{number}-已存在不可使用") else: @@ -52,15 +52,22 @@ class Wpr(BaseModel): ins = cls(number=number) ins.version = -1 ins.oinfo = {} + if batch_from: # 尝试从批号追踪来源 + try: + ins_from = cls.objects.get(number=number) + if ins_from.wm is None and ins_from.mb is None: + if ins_from.version > 1: # 说明被复用了 + wpr_from = ins_from + else: + raise ParseError(f"该物料编号{number}-已存在不可使用") + except cls.DoesNotExist: + pass if old_mb and ins.mb != old_mb: raise ParseError(f"请检查-{ins.number}-所属仓库批次") if old_wm and ins.wm != old_wm: raise ParseError(f"请检查-{ins.number}-所属车间批次") - if number: - ins.number = number - ins.wpr_from = wpr_from ins.mb = mb if mb: