qtask 可看下级
This commit is contained in:
		
							parent
							
								
									81d99a168c
								
							
						
					
					
						commit
						adf5957f70
					
				|  | @ -14,6 +14,7 @@ from rest_framework import serializers | ||||||
| from rest_framework.exceptions import ParseError | from rest_framework.exceptions import ParseError | ||||||
| from utils.queryset import get_child_queryset2 | from utils.queryset import get_child_queryset2 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| class QualiLibViewSet(PageOrNot, ListModelMixin, GenericViewSet): | class QualiLibViewSet(PageOrNot, ListModelMixin, GenericViewSet): | ||||||
|     perms_map = {'get': '*'} |     perms_map = {'get': '*'} | ||||||
|     queryset = QualiLib.objects.all() |     queryset = QualiLib.objects.all() | ||||||
|  | @ -21,21 +22,24 @@ class QualiLibViewSet(PageOrNot, ListModelMixin, GenericViewSet): | ||||||
|     search_fields = ['name'] |     search_fields = ['name'] | ||||||
|     ordering = ['-create_time'] |     ordering = ['-create_time'] | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| class QualiViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): | class QualiViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): | ||||||
|     perms_map = {'get': '*'} |     perms_map = {'get': '*'} | ||||||
|     queryset = Quali.objects.select_related('org', 'province', 'city', 'file').prefetch_related('citys') |     queryset = Quali.objects.select_related( | ||||||
|  |         'org', 'province', 'city', 'file').prefetch_related('citys') | ||||||
|     serializer_class = QualiListSerializer |     serializer_class = QualiListSerializer | ||||||
|     search_fields = ['name', 'type', 'grade', 'scope', 'level', 'description'] |     search_fields = ['name', 'type', 'grade', 'scope', 'level', 'description'] | ||||||
|     ordering = ['org', 'org__sort', 'create_time'] |     ordering = ['org', 'org__sort', 'create_time'] | ||||||
|     filterset_fields = ['org', 'type', 'grade', 'province', 'city', 'citys'] |     filterset_fields = ['org', 'type', 'grade', 'province', 'city', 'citys'] | ||||||
| 
 | 
 | ||||||
|     @action(methods=['get'], detail=False, perms_map = {'get':'*'}) |     @action(methods=['get'], detail=False, perms_map={'get': '*'}) | ||||||
|     def my(self, request, *args, **kwargs): |     def my(self, request, *args, **kwargs): | ||||||
|         """ |         """ | ||||||
|         我的资质 |         我的资质 | ||||||
|         """ |         """ | ||||||
|         user = self.request.user |         user = self.request.user | ||||||
|         queryset = self.filter_queryset(self.get_queryset().filter(org=user.dept)) |         queryset = self.filter_queryset( | ||||||
|  |             self.get_queryset().filter(org=user.dept)) | ||||||
| 
 | 
 | ||||||
|         page = self.paginate_queryset(queryset) |         page = self.paginate_queryset(queryset) | ||||||
|         if page is not None: |         if page is not None: | ||||||
|  | @ -45,8 +49,10 @@ class QualiViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): | ||||||
|         serializer = self.get_serializer(queryset, many=True) |         serializer = self.get_serializer(queryset, many=True) | ||||||
|         return Response(serializer.data) |         return Response(serializer.data) | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| class QTaskViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, UpdateModelMixin, DestroyModelMixin, GenericViewSet): | class QTaskViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, UpdateModelMixin, DestroyModelMixin, GenericViewSet): | ||||||
|     perms_map = {'get': 'qtask_view', 'post': 'qtask_create', 'put': 'qtask_update'} |     perms_map = {'get': 'qtask_view', | ||||||
|  |                  'post': 'qtask_create', 'put': 'qtask_update'} | ||||||
|     queryset = QTask.objects.all() |     queryset = QTask.objects.all() | ||||||
|     serializer_class = QTaskListSerializer |     serializer_class = QTaskListSerializer | ||||||
|     ordering = ['-create_time'] |     ordering = ['-create_time'] | ||||||
|  | @ -55,8 +61,8 @@ class QTaskViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, Up | ||||||
|         if self.action in ['create', 'update']: |         if self.action in ['create', 'update']: | ||||||
|             return QTaskCreateUpdateSerializer |             return QTaskCreateUpdateSerializer | ||||||
|         return super().get_serializer_class() |         return super().get_serializer_class() | ||||||
|      | 
 | ||||||
|     @action(methods=['put'], detail=True, perms_map = {'put':'qtask_start'}, serializer_class=serializers.Serializer) |     @action(methods=['put'], detail=True, perms_map={'put': 'qtask_start'}, serializer_class=serializers.Serializer) | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def start(self, request, *args, **kwargs): |     def start(self, request, *args, **kwargs): | ||||||
|         """ |         """ | ||||||
|  | @ -69,6 +75,7 @@ class QTaskViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, Up | ||||||
|             return Response() |             return Response() | ||||||
|         return Response('任务状态错误', status=status.HTTP_400_BAD_REQUEST) |         return Response('任务状态错误', status=status.HTTP_400_BAD_REQUEST) | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| class QOrgViewSet(ListModelMixin, GenericViewSet): | class QOrgViewSet(ListModelMixin, GenericViewSet): | ||||||
|     perms_map = {'get': 'qtask_view'} |     perms_map = {'get': 'qtask_view'} | ||||||
|     queryset = QOrg.objects.select_related('qtask', 'org') |     queryset = QOrg.objects.select_related('qtask', 'org') | ||||||
|  | @ -76,41 +83,26 @@ class QOrgViewSet(ListModelMixin, GenericViewSet): | ||||||
|     serializer_class = QOrgListSerializer |     serializer_class = QOrgListSerializer | ||||||
|     ordering = ['-create_time'] |     ordering = ['-create_time'] | ||||||
| 
 | 
 | ||||||
|     def get_queryset(self): |     @action(methods=['get'], detail=False, perms_map={'get': 'qtask_my'}) | ||||||
|         queryset = self.queryset |  | ||||||
|         if hasattr(self.get_serializer_class(), 'setup_eager_loading'): |  | ||||||
|             queryset = self.get_serializer_class().setup_eager_loading(queryset) |  | ||||||
|         if self.request.user.is_superuser: |  | ||||||
|             pass |  | ||||||
|         if hasattr(queryset.model, 'org'): |  | ||||||
|             user = self.request.user |  | ||||||
|             roles = user.roles |  | ||||||
|             data_range = roles.values_list('datas', flat=True) |  | ||||||
|             if '全部' in data_range: |  | ||||||
|                 pass |  | ||||||
|             elif '本级及以下' in data_range: |  | ||||||
|                 belong_depts = get_child_queryset2(user.dept) |  | ||||||
|                 queryset = queryset.filter(org__in = belong_depts) |  | ||||||
|             elif '本级' in data_range: |  | ||||||
|                 queryset = queryset.filter(org = user.dept) |  | ||||||
|         return queryset |  | ||||||
| 
 |  | ||||||
|     @action(methods=['get'], detail=False, perms_map = {'get':'qtask_my'}) |  | ||||||
|     def my(self, request, *args, **kwargs): |     def my(self, request, *args, **kwargs): | ||||||
|         """ |         """ | ||||||
|         我的报送任务 |         我的报送任务 | ||||||
|         """ |         """ | ||||||
|         user = self.request.user |         user = self.request.user | ||||||
|         queryset = self.filter_queryset(self.get_queryset().filter(org=user.dept, qtask__is_deleted=False).exclude(qtask__state='待发布')) |         queryset = self.filter_queryset(self.get_queryset().filter(qtask__is_deleted=False).exclude(qtask__state='待发布')) | ||||||
| 
 |         mydept = user.dept | ||||||
|  |         belong_depts = get_child_queryset2(mydept) | ||||||
|  |         queryset = queryset.filter(org__in = belong_depts) | ||||||
|  |         dept = self.request.query_params.get('org', mydept.id) | ||||||
|  |         queryset = queryset.filter(org=dept) | ||||||
|         page = self.paginate_queryset(queryset) |         page = self.paginate_queryset(queryset) | ||||||
|         if page is not None: |         if page is not None: | ||||||
|             serializer = self.get_serializer(page, many=True) |             serializer = self.get_serializer(page, many=True) | ||||||
|             return self.get_paginated_response(serializer.data) |             return self.get_paginated_response(serializer.data) | ||||||
| 
 |  | ||||||
|         serializer = self.get_serializer(queryset, many=True) |         serializer = self.get_serializer(queryset, many=True) | ||||||
|         return Response(serializer.data) |         return Response(serializer.data) | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| def cal_count(qtask, org): | def cal_count(qtask, org): | ||||||
|     qs = QAction.objects.filter(qtask=qtask, belong_dept=org) |     qs = QAction.objects.filter(qtask=qtask, belong_dept=org) | ||||||
|     qorg = QOrg.objects.get(qtask=qtask, org=org) |     qorg = QOrg.objects.get(qtask=qtask, org=org) | ||||||
|  | @ -118,9 +110,11 @@ def cal_count(qtask, org): | ||||||
|     qorg.count_confirmed = qs.filter(confirmed=True).count() |     qorg.count_confirmed = qs.filter(confirmed=True).count() | ||||||
|     qorg.save() |     qorg.save() | ||||||
| 
 | 
 | ||||||
| class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModelMixin,GenericViewSet): | 
 | ||||||
|  | class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModelMixin, GenericViewSet): | ||||||
|     perms_map = {'get': '*', 'delete': 'qaction_delete'} |     perms_map = {'get': '*', 'delete': 'qaction_delete'} | ||||||
|     queryset = QAction.objects.select_related('file', 'atype', 'afield', 'qtask', 'belong_dept', 'create_by') |     queryset = QAction.objects.select_related( | ||||||
|  |         'file', 'atype', 'afield', 'qtask', 'belong_dept', 'create_by') | ||||||
|     filterset_fields = ['qtask', 'belong_dept', 'atype', 'afield'] |     filterset_fields = ['qtask', 'belong_dept', 'atype', 'afield'] | ||||||
|     serializer_class = QActionListSerializer |     serializer_class = QActionListSerializer | ||||||
| 
 | 
 | ||||||
|  | @ -145,27 +139,28 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|                 pass |                 pass | ||||||
|             elif '本级及以下' in data_range: |             elif '本级及以下' in data_range: | ||||||
|                 belong_depts = get_child_queryset2(user.dept) |                 belong_depts = get_child_queryset2(user.dept) | ||||||
|                 queryset = queryset.filter(belong_dept__in = belong_depts) |                 queryset = queryset.filter(belong_dept__in=belong_depts) | ||||||
|             elif '本级' in data_range: |             elif '本级' in data_range: | ||||||
|                 queryset = queryset.filter(belong_dept = user.dept) |                 queryset = queryset.filter(belong_dept=user.dept) | ||||||
|         return queryset |         return queryset | ||||||
| 
 | 
 | ||||||
|     @action(methods=['get'], detail=False, perms_map = {'get':'qaction_my'}) |     # @action(methods=['get'], detail=False, perms_map={'get': '*'}) | ||||||
|     def my(self, request, *args, **kwargs): |     # def my(self, request, *args, **kwargs): | ||||||
|         """ |     #     """ | ||||||
|         我的报送操作 |     #     我的报送操作 | ||||||
|         """ |     #     """ | ||||||
|         user = self.request.user |     #     user = self.request.user | ||||||
|         queryset = self.filter_queryset(self.get_queryset().filter(belong_dept=user.dept)) |     #     queryset = self.filter_queryset( | ||||||
|  |     #         self.get_queryset().filter(belong_dept=user.dept)) | ||||||
| 
 | 
 | ||||||
|         page = self.paginate_queryset(queryset) |     #     page = self.paginate_queryset(queryset) | ||||||
|         if page is not None: |     #     if page is not None: | ||||||
|             serializer = self.get_serializer(page, many=True) |     #         serializer = self.get_serializer(page, many=True) | ||||||
|             return self.get_paginated_response(serializer.data) |     #         return self.get_paginated_response(serializer.data) | ||||||
|  | 
 | ||||||
|  |     #     serializer = self.get_serializer(queryset, many=True) | ||||||
|  |     #     return Response(serializer.data) | ||||||
| 
 | 
 | ||||||
|         serializer = self.get_serializer(queryset, many=True) |  | ||||||
|         return Response(serializer.data) |  | ||||||
|      |  | ||||||
|     def perform_destroy(self, instance): |     def perform_destroy(self, instance): | ||||||
|         user = self.request.user |         user = self.request.user | ||||||
|         if not instance.confirmed: |         if not instance.confirmed: | ||||||
|  | @ -175,7 +170,7 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|             raise ParseError('报送已确认, 不可删除') |             raise ParseError('报送已确认, 不可删除') | ||||||
| 
 | 
 | ||||||
|     @action(methods=['post'], detail=False, |     @action(methods=['post'], detail=False, | ||||||
|             perms_map = {'post':'qaction_create'}, serializer_class=QActionServiceSerializer) |             perms_map={'post': 'qaction_create'}, serializer_class=QActionServiceSerializer) | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def service_update(self, request, *args, **kwargs): |     def service_update(self, request, *args, **kwargs): | ||||||
|         """ |         """ | ||||||
|  | @ -190,7 +185,7 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|         return Response() |         return Response() | ||||||
| 
 | 
 | ||||||
|     @action(methods=['post'], detail=False, |     @action(methods=['post'], detail=False, | ||||||
|             perms_map = {'post':'qaction_create'}, serializer_class=QActionQualiCreateSerializer) |             perms_map={'post': 'qaction_create'}, serializer_class=QActionQualiCreateSerializer) | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def quali_create(self, request, *args, **kwargs): |     def quali_create(self, request, *args, **kwargs): | ||||||
|         """ |         """ | ||||||
|  | @ -205,7 +200,7 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|         return Response() |         return Response() | ||||||
| 
 | 
 | ||||||
|     @action(methods=['post'], detail=False, |     @action(methods=['post'], detail=False, | ||||||
|             perms_map = {'post':'qaction_create'}, serializer_class=QActionQualiUpdateSerializer) |             perms_map={'post': 'qaction_create'}, serializer_class=QActionQualiUpdateSerializer) | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def quali_update(self, request, *args, **kwargs): |     def quali_update(self, request, *args, **kwargs): | ||||||
|         """ |         """ | ||||||
|  | @ -224,22 +219,25 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|         obj.save() |         obj.save() | ||||||
|         for k, v in value2.items(): |         for k, v in value2.items(): | ||||||
|             if v != old_data[k]: |             if v != old_data[k]: | ||||||
|                 QActionItem.objects.create(action='update', field=k, value1=old_data[k], value2=v, qaction=obj) |                 QActionItem.objects.create( | ||||||
|  |                     action='update', field=k, value1=old_data[k], value2=v, qaction=obj) | ||||||
|             if k == 'citys': |             if k == 'citys': | ||||||
|                 old_citys = set(old_data['citys']) |                 old_citys = set(old_data['citys']) | ||||||
|                 new_citys = set(v) |                 new_citys = set(v) | ||||||
|                 removes = old_citys.difference(new_citys) |                 removes = old_citys.difference(new_citys) | ||||||
|                 adds = new_citys.difference(old_citys) |                 adds = new_citys.difference(old_citys) | ||||||
|                 for i in removes: |                 for i in removes: | ||||||
|                     QActionItem.objects.create(action='city:remove', field='citys', city=City.objects.get(id=i), qaction=obj) |                     QActionItem.objects.create( | ||||||
|  |                         action='city:remove', field='citys', city=City.objects.get(id=i), qaction=obj) | ||||||
|                 for i in adds: |                 for i in adds: | ||||||
|                     QActionItem.objects.create(action='city:add', field='citys', city=City.objects.get(id=i), qaction=obj) |                     QActionItem.objects.create( | ||||||
|  |                         action='city:add', field='citys', city=City.objects.get(id=i), qaction=obj) | ||||||
| 
 | 
 | ||||||
|         cal_count(vdata['qtask'], user.dept) |         cal_count(vdata['qtask'], user.dept) | ||||||
|         return Response() |         return Response() | ||||||
|      | 
 | ||||||
|     @action(methods=['post'], detail=False, |     @action(methods=['post'], detail=False, | ||||||
|             perms_map = {'post':'qaction_create'}, serializer_class=QActionACreateSerializer) |             perms_map={'post': 'qaction_create'}, serializer_class=QActionACreateSerializer) | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def ability_create(self, request, *args, **kwargs): |     def ability_create(self, request, *args, **kwargs): | ||||||
|         """ |         """ | ||||||
|  | @ -254,7 +252,7 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|         return Response() |         return Response() | ||||||
| 
 | 
 | ||||||
|     @action(methods=['post'], detail=False, |     @action(methods=['post'], detail=False, | ||||||
|             perms_map = {'post':'qaction_create'}, serializer_class=QActionNoChangeSerializer) |             perms_map={'post': 'qaction_create'}, serializer_class=QActionNoChangeSerializer) | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def ability_nochange(self, request, *args, **kwargs): |     def ability_nochange(self, request, *args, **kwargs): | ||||||
|         """ |         """ | ||||||
|  | @ -263,13 +261,14 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|         user = request.user |         user = request.user | ||||||
|         serializer = self.get_serializer(data=request.data) |         serializer = self.get_serializer(data=request.data) | ||||||
|         serializer.is_valid(raise_exception=True) |         serializer.is_valid(raise_exception=True) | ||||||
|         serializer.save(create_by=user, belong_dept=user.dept, action='ability:nochange') |         serializer.save(create_by=user, belong_dept=user.dept, | ||||||
|  |                         action='ability:nochange') | ||||||
|         vdata = serializer.validated_data |         vdata = serializer.validated_data | ||||||
|         cal_count(vdata['qtask'], user.dept) |         cal_count(vdata['qtask'], user.dept) | ||||||
|         return Response() |         return Response() | ||||||
|      | 
 | ||||||
|     @action(methods=['post'], detail=False, |     @action(methods=['post'], detail=False, | ||||||
|             perms_map = {'post':'qaction_create'}, serializer_class=QActionNoChangeSerializer) |             perms_map={'post': 'qaction_create'}, serializer_class=QActionNoChangeSerializer) | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def quali_nochange(self, request, *args, **kwargs): |     def quali_nochange(self, request, *args, **kwargs): | ||||||
|         """ |         """ | ||||||
|  | @ -278,13 +277,13 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|         user = request.user |         user = request.user | ||||||
|         serializer = self.get_serializer(data=request.data) |         serializer = self.get_serializer(data=request.data) | ||||||
|         serializer.is_valid(raise_exception=True) |         serializer.is_valid(raise_exception=True) | ||||||
|         serializer.save(create_by=user, belong_dept=user.dept, action='quali:nochange') |         serializer.save(create_by=user, belong_dept=user.dept, | ||||||
|  |                         action='quali:nochange') | ||||||
|         vdata = serializer.validated_data |         vdata = serializer.validated_data | ||||||
|         cal_count(vdata['qtask'], user.dept) |         cal_count(vdata['qtask'], user.dept) | ||||||
|         return Response() |         return Response() | ||||||
| 
 | 
 | ||||||
| 
 |     @action(methods=['put'], detail=True, perms_map={'put': 'qaction_confirm'}, | ||||||
|     @action(methods=['put'], detail=True, perms_map = {'put':'qaction_confirm'}, |  | ||||||
|             serializer_class=serializers.Serializer) |             serializer_class=serializers.Serializer) | ||||||
|     @transaction.atomic |     @transaction.atomic | ||||||
|     def confirm(self, request, *args, **kwargs): |     def confirm(self, request, *args, **kwargs): | ||||||
|  | @ -301,9 +300,11 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|         elif obj.action == 'quali:create': |         elif obj.action == 'quali:create': | ||||||
|             serializer = QualiCreateSerializer(data=obj.value2) |             serializer = QualiCreateSerializer(data=obj.value2) | ||||||
|             serializer.is_valid(raise_exception=True) |             serializer.is_valid(raise_exception=True) | ||||||
|             instance = serializer.save(org=obj.belong_dept, create_by=obj.create_by) |             instance = serializer.save( | ||||||
|  |                 org=obj.belong_dept, create_by=obj.create_by) | ||||||
|             if instance.type == 'OTHER': |             if instance.type == 'OTHER': | ||||||
|                 qualiLib, _ = QualiLib.objects.get_or_create(name=instance.name) |                 qualiLib, _ = QualiLib.objects.get_or_create( | ||||||
|  |                     name=instance.name) | ||||||
|                 levels = qualiLib.levels |                 levels = qualiLib.levels | ||||||
|                 levels.append(instance.level) |                 levels.append(instance.level) | ||||||
|                 le = list(set(levels)) |                 le = list(set(levels)) | ||||||
|  | @ -322,8 +323,3 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel | ||||||
|         obj.save() |         obj.save() | ||||||
|         cal_count(obj.qtask, obj.belong_dept) |         cal_count(obj.qtask, obj.belong_dept) | ||||||
|         return Response(status=status.HTTP_200_OK) |         return Response(status=status.HTTP_200_OK) | ||||||
|          |  | ||||||
|          |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|      |  | ||||||
		Loading…
	
		Reference in New Issue