+
+
+
-
+
+
+
+
+
+
+
取消
@@ -224,6 +246,7 @@ const defaultexam = {
closetime: null,
chance:3,
only_vip:false,
+ cert_template:null,
auto_issue:false
};
const listQuery = {
@@ -240,6 +263,10 @@ export default {
id: "",
name: "",
},
+ certTemplateOptions:[
+ {value: 1, label: "模板1"},
+ {value: 2, label: "模板2"}
+ ],
listQuery:listQuery,
tableData: {count:0},
listLoading: true,
diff --git a/test_client/src/views/login/index.vue b/test_client/src/views/login/index.vue
index bd396d1..8971951 100644
--- a/test_client/src/views/login/index.vue
+++ b/test_client/src/views/login/index.vue
@@ -12,7 +12,7 @@
-
小程序后台管理
+ 中科辐射小程序后台管理
diff --git a/test_server/crm/views.py b/test_server/crm/views.py
index dfe6bab..51c3b8d 100644
--- a/test_server/crm/views.py
+++ b/test_server/crm/views.py
@@ -701,10 +701,12 @@ def candidate(request):
if request.GET.get('id', None):
try:
candidate = Candidate.objects.get(id=request.GET.get('id'), number__isnull=False)
+ examtest = candidate.examtest
candidate.msg = get_msg_from_id(candidate.ID_number)
candidate.exam_year = candidate.examtest_date.year
candidate.exam_month = candidate.examtest_date.month
- if candidate.workscope and candidate.workscope.name in ['放射工作人员(上岗)', '放射工作人员(在岗)']:
+ # if candidate.workscope and candidate.workscope.name in ['放射工作人员(上岗)', '放射工作人员(在岗)']:
+ if examtest and examtest.exam.cert_template==2:
candidate.date1 = candidate.train_start_date.strftime("%Y年%m月%d日")
candidate.date2 = candidate.train_end_date.strftime("%Y年%m月%d日")
candidate.date3 = candidate.issue_date.strftime("%Y年%m月%d日")
diff --git a/test_server/examtest/services.py b/test_server/examtest/services.py
new file mode 100644
index 0000000..3080dde
--- /dev/null
+++ b/test_server/examtest/services.py
@@ -0,0 +1,42 @@
+from .models import ExamTest
+from crm.models import Candidate
+from django.utils import timezone
+from datetime import timedelta
+from rest_framework.exceptions import ParseError
+from rbac.models import UserProfile
+def issue(obj: ExamTest, create_admin: UserProfile = None):
+ if create_admin is None:
+ create_admin = obj.exam.create_admin
+ workscope = obj.workscope
+ candidate = obj.candidate if hasattr(obj, 'candidate') else None
+ if obj.is_pass and candidate is None:
+ candidates = Candidate.objects.filter(consumer=obj.consumer, workscope=workscope, number__isnull=True)
+ if candidates.exists():
+ candidate = candidates[0]
+ else:
+ candidate = Candidate.objects.create(consumer=obj.consumer, workscope=workscope)
+ candidate.examtest = obj
+ now = timezone.now()
+ candidate.issue_date = now
+ candidate.start_date = now
+ candidate.end_date = now + timedelta(days=workscope.issue_year*365) # 有效期
+ candidate.examtest_date = obj.start_time.date()
+ candidate.workscope_name = workscope.name
+ candidate.consumer_name = obj.consumer_detail['name']
+ candidate.ID_number = obj.consumer_detail['ID_number']
+ candidate.company_name = obj.consumer_detail['company_name']
+ candidate.deptname = obj.consumer_detail['deptname']
+ candidate.train_name = obj.exam.train_name
+ candidate.train_start_date = obj.exam.train_start_date
+ candidate.train_end_date = obj.exam.train_end_date
+ candidate.save()
+ cert_template = obj.exam.cert_template
+ # if cert_template == 2 or (cert_template is None and workscope.name in ['放射工作人员(上岗)', '放射工作人员(在岗)']): # 如果是放射工作人员处理方式
+ if cert_template == 2:
+ count = Candidate.objects.filter(create_admin=create_admin, issue_date__year=now.year, issue_date__month=now.month).count()
+ candidate.number='HNHK'+ str(now.year) + str(now.month).zfill(2) + str(count+1).zfill(4)
+ else:
+ candidate.number='SL'+ str(now.year)[-2:] + str(candidate.pk).zfill(6)
+ candidate.create_admin = create_admin
+ candidate.save()
+ return {"id":candidate.pk, "number":candidate.number, "path":None}
\ No newline at end of file
diff --git a/test_server/examtest/views.py b/test_server/examtest/views.py
index c51055e..44975a8 100644
--- a/test_server/examtest/views.py
+++ b/test_server/examtest/views.py
@@ -37,6 +37,8 @@ from utils.pagination import PageOrNot
from rest_framework.exceptions import ParseError
from django.db import transaction
from examtest.exports import gen_candidate
+from .services import issue
+from django.db import transaction
# Create your views here.
class ExamViewSet(ModelViewSet):
@@ -546,6 +548,7 @@ class ExamTestViewSet(PageOrNot, ModelViewSet):
ret['pass_rate'] = round(((queryset.filter(is_pass=True).count())/ret['total'])*100) if ret['total'] else 0
return Response(ret)
+ @transaction.atomic
def create(self, request, *args, **kwargs):
serializer = MoniTestSerializer(data = request.data)
if serializer.is_valid():
@@ -566,8 +569,12 @@ class ExamTestViewSet(PageOrNot, ModelViewSet):
serializer_detail.save()
# 关联正式考试如有
if request.data.get('exam', None):
- instance.exam = Exam.objects.get(pk=request.data['exam'])
+ exam = Exam.objects.get(pk=request.data['exam'])
+ instance.exam = exam
instance.save()
+ # 自动发证
+ if exam.auto_issue and instance.is_pass:
+ issue(instance)
return Response(MoniTestSerializer(instance).data,status=status.HTTP_200_OK)
else:
return Response(serializer_detail.errors)
@@ -604,48 +611,9 @@ class ExamTestViewSet(PageOrNot, ModelViewSet):
'''
颁发证书
'''
- obj = self.get_object()
- workscope = obj.workscope
- candidate = obj.candidate if hasattr(obj, 'candidate') else None
- if not obj.is_pass:
- return Response({'error':'考试未通过'})
- if candidate:
- return Response({'error':'证书已存在'})
- candidates = Candidate.objects.filter(consumer=obj.consumer, workscope=workscope, number__isnull=True)
- if candidates.exists():
- candidate = candidates[0]
- else:
- candidate = Candidate.objects.create(consumer=obj.consumer, workscope=workscope)
- candidate.examtest = obj
- now = timezone.now()
- candidate.issue_date = now
- candidate.start_date = now
- candidate.end_date = now + timedelta(days=workscope.issue_year*365) # 有效期
- candidate.examtest_date = obj.start_time.date()
- candidate.workscope_name = workscope.name
- candidate.consumer_name = obj.consumer_detail['name']
- candidate.ID_number = obj.consumer_detail['ID_number']
- candidate.company_name = obj.consumer_detail['company_name']
- candidate.deptname = obj.consumer_detail['deptname']
- candidate.train_name = obj.exam.train_name
- candidate.train_start_date = obj.exam.train_start_date
- candidate.train_end_date = obj.exam.train_end_date
- candidate.save()
- if workscope.name in ['放射工作人员(上岗)', '放射工作人员(在岗)']: # 如果是放射工作人员处理方式
- count = Candidate.objects.filter(create_admin=request.user, issue_date__year=now.year, issue_date__month=now.month).count()
- candidate.number='HNHK'+ str(now.year) + str(now.month).zfill(2) + str(count+1).zfill(4)
- else:
- candidate.number='SL'+ str(now.year)[-2:] + str(candidate.pk).zfill(6)
- candidate.create_admin = request.user
- candidate.save()
- path = None
- # 生成word证书
- # path = None
- # if workscope.name in ['放射工作人员(上岗)', '放射工作人员(在岗)']: # 如果是放射工作人员处理方式
- # path = gen_candidate(candidate)
- # candidate.path = path
- # candidate.save()
- return Response({"id":candidate.pk, "number":candidate.number, "path":path})
+ obj: ExamTest = self.get_object()
+ res_dict = issue(obj, request.user)
+ return Response(res_dict)
class PaperViewSet(PageOrNot, ModelViewSet):