Merge branch 'develop' of https://e.coding.net/ctcdevteam/hberp/hberp into develop
This commit is contained in:
commit
611736c4c6
|
@ -1,3 +1,4 @@
|
||||||
|
from apps.mtm.models import Step
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.serializers import ModelSerializer
|
from rest_framework.serializers import ModelSerializer
|
||||||
|
|
||||||
|
@ -8,6 +9,7 @@ from apps.system.serializers import OrganizationSimpleSerializer, UserSimpleSeri
|
||||||
class EquipmentSerializer(ModelSerializer):
|
class EquipmentSerializer(ModelSerializer):
|
||||||
belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True)
|
belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True)
|
||||||
keeper_ = UserSimpleSerializer(source='keeper', read_only=True)
|
keeper_ = UserSimpleSerializer(source='keeper', read_only=True)
|
||||||
|
step_ = serializers.SerializerMethodField()
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Equipment
|
model = Equipment
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
@ -18,6 +20,9 @@ class EquipmentSerializer(ModelSerializer):
|
||||||
queryset = queryset.select_related('belong_dept','keeper')
|
queryset = queryset.select_related('belong_dept','keeper')
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
def get_step_(self, obj):
|
||||||
|
return Step.objects.filter(equipments=obj).values('id', 'name', 'number')
|
||||||
|
|
||||||
class EquipmentSimpleSerializer(ModelSerializer):
|
class EquipmentSimpleSerializer(ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Equipment
|
model = Equipment
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from apps.em.serializers import EquipmentSerializer, EquipmentSimpleSerializer
|
from apps.em.serializers import EquipmentSimpleSerializer
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ParseError, ValidationError
|
||||||
from .models import InputMaterial, Material, OutputMaterial, Process, ProductProcess, RecordForm, RecordFormField, Step, TechDoc, UsedStep
|
from .models import InputMaterial, Material, OutputMaterial, Process, ProductProcess, RecordForm, RecordFormField, Step, TechDoc, UsedStep
|
||||||
from apps.system.serializers import FileSimpleSerializer, OrganizationSimpleSerializer
|
from apps.system.serializers import FileSimpleSerializer, OrganizationSimpleSerializer
|
||||||
|
|
||||||
|
@ -140,6 +140,7 @@ class UsedStepListSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class RecordFormSerializer(serializers.ModelSerializer):
|
class RecordFormSerializer(serializers.ModelSerializer):
|
||||||
step_ = StepSimpleSerializer(source='step', read_only=True)
|
step_ = StepSimpleSerializer(source='step', read_only=True)
|
||||||
|
material_ = MaterialSimpleSerializer(source='material', read_only=True)
|
||||||
"""
|
"""
|
||||||
记录表格序列化
|
记录表格序列化
|
||||||
"""
|
"""
|
||||||
|
@ -150,13 +151,13 @@ class RecordFormSerializer(serializers.ModelSerializer):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setup_eager_loading(queryset):
|
def setup_eager_loading(queryset):
|
||||||
""" Perform necessary eager loading of data. """
|
""" Perform necessary eager loading of data. """
|
||||||
queryset = queryset.select_related('step')
|
queryset = queryset.select_related('step', 'material')
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
class RecordFormCreateSerializer(serializers.ModelSerializer):
|
class RecordFormCreateSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RecordForm
|
model = RecordForm
|
||||||
fields = ['name', 'type', 'step']
|
fields = ['name', 'type', 'step', 'material']
|
||||||
|
|
||||||
class RecordFormUpdateSerializer(serializers.ModelSerializer):
|
class RecordFormUpdateSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -169,7 +169,7 @@ class TicketFlow(BaseModel):
|
||||||
工单流转日志
|
工单流转日志
|
||||||
"""
|
"""
|
||||||
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, verbose_name='关联工单')
|
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, verbose_name='关联工单')
|
||||||
transition = models.ForeignKey(Transition, verbose_name='流转id', help_text='与worklow.Transition关联, 为0时表示认为干预的操作', on_delete=models.CASCADE)
|
transition = models.ForeignKey(Transition, verbose_name='流转id', help_text='与worklow.Transition关联, 为0时表示认为干预的操作', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
suggestion = models.CharField('处理意见', max_length=10000, default='', blank=True)
|
suggestion = models.CharField('处理意见', max_length=10000, default='', blank=True)
|
||||||
participant_type = models.IntegerField('处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人', choices=State.type2_choices)
|
participant_type = models.IntegerField('处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人', choices=State.type2_choices)
|
||||||
participant = models.ForeignKey(User, verbose_name='处理人', on_delete=models.SET_NULL, null=True, blank=True)
|
participant = models.ForeignKey(User, verbose_name='处理人', on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
|
|
|
@ -23,7 +23,7 @@ class WorkflowSimpleSerializer(serializers.ModelSerializer):
|
||||||
class StateSimpleSerializer(serializers.ModelSerializer):
|
class StateSimpleSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = State
|
model = State
|
||||||
fields = ['id', 'name']
|
fields = ['id', 'name', 'type']
|
||||||
|
|
||||||
class TransitionSerializer(serializers.ModelSerializer):
|
class TransitionSerializer(serializers.ModelSerializer):
|
||||||
source_state_ = StateSimpleSerializer(source='source_state', read_only=True)
|
source_state_ = StateSimpleSerializer(source='source_state', read_only=True)
|
||||||
|
|
|
@ -168,8 +168,13 @@ class WfService(object):
|
||||||
if user.id not in participant:
|
if user.id not in participant:
|
||||||
return dict(permission=False, msg="非当前处理人")
|
return dict(permission=False, msg="非当前处理人")
|
||||||
current_participant_count = len(participant)
|
current_participant_count = len(participant)
|
||||||
if current_participant_count >1 and state.distribute_type == State.STATE_DISTRIBUTE_TYPE_ACTIVE:
|
if current_participant_count == 1:
|
||||||
return dict(permission=False, msg="需要先接单再处理")
|
if [user.id] != participant:
|
||||||
|
return dict(permission=False, msg="非当前处理人")
|
||||||
|
elif current_participant_count >1 and state.distribute_type == State.STATE_DISTRIBUTE_TYPE_ACTIVE:
|
||||||
|
if user.id not in participant:
|
||||||
|
return dict(permission=False, msg="非当前处理人")
|
||||||
|
return dict(permission=False, msg="需要先接单再处理", need_accept=True)
|
||||||
if ticket.in_add_node:
|
if ticket.in_add_node:
|
||||||
return dict(permission=False, msg="工单当前处于加签中,请加签完成后操作")
|
return dict(permission=False, msg="工单当前处于加签中,请加签完成后操作")
|
||||||
return dict(permission=True, msg="")
|
return dict(permission=True, msg="")
|
||||||
|
|
|
@ -247,6 +247,25 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
transitions = WfService.get_ticket_transitions(ticket)
|
transitions = WfService.get_ticket_transitions(ticket)
|
||||||
return Response(TransitionSerializer(instance=transitions, many=True).data)
|
return Response(TransitionSerializer(instance=transitions, many=True).data)
|
||||||
|
|
||||||
|
@action(methods=['post'], detail=True, perms_map={'post':'*'})
|
||||||
|
def accpet(self, request, pk=None):
|
||||||
|
"""
|
||||||
|
接单,当工单当前处理人实际为多个人时(角色、部门、多人都有可能, 注意角色和部门有可能实际只有一人)
|
||||||
|
"""
|
||||||
|
ticket = self.get_object()
|
||||||
|
result = WfService.ticket_handle_permission_check(ticket, request.user)
|
||||||
|
if result.get('need_accept', False):
|
||||||
|
ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL
|
||||||
|
ticket.participant = request.user.id
|
||||||
|
ticket.save()
|
||||||
|
# 接单日志
|
||||||
|
# 更新工单流转记录
|
||||||
|
TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket),
|
||||||
|
suggestion='接单处理', participant_type=State.PARTICIPANT_TYPE_PERSONAL,
|
||||||
|
participant=request.user, transition=None)
|
||||||
|
return Response()
|
||||||
|
else:
|
||||||
|
raise APIException('无需接单')
|
||||||
|
|
||||||
class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
|
class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue