from django.db.models.expressions import F from django.db.models.signals import post_save from apps.mtm.models import Step, SubprodctionMaterial from apps.pm.models import SubProductionPlan, SubProductionProgress from apps.qm.models import TestRecord from apps.wf.models import Ticket from django.dispatch import receiver from rest_framework import exceptions from apps.wpm.models import WProduct, WprouctTicket from apps.wpm.models import OperationWproduct @receiver(post_save, sender=Ticket) def handleTicket(sender, instance, created, **kwargs): if instance.workflow.name == '不合格品审理单': if created: ticket_data = instance.ticket_data """ 创建关联信息表 """ obj = WprouctTicket() wproduct = WProduct.objects.get(id=ticket_data['wproduct']) obj.wproduct = wproduct obj.number = wproduct.number obj.material = wproduct.material obj.step = wproduct.step obj.subproduction_plan = wproduct.subproduction_plan obj.ticket = instance test_record = TestRecord.objects.filter(wproduct=wproduct, is_deleted=False, is_testok=False).order_by('-id').first() obj.save() # 工单绑定半成品 wproduct.ticket = instance wproduct.save() # 检验员 if not ticket_data.get('tester', None): ticket_data['tester'] = test_record.create_by.id instance.ticket_data = ticket_data instance.save() elif instance.act_state == Ticket.TICKET_ACT_STATE_FINISH: """ 执行操作决定 """ ticket_data = instance.ticket_data wt = instance.wt_ticket wp = wt.wproduct decision = WProduct.NG_BACK_WORK if 'decision_1' in ticket_data and ticket_data['decision_1']: decision = ticket_data['decision_1'] elif 'decision_2' in ticket_data and ticket_data['decision_2']: decision = ticket_data['decision_2'] wp.ng_sign = decision if decision in [WProduct.NG_BACK_WORK, WProduct.NG_BACK_FIX]: step = Step.objects.get(id=ticket_data['back_step']) wp.step = step # 找到当时所属的计划 sp = SubProductionPlan.objects.filter(ow_subplan__wproduct=wp, ow_subplan__operation__is_submited=True, ow_subplan__step=step).first() if sp: wp.subproduction_plan = sp wt.save() wp.ticket = None # 解除当前工单 wp.act_state = WProduct.WPR_ACT_STATE_DOWAIT wp.save() # 更新子计划合格进度 if sp != wt.subproduction_plan: ins = SubProductionProgress.objects.filter(subproduction_plan=sp, is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT) ins.count_ok = ins.count_ok - 1 ins.save() else: raise exceptions.APIException('返回步骤点错误') elif decision in [WProduct.NG_ACCEPT, WProduct.NG_PERMIT]: wp.act_state = WProduct.WPR_ACT_STATE_OK wp.ng_sign = decision wt.save() wp.ticket = None # 解除当前工单 wp.save()