liu tao hace 3 años
padre
commit
e5009d2e88

+ 13 - 0
apps/api/admin/exampaper/urls.py

@@ -0,0 +1,13 @@
+# coding=utf-8
+
+from django.conf.urls import url, include
+from rest_framework.routers import SimpleRouter
+
+from .views import *
+
+urlpatterns = [
+]
+
+router = SimpleRouter()
+router.register(r'', ExamPaperViewSet)
+urlpatterns += router.urls

+ 42 - 0
apps/api/admin/exampaper/views.py

@@ -0,0 +1,42 @@
+# coding=utf-8
+
+from django.db import transaction
+from rest_framework.views import APIView
+from utils.permission import IsAdministrator
+from utils import response_error, response_ok
+from utils.custom_modelviewset import CustomModelViewSet
+from apps.system.models import SysLog
+
+from apps.examination.exampaper.models import ExamPaper
+from apps.examination.exampaper.filters import ExamPaperFilter
+from apps.examination.exampaper.serializers import ExamPaperSerializer
+
+
+class ExamPaperViewSet(CustomModelViewSet):
+    permission_classes = [IsAdministrator, ]
+    queryset = ExamPaper.objects.filter(delete=False)
+    serializer_class = ExamPaperSerializer
+
+    def filter_queryset(self, queryset):
+        f = ExamPaperFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+    def perform_create(self, serializer):
+        super(ExamPaperViewSet, self).perform_create(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        SysLog.objects.addnew(self.request.user, SysLog.INSERT, u'添加试卷[%s],id=%d' % (instance.name, instance.id), validated_data)
+
+    def perform_update(self, serializer):
+        super(ExamPaperViewSet, self).perform_update(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'修改试卷[%s],id=%d' % (instance.name, instance.id), validated_data)
+
+    def destroy(self, request, *args, **kwargs):
+        with transaction.atomic():
+            instance = self.get_object()
+            instance.delete = True
+            instance.save()
+            SysLog.objects.addnew(self.request.user, SysLog.DELETE, u'删除试卷[%s],id=%d' % (instance.name, instance.id))
+        return response_ok()

+ 1 - 0
apps/api/admin/urls.py

@@ -15,4 +15,5 @@ urlpatterns = [
     url(r'^subject/', include('apps.api.admin.subject.urls')),
 
     url(r'^examquestion/', include('apps.api.admin.examquestion.urls')),
+    url(r'^exampaper/', include('apps.api.admin.exampaper.urls')),
 ]

+ 13 - 0
apps/examination/exampaper/filters.py

@@ -0,0 +1,13 @@
+# coding=utf-8
+import django_filters
+
+from .models import ExamPaper
+
+class ExamPaperFilter(django_filters.FilterSet):
+    name = django_filters.CharFilter(field_name="name", lookup_expr="icontains")
+    subject = django_filters.CharFilter(field_name='subject_id')
+    type = django_filters.CharFilter(field_name='type')
+
+    class Meta:
+        model = ExamPaper
+        fields = "__all__"

+ 13 - 0
apps/examination/exampaper/models.py

@@ -64,6 +64,19 @@ class ExamPaper(models.Model):
         verbose_name = u"试卷管理"
         default_permissions = ()
 
+    def update_count(self):
+        self.single_total_count = self.single_simple_count + self.single_mid_count + self.single_hard_count
+        self.multiple_total_count = self.multiple_simple_count + self.multiple_mid_count + self.multiple_hard_count
+        self.fill_total_count = self.fill_simple_count + self.fill_mid_count + self.fill_hard_count
+        self.judgment_total_count = self.judgment_simple_count + self.judgment_mid_count + self.judgment_hard_count
+        self.single_total_scores = self.single_scores * self.single_total_count
+        self.multiple_total_scores = self.multiple_scores * self.multiple_total_count
+        self.fill_total_scores = self.fill_scores * self.fill_total_count
+        self.judgment_total_scores = self.judgment_scores * self.judgment_total_count
+        self.question_total_count = self.single_total_count + self.multiple_total_count + self.fill_total_count + self.judgment_total_count
+        self.question_total_scores = self.single_total_scores + self.multiple_total_scores + self.fill_total_scores + self.judgment_total_scores
+        return self
+
 class ExamPaperDetail(models.Model):
     main = models.ForeignKey(ExamPaper, verbose_name=u"试卷", on_delete=models.PROTECT)
     question = models.ForeignKey(ExamQuestion, verbose_name=u"试题", on_delete=models.PROTECT)

+ 32 - 0
apps/examination/exampaper/serializers.py

@@ -0,0 +1,32 @@
+# coding=utf-8
+
+from rest_framework import serializers
+from .models import ExamPaper
+from utils.exceptions import CustomError
+
+class ExamPaperSerializer(serializers.ModelSerializer):
+    subject_name = serializers.CharField(source='subject.name', read_only=True)
+
+    class Meta:
+        model = ExamPaper
+        fields = "__all__"
+
+    def validate(self, attrs):
+        if 'subject' in attrs and attrs['subject'].delete:
+            raise CustomError(u'科目[%s]已被删除!' % attrs['subject'].name)
+        return attrs
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.context['request'].user
+        instance = super(ExamPaperSerializer, self).create(validated_data)
+        instance.update_count()
+        instance.save()
+        return instance
+
+    def update(self, instance, validated_data):
+        if instance.delete:
+            raise CustomError(u'试卷[%s]已经被删除,禁止操作' % instance.name)
+        instance = super(ExamPaperSerializer, self).update(instance, validated_data)
+        instance.update_count()
+        instance.save()
+        return instance