feat: wpr增加wpr_from的相关逻辑

This commit is contained in:
caoqianming 2025-03-19 14:08:34 +08:00
parent da084e21cb
commit 1040e55a48
2 changed files with 14 additions and 11 deletions

View File

@ -327,7 +327,10 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
if item.wpr: if item.wpr:
Wpr.change_or_new(wpr=item.wpr, wm=wm, ftest=item.ftest) Wpr.change_or_new(wpr=item.wpr, wm=wm, ftest=item.ftest)
else: else:
wpr = Wpr.change_or_new(number=item.number, wm=wm, ftest=item.ftest) wpr_from = None
if item.mlogbw_from:
wpr_from = item.mlogbw_from.wpr
wpr = Wpr.change_or_new(number=item.number, wm=wm, ftest=item.ftest, wpr_from=wpr_from)
item.wpr = wpr item.wpr = wpr
item.save() item.save()
@ -495,12 +498,12 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
if mlogbws.count() != mi_count: if mlogbws.count() != mi_count:
raise ParseError("日志与明细数量不一致,操作失败") raise ParseError("日志与明细数量不一致,操作失败")
for item in mlogbws: for item in mlogbws:
if item.wpr: # if item.wpr:
Wpr.change_or_new(wpr=item.wpr, wm=wm) Wpr.change_or_new(wpr=item.wpr, wm=wm)
else: # else:
wpr = Wpr.change_or_new(number=item.number, wm=wm) # wpr = Wpr.change_or_new(number=item.number, wm=wm)
item.wpr = wpr # item.wpr = wpr
item.save() # item.save()
# 针对加工前不良的暂时额外处理 # 针对加工前不良的暂时额外处理
if stored_notok: if stored_notok:

View File

@ -25,7 +25,7 @@ class Wpr(BaseModel):
wpr_from = models.ForeignKey("self", verbose_name="来源于", on_delete=models.CASCADE, null=True, blank=True) wpr_from = models.ForeignKey("self", verbose_name="来源于", on_delete=models.CASCADE, null=True, blank=True)
@classmethod @classmethod
def change_or_new(cls, wpr=None, number=None, mb=None, wm=None, old_mb=None, old_wm=None, ftest=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):
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:
@ -37,19 +37,18 @@ class Wpr(BaseModel):
wpr.delete() wpr.delete()
return return
elif number: elif number:
wpr_from = None
try: try:
ins = cls.objects.get(number=number) ins = cls.objects.get(number=number)
if ins.wm is None and ins.mb is None: if ins.wm is None and ins.mb is None:
if ins.version > 1: # 说明被复用了 if ins.version > 1: # 说明被复用了
wpr_from = ins if wpr_from is None:
wpr_from = ins
else: else:
raise ParseError(f"该物料编号{number}-已存在不可使用") raise ParseError(f"该物料编号{number}-已存在不可使用")
else: else:
raise ParseError(f"该物料编号{number}-已存在不可使用") raise ParseError(f"该物料编号{number}-已存在不可使用")
except cls.DoesNotExist: except cls.DoesNotExist:
ins = cls(number=number) ins = cls(number=number)
ins.wpr_from = wpr_from
ins.version = -1 ins.version = -1
if old_mb and ins.mb != old_mb: if old_mb and ins.mb != old_mb:
@ -60,6 +59,7 @@ class Wpr(BaseModel):
if number: if number:
ins.number = number ins.number = number
ins.wpr_from = wpr_from
ins.mb = mb ins.mb = mb
if mb: if mb:
ins.material = mb.material ins.material = mb.material