Merge branch 'master' of https://e.coding.net/ctcdevteam/cma_search
This commit is contained in:
commit
47371679f0
|
@ -118,4 +118,4 @@ class Qualification(BaseModel):
|
|||
class Qualificationother(BaseModel):
|
||||
qualification = models.ForeignKey(Qualification, on_delete=models.CASCADE, related_name='other_qualification')
|
||||
name = models.TextField('其他资质', null=True, blank=True)
|
||||
description = models.TextField('资质范围', null=True, blank=True)
|
||||
description = models.TextField('资质范围', null=True, blank=True)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.db.models import base
|
||||
from django.urls import path, include
|
||||
from rest_framework import routers
|
||||
from .views import CMAViewSet, CNASViewSet, CorrectViewSet, QualificationViewSet,InspectionViewSet,QualificationotherViewSet, QueryRecordListViewSet, correct_ability, merge_cma, merge_cnas
|
||||
from .views import AbilityContentViewSet, AbilityRecordViewSet, CMAViewSet, CNASViewSet, CorrectViewSet, QualificationViewSet,InspectionViewSet,QualificationotherViewSet, QueryRecordListViewSet, correct_ability, merge_cma, merge_cnas
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('cma', CMAViewSet, basename="cma")
|
||||
|
@ -11,6 +11,8 @@ router.register('qualificationother', QualificationotherViewSet, basename="quali
|
|||
router.register('inspection', InspectionViewSet, basename="inspection")
|
||||
router.register('queryrecord', QueryRecordListViewSet, basename="queryrecord")
|
||||
router.register('correct', CorrectViewSet, basename="correct")
|
||||
router.register('content', AbilityContentViewSet, basename="abilitycontent")
|
||||
router.register('record', AbilityRecordViewSet, basename="abilityrecord")
|
||||
urlpatterns = [
|
||||
path('merge/cma/', merge_cma),
|
||||
path('merge/cnas/', merge_cnas),
|
||||
|
|
|
@ -15,6 +15,12 @@ from openpyxl import Workbook, load_workbook
|
|||
from django.db.models import Count
|
||||
from utils.pagination import PageOrNot
|
||||
from rest_framework.views import APIView
|
||||
from apps.supervision.models import Content, Record
|
||||
from apps.supervision.serializers import ContentSerializer, RecordCreateSerializer, RecordSerializer
|
||||
from apps.system.mixins import CreateUpdateCustomMixin
|
||||
from utils.queryset import get_child_queryset2
|
||||
from django.utils import timezone
|
||||
from apps.supervision.permission import RecordPermission
|
||||
# Create your views here.
|
||||
import json
|
||||
|
||||
|
@ -31,6 +37,134 @@ class RecordMixin():
|
|||
QueryRecord.objects.create(user=request.user,path=request.path,ip=request.META.get('HTTP_X_FORWARDED_FOR'),method=\
|
||||
request.method,search=request.query_params.get('search',None),query=request.query_params)
|
||||
|
||||
class AbilityContentViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
||||
"""
|
||||
资质能力报送清单:增删改查
|
||||
"""
|
||||
perms_map = {'get': '*', 'post': 'content',
|
||||
'put': 'content', 'delete': 'content'}
|
||||
queryset = Content.objects.filter(cate=2)
|
||||
serializer_class = ContentSerializer
|
||||
pagination_class = None
|
||||
search_fields = ['name', 'desc']
|
||||
filterset_fields = ['type','cate']
|
||||
ordering = ['sortnum', 'create_time']
|
||||
|
||||
def perform_create(self, serializer):
|
||||
if hasattr(self.queryset.model, 'belong_dept'):
|
||||
serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept, cate=2)
|
||||
else:
|
||||
serializer.save(create_by = self.request.user, cate=2)
|
||||
def perform_update(self, serializer):
|
||||
serializer.save(update_by = self.request.user)
|
||||
|
||||
class AbilityRecordViewSet(PageOrNot, CreateUpdateCustomMixin, ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'record_create',
|
||||
'put': 'record_update', 'delete': 'record_delete'}
|
||||
queryset = Record.objects.filter(content__cate=2)
|
||||
serializer_class = RecordSerializer
|
||||
search_fields = ['content__name']
|
||||
ordering_fields = ['content__sortnum', 'belong_dept__sort']
|
||||
ordering = ['-task', 'content__sortnum', '-create_time']
|
||||
filterset_fields = ['content','content__cate', 'belong_dept', 'state']
|
||||
|
||||
def get_queryset(self):
|
||||
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, 'belong_dept'):
|
||||
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(belong_dept__in = belong_depts)
|
||||
elif '本级' in data_range:
|
||||
queryset = queryset.filter(belong_dept = user.dept)
|
||||
return queryset
|
||||
|
||||
def filter_queryset(self, queryset):
|
||||
if not self.request.query_params.get('pageoff', None):
|
||||
queryset = queryset.exclude(state='待发布')
|
||||
return super().filter_queryset(queryset)
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action == 'create':
|
||||
return RecordCreateSerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
@action(methods=['put'], detail=True, perms_map = {'put':'record_up'})
|
||||
def up(self, request, *args, **kwargs):
|
||||
"""
|
||||
报送
|
||||
"""
|
||||
obj = self.get_object()
|
||||
if obj.state in ['待整改','待报送', '已报送']:
|
||||
obj.files.clear()
|
||||
obj.files.add(*request.data['files'])
|
||||
obj.noteb = request.data['noteb']
|
||||
obj.state = '已报送'
|
||||
obj.up_user = request.user
|
||||
obj.up_date = timezone.now()
|
||||
obj.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
"""
|
||||
主动报送
|
||||
"""
|
||||
data = request.data
|
||||
if data.get('files', None):
|
||||
serializer = RecordCreateSerializer(data=data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
content = Content.objects.get(pk=data['content'])
|
||||
if content.cate==2:
|
||||
sdata = {'belong_dept':request.user.dept,
|
||||
'is_self':True,
|
||||
'content_name':content.name,
|
||||
'content_desc':content.desc,
|
||||
'state':'已报送',
|
||||
'up_user':request.user,
|
||||
'up_date':timezone.now()}
|
||||
serializer.save(**sdata)
|
||||
return Response(status=status.HTTP_201_CREATED)
|
||||
return Response('该材料不是资质能力!', status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response('未上传文件', status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@action(methods=['put'], detail=True, perms_map = {'put':'record_reject'}, permission_classes=[RecordPermission])
|
||||
def reject(self, request, *args, **kwargs):
|
||||
"""
|
||||
驳回
|
||||
"""
|
||||
obj = self.get_object()
|
||||
if obj.state == '已报送':
|
||||
if request.data.get('opinion', None):
|
||||
obj.opinion = request.data['opinion']
|
||||
obj.state = '待整改'
|
||||
obj.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
else:
|
||||
return Response('请填写修改意见', status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@action(methods=['put'], detail=True, perms_map = {'put':'record_confirm'})
|
||||
def confirm(self, request, *args, **kwargs):
|
||||
"""
|
||||
确认
|
||||
"""
|
||||
obj = self.get_object()
|
||||
if obj.state in ['已报送', '待报送']:
|
||||
obj.state = '已确认'
|
||||
obj.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class QueryRecordListViewSet(ListModelMixin, GenericViewSet):
|
||||
perms_map = {'get': 'queryrecord_view'}
|
||||
queryset = QueryRecord.objects.all()
|
||||
|
|
|
@ -6,9 +6,10 @@ class RecordFilter(filters.FilterSet):
|
|||
date_lt = filters.DateFilter(field_name='up_date',lookup_expr="lt")
|
||||
date_gt = filters.DateFilter(field_name='up_date',lookup_expr="gt")
|
||||
belong_dept=filters.NumberFilter(field_name='belong_dept')
|
||||
content_name = filters.CharFilter(field_name='content__name')
|
||||
content__name = filters.CharFilter(field_name='content__name')
|
||||
content__candoself = filters.BooleanFilter(field_name='content__candoself')
|
||||
state = filters.CharFilter(field_name='state',lookup_expr='icontains')
|
||||
isself = filters.BooleanFilter(field_name='is_self', lookup_expr='isnull')
|
||||
is_self = filters.BooleanFilter(field_name='is_self', lookup_expr='isnull')
|
||||
class Meta:
|
||||
model = Record
|
||||
fields = ['up_date','content__name','belong_dept','state','is_self','task', 'content']
|
||||
fields = ['up_date','content__name','belong_dept','state','is_self','task', 'content', 'content__candoself']
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# Generated by Django 3.0.5 on 2021-08-24 03:12
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0018_auto_20210430_1156'),
|
||||
('supervision', '0022_content_template'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='content',
|
||||
name='cate',
|
||||
field=models.IntegerField(choices=[(1, '监督'), (2, '资质')], default=1, verbose_name='材料归类'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='content',
|
||||
name='type',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='system.Dict', verbose_name='材料类型'),
|
||||
),
|
||||
]
|
|
@ -7,13 +7,17 @@ class Content(CommonAModel):
|
|||
"""
|
||||
资料清单
|
||||
"""
|
||||
cate_choices = (
|
||||
(1, '监督'),
|
||||
(2, '资质')
|
||||
)
|
||||
name = models.CharField('名称', max_length=100)
|
||||
desc = models.TextField('详情', null=True, blank=True)
|
||||
type = models.ForeignKey(Dict, verbose_name='材料类型', on_delete= models.DO_NOTHING)
|
||||
type = models.ForeignKey(Dict, verbose_name='材料类型', on_delete= models.DO_NOTHING, null=True, blank=True)
|
||||
can_doself = models.BooleanField('可随时主动报送', default=False)
|
||||
sortnum = models.IntegerField('排序号', default=1)
|
||||
template = models.CharField('模板地址', max_length=200, null=True, blank=True)
|
||||
|
||||
cate = models.IntegerField('材料归类', choices=cate_choices, default=1)
|
||||
class Meta:
|
||||
verbose_name = '报送清单'
|
||||
verbose_name_plural = verbose_name
|
||||
|
|
|
@ -28,7 +28,7 @@ class ContentViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
|||
"""
|
||||
perms_map = {'get': '*', 'post': 'content',
|
||||
'put': 'content', 'delete': 'content'}
|
||||
queryset = Content.objects.all()
|
||||
queryset = Content.objects.filter(cate=1)
|
||||
serializer_class = ContentSerializer
|
||||
pagination_class = None
|
||||
search_fields = ['name', 'desc']
|
||||
|
@ -204,7 +204,7 @@ from .permission import RecordPermission
|
|||
class RecordViewSet(PageOrNot, CreateUpdateCustomMixin, ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'record_create',
|
||||
'put': 'record_update', 'delete': 'record_delete'}
|
||||
queryset = Record.objects.all()
|
||||
queryset = Record.objects.filter(content__cate=1)
|
||||
serializer_class = RecordSerializer
|
||||
search_fields = ['content__name','task__name']
|
||||
ordering_fields = ['content__sortnum', 'belong_dept__sort', 'task']
|
||||
|
|
|
@ -19,6 +19,11 @@ class VRecordSerializer(serializers.ModelSerializer):
|
|||
class Meta:
|
||||
model = ViewRecord
|
||||
fields = '__all__'
|
||||
@staticmethod
|
||||
def setup_eager_loading(queryset):
|
||||
queryset = queryset.select_related('user', 'video')
|
||||
return queryset
|
||||
|
||||
|
||||
class VRecordUpdateSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
|
|
|
@ -55,9 +55,9 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet):
|
|||
queryset = ViewRecord.objects.filter(user=request.user)
|
||||
page = self.paginate_queryset(queryset)
|
||||
if page is not None:
|
||||
serializer = self.get_serializer(page, many=True)
|
||||
serializer = VRecordSerializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
serializer = VRecordSerializer(queryset, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
|
@ -81,7 +81,7 @@ class MyViewRecordAPIView(APIView):
|
|||
video = Video.objects.get(pk=id)
|
||||
except:
|
||||
return Response('视频不存在', status=HTTP_400_BAD_REQUEST)
|
||||
record = ViewRecord.objects.get_or_create(video=video, user=request.user, defaults={'video':video, 'user':request.user})
|
||||
record, _ = ViewRecord.objects.get_or_create(video=video, user=request.user, defaults={'video':video, 'user':request.user})
|
||||
serializer = VRecordSerializer(instance=record)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
|
Loading…
Reference in New Issue