Merge branch 'master' of https://e.coding.net/ctcdevteam/cma_search
This commit is contained in:
		
						commit
						e9101406f1
					
				| 
						 | 
					@ -12,6 +12,8 @@ from utils.pagination import PageOrNot
 | 
				
			||||||
from rest_framework.exceptions import ParseError
 | 
					from rest_framework.exceptions import ParseError
 | 
				
			||||||
from rest_framework import serializers
 | 
					from rest_framework import serializers
 | 
				
			||||||
from rest_framework.exceptions import ParseError
 | 
					from rest_framework.exceptions import ParseError
 | 
				
			||||||
 | 
					from utils.queryset import get_child_queryset2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class QualiLibViewSet(PageOrNot, ListModelMixin, GenericViewSet):
 | 
					class QualiLibViewSet(PageOrNot, ListModelMixin, GenericViewSet):
 | 
				
			||||||
    perms_map = {'get': '*'}
 | 
					    perms_map = {'get': '*'}
 | 
				
			||||||
| 
						 | 
					@ -20,9 +22,11 @@ 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']
 | 
				
			||||||
| 
						 | 
					@ -34,7 +38,8 @@ class QualiViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
 | 
				
			||||||
        我的资质
 | 
					        我的资质
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        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:
 | 
				
			||||||
| 
						 | 
					@ -44,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']
 | 
				
			||||||
| 
						 | 
					@ -68,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')
 | 
				
			||||||
| 
						 | 
					@ -81,16 +89,21 @@ class QOrgViewSet(ListModelMixin, GenericViewSet):
 | 
				
			||||||
        我的报送任务
 | 
					        我的报送任务
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        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)
 | 
				
			||||||
 | 
					        deptId = self.request.query_params.get('org', mydept.id)
 | 
				
			||||||
 | 
					        if deptId:
 | 
				
			||||||
 | 
					            queryset = queryset.filter(org__id=deptId)
 | 
				
			||||||
        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)
 | 
				
			||||||
| 
						 | 
					@ -98,9 +111,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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -111,22 +126,41 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel
 | 
				
			||||||
            return QActionDetailSerializer
 | 
					            return QActionDetailSerializer
 | 
				
			||||||
        return super().get_serializer_class()
 | 
					        return super().get_serializer_class()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_queryset(self):
 | 
				
			||||||
    @action(methods=['get'], detail=False, perms_map = {'get':'qaction_my'})
 | 
					        queryset = self.queryset
 | 
				
			||||||
    def my(self, request, *args, **kwargs):
 | 
					        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, 'belong_dept'):
 | 
				
			||||||
            user = self.request.user
 | 
					            user = self.request.user
 | 
				
			||||||
        queryset = self.filter_queryset(self.get_queryset().filter(belong_dept=user.dept))
 | 
					            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(belong_dept__in=belong_depts)
 | 
				
			||||||
 | 
					            elif '本级' in data_range:
 | 
				
			||||||
 | 
					                queryset = queryset.filter(belong_dept=user.dept)
 | 
				
			||||||
 | 
					        return queryset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        page = self.paginate_queryset(queryset)
 | 
					    # @action(methods=['get'], detail=False, perms_map={'get': '*'})
 | 
				
			||||||
        if page is not None:
 | 
					    # def my(self, request, *args, **kwargs):
 | 
				
			||||||
            serializer = self.get_serializer(page, many=True)
 | 
					    #     """
 | 
				
			||||||
            return self.get_paginated_response(serializer.data)
 | 
					    #     我的报送操作
 | 
				
			||||||
 | 
					    #     """
 | 
				
			||||||
 | 
					    #     user = self.request.user
 | 
				
			||||||
 | 
					    #     queryset = self.filter_queryset(
 | 
				
			||||||
 | 
					    #         self.get_queryset().filter(belong_dept=user.dept))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        serializer = self.get_serializer(queryset, many=True)
 | 
					    #     page = self.paginate_queryset(queryset)
 | 
				
			||||||
        return Response(serializer.data)
 | 
					    #     if page is not None:
 | 
				
			||||||
 | 
					    #         serializer = self.get_serializer(page, many=True)
 | 
				
			||||||
 | 
					    #         return self.get_paginated_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
 | 
				
			||||||
| 
						 | 
					@ -186,16 +220,19 @@ 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()
 | 
				
			||||||
| 
						 | 
					@ -225,7 +262,8 @@ 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()
 | 
				
			||||||
| 
						 | 
					@ -240,12 +278,12 @@ 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
 | 
				
			||||||
| 
						 | 
					@ -263,9 +301,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))
 | 
				
			||||||
| 
						 | 
					@ -284,8 +324,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