不合格品审理工单列表接口
This commit is contained in:
parent
42fa7022de
commit
2ad60626e5
|
@ -130,6 +130,7 @@ class WfService(object):
|
|||
import datetime, time # 用于支持条件表达式中对时间的操作
|
||||
if eval(expression, {'__builtins__':None}, {'datetime':datetime, 'time':time}):
|
||||
destination_state = State.objects.get(pk=i['target_state'])
|
||||
return destination_state
|
||||
return destination_state
|
||||
|
||||
@classmethod
|
||||
|
@ -321,7 +322,8 @@ class WfService(object):
|
|||
if not created:
|
||||
for key, value in source_state.state_fields.items():
|
||||
if value in (State.STATE_FIELD_REQUIRED, State.STATE_FIELD_OPTIONAL):
|
||||
source_ticket_data[key] = new_ticket_data[key]
|
||||
if key in new_ticket_data:
|
||||
source_ticket_data[key] = new_ticket_data[key]
|
||||
ticket.ticket_data = source_ticket_data
|
||||
ticket.save()
|
||||
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 3.2.9 on 2021-12-30 08:31
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('mtm', '0042_alter_recordformfield_field_type'),
|
||||
('wpm', '0041_wproductflow_change_str'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='wprouctticket',
|
||||
name='resp_process',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mtm.process', verbose_name='责任工序'),
|
||||
),
|
||||
]
|
|
@ -120,6 +120,7 @@ class WprouctTicket(CommonAModel):
|
|||
step = models.ForeignKey(Step, verbose_name='所在步骤/发现步骤', on_delete=models.CASCADE)
|
||||
subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='所在子生产计划', on_delete=models.CASCADE)
|
||||
|
||||
resp_process = models.ForeignKey(Process, verbose_name='责任工序', on_delete=models.CASCADE, null=True, blank=True)
|
||||
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', on_delete=models.CASCADE, related_name='wt_ticket')
|
||||
decision = models.PositiveSmallIntegerField('最终决定', choices=WProduct.ng_choices, null=True, blank=True)
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ from apps.em.serializers import EquipmentSimpleSerializer
|
|||
from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse
|
||||
from apps.inm.signals import update_inm
|
||||
from apps.mtm.models import Material, RecordForm, RecordFormField, Step, SubprodctionMaterial
|
||||
from apps.mtm.serializers import MaterialSimpleSerializer, RecordFormSimpleSerializer, StepSimpleSerializer
|
||||
from apps.mtm.serializers import MaterialSimpleSerializer, ProcessSimpleSerializer, RecordFormSimpleSerializer, StepSimpleSerializer
|
||||
|
||||
from apps.pm.models import SubProductionPlan, SubProductionProgress
|
||||
from django.utils import timezone
|
||||
|
@ -13,7 +13,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
from apps.pm.serializers import SubproductionPlanSimpleSerializer
|
||||
from apps.qm.models import TestRecord, TestRecordItem
|
||||
from apps.system.serializers import UserSimpleSerializer
|
||||
from apps.wpm.models import Operation, OperationEquip, OperationMaterial, OperationWproduct, Pick, WMaterial, WProduct, OperationRecord, OperationRecordItem
|
||||
from apps.wpm.models import Operation, OperationEquip, OperationMaterial, OperationWproduct, Pick, WMaterial, WProduct, OperationRecord, OperationRecordItem, WprouctTicket
|
||||
from django.db import transaction
|
||||
|
||||
class PickHalfSerializer(serializers.Serializer):
|
||||
|
@ -430,3 +430,14 @@ class OperationRecordDetailSerializer(serializers.ModelSerializer):
|
|||
class ScrapSerializer(serializers.Serializer):
|
||||
scrap_reason = serializers.ChoiceField(choices=WProduct.scrap_reason_choices, required=False)
|
||||
# wproducts = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all()), label='半成品ID列表')
|
||||
|
||||
|
||||
class WproductTicketListSerializer(serializers.ModelSerializer):
|
||||
material_ = MaterialSimpleSerializer(source='material', read_only=True)
|
||||
step_ = StepSimpleSerializer(source='step', read_only=True)
|
||||
subproduction_plan_ = SubproductionPlanSimpleSerializer(source='subproduction_plan', read_only=True)
|
||||
resp_process_ = ProcessSimpleSerializer(source='resp_process', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = WprouctTicket
|
||||
fields = '__all__'
|
||||
|
|
|
@ -28,7 +28,7 @@ def handleTicket(sender, instance, created, **kwargs):
|
|||
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()
|
||||
# test_record = TestRecord.objects.filter(wproduct=wproduct, is_deleted=False, is_testok=False).order_by('-id').first()
|
||||
obj.save()
|
||||
|
||||
# 工单绑定半成品
|
||||
|
@ -36,11 +36,6 @@ def handleTicket(sender, instance, created, **kwargs):
|
|||
wproduct.save()
|
||||
WpmServies.add_wproduct_flow_log(wproduct, 'ticket_create')
|
||||
|
||||
# 检验员
|
||||
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:
|
||||
"""
|
||||
|
@ -58,6 +53,7 @@ def handleTicket(sender, instance, created, **kwargs):
|
|||
|
||||
|
||||
wp.ng_sign = decision
|
||||
wt.decision = decision
|
||||
if decision in [WProduct.NG_BACK_WORK, WProduct.NG_BACK_FIX]:
|
||||
step = Step.objects.get(id=ticket_data['back_step'])
|
||||
wp.step = step
|
||||
|
|
|
@ -3,11 +3,12 @@ from rest_framework import urlpatterns
|
|||
from django.urls import path, include
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
from apps.wpm.views import DoFormInit, DoFormSubmit, OperationEquipViewSet, OperationMaterialInputViewSet, OperationMaterialOutputViewSet, OperationMaterialToolViewSet, OperationRecordViewSet, OperationViewSet, OperationWproductViewSet, WMaterialViewSet, WPlanViewSet, WProductViewSet
|
||||
from apps.wpm.views import DoFormInit, DoFormSubmit, OperationEquipViewSet, OperationMaterialInputViewSet, OperationMaterialOutputViewSet, OperationMaterialToolViewSet, OperationRecordViewSet, OperationViewSet, OperationWproductViewSet, WMaterialViewSet, WPlanViewSet, WProductViewSet, WproductTicketViewSet
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register('wmaterial', WMaterialViewSet, basename='wmaterial')
|
||||
router.register('wproduct', WProductViewSet, basename='wproduct')
|
||||
router.register('wproduct_ticket', WproductTicketViewSet, basename='wproduct_ticket')
|
||||
router.register('operation', OperationViewSet, basename='operation')
|
||||
router.register('operation_wproduct', OperationWproductViewSet, basename='operation_wproduct')
|
||||
router.register('operation_equip', OperationEquipViewSet, basename='operation_equip')
|
||||
|
|
|
@ -20,9 +20,9 @@ from rest_framework.decorators import action
|
|||
from apps.wf.models import Workflow
|
||||
from apps.wf.serializers import WorkflowSimpleSerializer
|
||||
from apps.wpm.filters import WMaterialFilterSet, WProductFilterSet
|
||||
from apps.wpm.models import OperationEquip, OperationWproduct, Pick, PickWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem
|
||||
from apps.wpm.models import OperationEquip, OperationWproduct, Pick, PickWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem, WprouctTicket
|
||||
|
||||
from apps.wpm.serializers import OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer, WproductPutInsSerializer
|
||||
from apps.wpm.serializers import OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer, WproductPutInsSerializer, WproductTicketListSerializer
|
||||
from rest_framework.response import Response
|
||||
from django.db import transaction
|
||||
from rest_framework import exceptions, serializers
|
||||
|
@ -406,6 +406,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
raise exceptions.APIException('该产品不可发起不合格审理')
|
||||
workflow = Workflow.objects.filter(name='不合格品审理单', is_deleted=False).first()
|
||||
if workflow:
|
||||
test_record = TestRecord.objects.filter(wproduct=obj, is_deleted=False, is_testok=False).order_by('-id').first()
|
||||
exist_data = {
|
||||
'wproduct':obj.id,
|
||||
'wproduct_number':obj.number,
|
||||
|
@ -413,6 +414,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
'wproduct_specification':obj.material.specification,
|
||||
'finder':request.user.id,
|
||||
'find_process':obj.step.process.id,
|
||||
'tester':test_record.create_by.id
|
||||
}
|
||||
ret = {'workflow':workflow.id}
|
||||
ret['exist_data'] = exist_data
|
||||
|
@ -422,8 +424,16 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
class WproductTicketViewSet(ListModelMixin, GenericViewSet):
|
||||
"""
|
||||
玻璃审批工单
|
||||
"""
|
||||
perms_map={'*':'*'}
|
||||
queryset = WprouctTicket.objects.select_related('step', 'material', 'subproduction_plan', 'resp_process')
|
||||
serializer_class = WproductTicketListSerializer
|
||||
filterset_fields = ['step', 'material', 'subproduction_plan', 'resp_process']
|
||||
ordering_fields = ['id']
|
||||
ordering = ['-id']
|
||||
|
||||
|
||||
class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin, GenericViewSet):
|
||||
|
|
Loading…
Reference in New Issue