diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index f869c2b..e8c35cb 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -104,11 +104,24 @@ class SubProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, UpdateMo @action(methods=['get'], detail=True, perms_map={'get':'*'}, serializer_class=SubProductionProgressSerializer) def progress(self, request, pk=None): + """ + 生产进度详情 + """ obj = self.get_object() serializer = SubProductionProgressSerializer(instance=obj.progress_subplan, many=True) return Response(serializer.data) - + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=serializers.Serializer) + def issue(self, request, pk=None): + """ + 下达任务 + """ + obj = self.get_object() + if obj.state == 0: + obj.state = 1 + obj.save() + return Response() + raise APIException('计划状态有误') class ResourceViewSet(GenericViewSet): perms_map = {'*': '*'} diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index 3d3f439..a86e3f3 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -1,3 +1,4 @@ +from django.db.models import query from apps.system.models import User from apps.wf.filters import TicketFilterSet from django.core.exceptions import AppRegistryNotReady @@ -13,7 +14,7 @@ from apps.system.mixins import CreateUpdateCustomMixin, CreateUpdateModelAMixin, from apps.wf.services import WfService from rest_framework.exceptions import APIException, PermissionDenied from rest_framework import status - +from django.db.models import Count # Create your views here. class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet): perms_map = {'get': '*', 'post': 'workflow_create', @@ -165,6 +166,17 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin participant=ticket.create_by, transition=transition) return Response(TicketSerializer(instance=ticket).data) + @action(methods=['get'], detail=False, perms_map={'get':'*'}) + def duty_agg(self, request, pk=None): + """ + 工单待办聚合 + """ + ret = {} + queryset = Ticket.objects.filter(participant__contains=request.user.id, is_deleted=False)\ + .exclude(act_state__in=[Ticket.TICKET_ACT_STATE_FINISH, Ticket.TICKET_ACT_STATE_CLOSED]) + ret['total_count'] = queryset.count() + ret['details'] = list(queryset.annotate(count = Count('workflow')).values('workflow', 'workflow__name', 'count')) + return Response(ret) @action(methods=['post'], detail=True, perms_map={'post':'*'}) def handle(self, request, pk=None):