修改工序排列方式
This commit is contained in:
parent
b580f858eb
commit
6805669f47
|
@ -18,7 +18,7 @@ class MaterialDetailSerializer(serializers.ModelSerializer):
|
|||
fields = '__all__'
|
||||
|
||||
def get_processes_(self, obj):
|
||||
objs = Process.objects.filter(id__in=obj.processes)
|
||||
objs = Process.objects.filter(id__in=obj.processes).order_by('number')
|
||||
return ProcessSimpleSerializer(instance=objs, many=True).data
|
||||
|
||||
|
||||
|
|
|
@ -156,6 +156,15 @@ class RecordFormViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet
|
|||
elif self.action == 'update':
|
||||
return RecordFormUpdateSerializer
|
||||
return RecordFormSerializer
|
||||
|
||||
@action(methods=['get'], detail=True, perms_map={'get':'*'}, pagination_class=None, serializer_class=RecordFormFieldSerializer)
|
||||
def fields(self, request, pk=None):
|
||||
"""
|
||||
表格下的字段
|
||||
"""
|
||||
instance = self.get_object()
|
||||
serializer = self.serializer_class(instance=RecordFormField.objects.filter(form=instance, is_deleted=False), many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
class RecordFormFieldViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet):
|
||||
|
|
|
@ -79,6 +79,9 @@ class Transition(CommonAModel):
|
|||
"""
|
||||
工作流流转,定时器,条件(允许跳过), 条件流转与定时器不可同时存在
|
||||
"""
|
||||
TRANSITION_ATTRIBUTE_TYPE_ACCEPT = 1 # 同意
|
||||
TRANSITION_ATTRIBUTE_TYPE_REFUSE = 2 # 拒绝
|
||||
TRANSITION_ATTRIBUTE_TYPE_OTHER = 3 # 其他
|
||||
attribute_type_choices = (
|
||||
(1, '同意'),
|
||||
(2, '拒绝'),
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from apps.system.serializers import UserSimpleSerializer
|
||||
import rest_framework
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import State, Ticket, Workflow, Transition, CustomField
|
||||
from .models import State, Ticket, TicketFlow, Workflow, Transition, CustomField
|
||||
|
||||
|
||||
class WorkflowSerializer(serializers.ModelSerializer):
|
||||
|
@ -42,6 +43,10 @@ class CustomFieldSerializer(serializers.ModelSerializer):
|
|||
model = CustomField
|
||||
fields = '__all__'
|
||||
|
||||
class TicketSimpleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Ticket
|
||||
fields = '__all__'
|
||||
|
||||
class TicketCreateSerializer(serializers.ModelSerializer):
|
||||
transition = serializers.IntegerField(label='流转ID')
|
||||
|
@ -65,3 +70,12 @@ class TicketSerializer(serializers.ModelSerializer):
|
|||
def setup_eager_loading(queryset):
|
||||
queryset = queryset.select_related('workflow','state')
|
||||
return queryset
|
||||
|
||||
class TicketFlowSerializer(serializers.ModelSerializer):
|
||||
participant_ = UserSimpleSerializer(source='participant', read_only=True)
|
||||
state_ = StateSimpleSerializer(source='state', read_only=True)
|
||||
class Meta:
|
||||
model = TicketFlow
|
||||
fields = '__all__'
|
||||
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
from apps.wf.serializers import TicketSerializer, TicketSimpleSerializer
|
||||
from typing import Tuple
|
||||
from apps.system.models import User
|
||||
from apps.wf.models import CustomField, State, Ticket, Transition, Workflow
|
||||
|
@ -198,7 +199,7 @@ class WfService(object):
|
|||
:return:
|
||||
"""
|
||||
# 获取工单基础表中的字段中的字段信息
|
||||
field_info_dict = ticket.get_dict()
|
||||
field_info_dict = TicketSimpleSerializer(instance=ticket).data
|
||||
# 获取自定义字段的值
|
||||
custom_fields_queryset = cls.get_workflow_custom_fields(ticket.workflow)
|
||||
for i in custom_fields_queryset:
|
||||
|
|
|
@ -2,7 +2,7 @@ from django.core.exceptions import AppRegistryNotReady
|
|||
from rest_framework.response import Response
|
||||
from rest_framework import serializers
|
||||
from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin
|
||||
from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketCreateSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer
|
||||
from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketCreateSerializer, TicketFlowSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||
from rest_framework.decorators import action, api_view
|
||||
|
@ -116,7 +116,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
if value == State.STATE_FIELD_REQUIRED:
|
||||
if key not in ticket_data or not ticket_data[key]:
|
||||
raise APIException('字段{}必填'.format(key))
|
||||
ticket = serializer.save(state=start_state) # 先创建出来
|
||||
ticket = serializer.save(state=start_state, create_by=request.user) # 先创建出来
|
||||
next_state = WfService.get_next_state_by_transition_and_ticket_info(ticket=ticket, transition=transition)
|
||||
participant_info = WfService.get_ticket_state_participant_info(state=next_state, ticket=ticket, ticket_data=ticket.ticket_data)
|
||||
destination_participant_type = participant_info.get('destination_participant_type', 0)
|
||||
|
@ -134,7 +134,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
if title_template:
|
||||
all_ticket_data = {**rdata, **rdata['ticket_data']}
|
||||
title = title_template.format(**all_ticket_data)
|
||||
# 更新工单
|
||||
# 更新一下信息
|
||||
ticket.sn=sn
|
||||
ticket.title=title
|
||||
ticket.state=next_state
|
||||
|
@ -146,7 +146,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
# 新增流转记录
|
||||
TicketFlow.objects.create(ticket=ticket, state=start_state, ticket_data=WfService.get_ticket_all_field_value(ticket),
|
||||
suggestion=rdata.get('suggestion',''), participant_type=State.PARTICIPANT_TYPE_PERSONAL,
|
||||
participant=ticket.create_by, transition=transition, create_by=request.user)
|
||||
participant=ticket.create_by, transition=transition)
|
||||
return Response(TicketSerializer(instance=ticket).data)
|
||||
|
||||
|
||||
|
@ -204,14 +204,14 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
ticket.participant = destination_participant
|
||||
ticket.multi_all_person = multi_all_person
|
||||
if destination_state.type == State.STATE_TYPE_END:
|
||||
ticket.act_state = State.TICKET_ACT_STATE_FINISH
|
||||
ticket.act_state = Ticket.TICKET_ACT_STATE_FINISH
|
||||
elif destination_state.type == State.STATE_TYPE_START:
|
||||
ticket.act_state = State.TICKET_ACT_STATE_DRAFT
|
||||
ticket.act_state = Ticket.TICKET_ACT_STATE_DRAFT
|
||||
else:
|
||||
ticket.act_state = State.TICKET_ACT_STATE_ONGOING
|
||||
ticket.act_state = Ticket.TICKET_ACT_STATE_ONGOING
|
||||
|
||||
if transition.attribute_type == State.TRANSITION_ATTRIBUTE_TYPE_REFUSE:
|
||||
transition.act_state = State.TICKET_ACT_STATE_BACK
|
||||
if transition.attribute_type == Transition.TRANSITION_ATTRIBUTE_TYPE_REFUSE:
|
||||
transition.act_state = Ticket.TICKET_ACT_STATE_BACK
|
||||
|
||||
# 只更新必填和可选的字段
|
||||
for key, value in ticket.state.state_fields.items():
|
||||
|
@ -223,7 +223,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
# 更新工单流转记录
|
||||
TicketFlow.objects.create(ticket=ticket, state=source_state, ticket_data=WfService.get_ticket_all_field_value(ticket),
|
||||
suggestion=data.get('suggestion',''), participant_type=State.PARTICIPANT_TYPE_PERSONAL,
|
||||
participant=request.user, transition=transition, create_by=request.user)
|
||||
participant=request.user, transition=transition)
|
||||
return Response(TicketSerializer(instance=ticket).data)
|
||||
|
||||
|
||||
|
@ -243,4 +243,16 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
"""
|
||||
ticket = self.get_object()
|
||||
transitions = WfService.get_ticket_transitions(ticket)
|
||||
return Response(TransitionSerializer(instance=transitions, many=True).data)
|
||||
return Response(TransitionSerializer(instance=transitions, many=True).data)
|
||||
|
||||
|
||||
class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
|
||||
"""
|
||||
工单日志
|
||||
"""
|
||||
perms_map = {'*':'*'}
|
||||
queryset = TicketFlow.objects.all()
|
||||
serializer_class = TicketFlowSerializer
|
||||
search_fields = ['suggestion']
|
||||
filterset_fields = ['paticipant', 'state', 'ticket']
|
||||
ordering = ['-create_time']
|
Loading…
Reference in New Issue