feat: 增加交接撤回功能
This commit is contained in:
parent
4f08374ca6
commit
db2e8934ba
|
@ -916,8 +916,39 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime,
|
||||||
|
|
||||||
|
|
||||||
def handover_revert(handover:Handover):
|
def handover_revert(handover:Handover):
|
||||||
|
if handover.submit_time is None:
|
||||||
|
raise ParseError('该交接单未提交!')
|
||||||
|
handover_type = handover.type
|
||||||
|
handover_mtype = handover.mtype
|
||||||
|
if handover_type in [Handover.H_NORMAL, Handover.H_REPAIR] and handover_mtype == Handover.H_NORMAL:
|
||||||
|
raise ParseError('该交接单不支持撤销!')
|
||||||
|
handoverb_qs = Handoverb.objects.filter(handover=handover)
|
||||||
|
material = handover.material
|
||||||
|
for item in handoverb_qs:
|
||||||
|
wm = item.wm
|
||||||
|
wm_to = item.wm_to
|
||||||
|
if wm is None or wm_to is None:
|
||||||
|
raise ParseError('该交接单不支持撤销2!')
|
||||||
|
wm.count = wm.count + item.count
|
||||||
|
wm.save()
|
||||||
|
wm_to.count = wm_to.count - item.count
|
||||||
|
if wm_to.count < 0:
|
||||||
|
raise ParseError('库存不足无法撤回!')
|
||||||
|
wm_to.save()
|
||||||
|
if material.tracking == Material.MA_TRACKING_SINGLE:
|
||||||
|
handoverbws = Handoverbw.objects.filter(handoverb=item)
|
||||||
|
if handoverbws.count() != item.count:
|
||||||
|
raise ParseError("交接与明细数量不一致,操作失败")
|
||||||
|
for item in handoverbws:
|
||||||
|
wpr:Wpr = item.wpr
|
||||||
|
Wpr.change_or_new(wpr=wpr, wm=wm, old_wm=wpr.wm, old_mb=wpr.mb, add_version=False)
|
||||||
|
|
||||||
|
handover.submit_time = None
|
||||||
|
handover.submit_user = None
|
||||||
|
handover.save()
|
||||||
|
# 删除追踪链
|
||||||
BatchLog.clear(handover=handover)
|
BatchLog.clear(handover=handover)
|
||||||
pass
|
|
||||||
|
|
||||||
def mlog_submit_validate(ins: Mlog):
|
def mlog_submit_validate(ins: Mlog):
|
||||||
if ins.submit_time:
|
if ins.submit_time:
|
||||||
|
|
|
@ -27,7 +27,7 @@ from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer,
|
||||||
MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer, BatchStSerializer,
|
MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer, BatchStSerializer,
|
||||||
MlogbwCreateUpdateSerializer, HandoverMgroupSerializer, MlogListSerializer,
|
MlogbwCreateUpdateSerializer, HandoverMgroupSerializer, MlogListSerializer,
|
||||||
MlogbSerializer, MlogUserSerializer, BatchLogSerializer)
|
MlogbSerializer, MlogUserSerializer, BatchLogSerializer)
|
||||||
from .services import mlog_submit, handover_submit, mlog_revert, get_batch_dag
|
from .services import mlog_submit, handover_submit, mlog_revert, get_batch_dag, handover_revert
|
||||||
from apps.wpm.services import mlog_submit_validate, generate_new_batch
|
from apps.wpm.services import mlog_submit_validate, generate_new_batch
|
||||||
from apps.wf.models import State
|
from apps.wf.models import State
|
||||||
from apps.wpmw.models import Wpr
|
from apps.wpmw.models import Wpr
|
||||||
|
@ -427,6 +427,18 @@ class HandoverViewSet(CustomModelViewSet):
|
||||||
if ins.submit_time is None:
|
if ins.submit_time is None:
|
||||||
handover_submit(ins, user, None)
|
handover_submit(ins, user, None)
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
|
@action(methods=['post'], detail=True, perms_map={'post': 'handover.submit'}, serializer_class=Serializer)
|
||||||
|
@transaction.atomic
|
||||||
|
def revert(self, request, *args, **kwargs):
|
||||||
|
"""交接记录撤回(变动车间库存)
|
||||||
|
|
||||||
|
交接记录撤回
|
||||||
|
"""
|
||||||
|
ins: Handover = self.get_object()
|
||||||
|
if ins.submit_time:
|
||||||
|
handover_revert(ins)
|
||||||
|
return Response()
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=HandoverMgroupSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=HandoverMgroupSerializer)
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
|
|
|
@ -29,7 +29,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, 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, add_version=True):
|
||||||
is_create = False
|
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不能同时为空")
|
||||||
|
@ -105,7 +105,8 @@ class Wpr(BaseModel):
|
||||||
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)
|
||||||
ins.version = ins.version + 1
|
if add_version:
|
||||||
|
ins.version = ins.version + 1
|
||||||
ins.save()
|
ins.save()
|
||||||
if ftest:
|
if ftest:
|
||||||
# 通过检验变更其缺陷项
|
# 通过检验变更其缺陷项
|
||||||
|
|
Loading…
Reference in New Issue