qtask 可看下级

This commit is contained in:
caoqianming 2022-11-02 15:50:38 +08:00
parent 81d99a168c
commit adf5957f70
1 changed files with 65 additions and 69 deletions

View File

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