Merge branch 'develop' of https://e.coding.net/ctcdevteam/hberp/hberp into develop

This commit is contained in:
shilixia 2021-09-28 17:03:24 +08:00
commit 611736c4c6
6 changed files with 38 additions and 8 deletions

View File

@ -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

View File

@ -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:

View File

@ -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)

View File

@ -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)

View File

@ -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="")

View File

@ -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):
""" """