def clearLesson(request): lessondata = Lesson.objects.get(id=request.GET.get('lessonid')) if not has_course_permission(request.user, lessondata.course): if request.is_ajax(): return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") else: return render(request, 'error.html', {'message': '没有权限'}) if request.is_ajax(): return HttpResponse(json.dumps(lessondata.cleardata()), content_type="application/json") else: re = lessondata.cleardata() if re['error'] != 0: return render( request, 'error.html', { 'message': re['message'], 'submessage': lessondata.course.title, 'jumpurl': str( reverse('course:information', args=[lessondata.course.id])) }) else: return redirect( reverse('course:information', args=[lessondata.course.id]))
def checkin(request, lessonid): lesson = Lesson.objects.get(id=lessonid) if not has_course_permission(request.user, lesson.course): return render(request, 'error.html', {'message': '没有权限'}) if lesson.status not in (LESSON_STATUS_CHECKIN, LESSON_STATUS_CHECKIN_AGAIN, LESSON_STATUS_CHECKIN_ADD): return render( request, 'error.html', { 'message': '签到还未开始', 'submessage': lesson.course.title, 'jumpurl': str(reverse('course:information', args=[lesson.course.id])) }) studentlist = Studentcourse.objects.filter( course=lesson.course).select_related('student').order_by( 'student__studentid').all() data = {'lessondata': lesson, 'studentlist': studentlist} if lesson.status == LESSON_STATUS_CHECKIN_ADD: data['checkintype'] = u'补签' elif lesson.status == LESSON_STATUS_CHECKIN_AGAIN: data['checkintype'] = u'再签' data['firstqrstr'] = generateqrstr(lessonid) data['refreshtime'] = settings.QRCODEREFRESHTIME return render(request, 'checkin.html', data)
def getqrstr(request, lessonid): lesson = Lesson.objects.get(id=lessonid) if not (has_course_permission(request.user, lesson.course) or request.user.has_perm('course_control')): return HttpResponse(json.dumps({'error': 101, 'message': '没有权限'}), content_type="application/json") str = generateqrstr(lessonid) data = {'qr': str} return HttpResponse(json.dumps(data), content_type="application/json")
def resourceupload(request): coursedata = Course.objects.get(id=request.POST.get('courseid')) if not has_course_permission(request.user, coursedata): return HttpResponse(json.dumps({'error': u'没有权限上传到此课程'}), content_type="application/json") res = Courseresource(course=coursedata, uploadtime=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())) res.file = request.FILES['file_data'] res.title = res.file.name res.save() send_resource_notification.delay(res.id) deleteurl = reverse('course:resourcedelete', args=[]) initialpreviewdata = res.initialPreview() data = { 'initialPreview': [initialpreviewdata['data']], 'initialPreviewConfig': [ { 'caption': res.title, 'url': deleteurl, 'key': res.id }, ] } if 'type' in initialpreviewdata: data['initialPreviewConfig'][0]['type'] = initialpreviewdata['type'] if 'filetype' in initialpreviewdata: data['initialPreviewConfig'][0]['filetype'] = initialpreviewdata[ 'filetype'] return HttpResponse(json.dumps(data), content_type="application/json")
def sethomeworkscore(request): homeworkcommit = Homeworkcommit.objects.select_related( 'coursehomework').get(id=request.GET.get('homeworkcommitid')) score = request.GET.get('score') if not score.isdigit(): return HttpResponse(json.dumps({ 'error': 101, 'message': '分数只能设置为数字' }), content_type="application/json") if not has_course_permission(request.user, homeworkcommit.coursehomework.course): return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") homeworkcommit.score = score homeworkcommit.save() return HttpResponse(json.dumps({ 'error': 0, 'score': score, 'message': '评分成功' }), content_type="application/json")
def changecheckinstatus(request, lessonid): lesson = Lesson.objects.get(id=lessonid) studentid = request.GET.get('studentid', default=False) or request.GET.get('pk') newstatus = request.GET.get('newstatus', default=False) or request.GET.get('value') try: student = Student.objects.get(studentid=studentid) except ObjectDoesNotExist: return HttpResponse(json.dumps({'error': 101, 'message': '未找到,请输入正确的学号'}), content_type="application/json") if not (has_course_permission(request.user, lesson.course) or request.user.has_perm('checkin_modify')): return HttpResponse(json.dumps({'error': 101, 'message': '没有权限'}), content_type="application/json") try: checkin = Checkin.objects.get(student=student, lesson=lesson) except ObjectDoesNotExist: if not Studentcourse.objects.filter(course=lesson.course, student=student).exists(): Studentcourse.objects.create(course=lesson.course, student=student) checkin = Checkin(student=student, lesson=lesson) """ 关闭请假不允许修改功能 if checkin.status > 10: # ASK return HttpResponse(json.dumps({'error': 101, 'message': '学生已经请假'}), content_type="application/json") """ if newstatus == 'newcheckin': data = student_checkin(student, lesson) elif newstatus == 'delete': checkin.status = CHECKIN_STATUS_NORMAL checkin.save() data = {'studentid': studentid, 'status': checkin.status} elif newstatus == 'late': checkin.status = CHECKIN_STATUS_LATE checkin.save() data = {'studentid': studentid, 'status': checkin.status} elif newstatus == 'success': checkin.status = CHECKIN_STATUS_SUCCESS checkin.save() data = {'studentid': studentid, 'status': checkin.status} elif newstatus == 'early': checkin.status = CHECKIN_STATUS_EARLY checkin.save() data = {'studentid': studentid, 'status': checkin.status} elif newstatus == 'lateearly': checkin.status = CHECKIN_STATUS_LATEEARLY checkin.save() data = {'studentid': studentid, 'status': checkin.status} elif newstatus == 'private_ask': checkin.status = CHECKIN_STATUS_PRIVATE_ASK checkin.save() data = {'studentid': studentid, 'status': checkin.status} elif newstatus == 'public_ask': checkin.status = CHECKIN_STATUS_PRIVATE_ASK checkin.save() data = {'studentid': studentid, 'status': checkin.status} elif newstatus == 'sick_ask': checkin.status = CHECKIN_STATUS_SICK_ASK checkin.save() data = {'studentid': studentid, 'status': checkin.status} elif newstatus.isdigit(): checkin.status = newstatus checkin.save() data = {'studentid': studentid, 'status': checkin.status} return HttpResponse(json.dumps(data), content_type="application/json")
def switch_to_add(request, lessonid): lesson = Lesson.objects.get(id=lessonid) if not has_course_permission(request.user, lesson.course): return render(request, 'error.html', {'message': '没有权限'}) if lesson.status == LESSON_STATUS_CHECKIN: lesson.status = LESSON_STATUS_CHECKIN_ADD lesson.save() return redirect(reverse('checkin:qrcheckin', args=[lesson.id]))
def resourcedelete(request): key = request.POST.get('key') res = Courseresource.objects.get(id=key) if not has_course_permission(request.user, res.course): return HttpResponse(json.dumps({'error': u'没有权限删除此课程文件'}), content_type="application/json") res.file.delete() res.delete() return HttpResponse(json.dumps([]), content_type="application/json")
def resource(request, courseid): coursedata = Course.objects.get(id=courseid) resources = Courseresource.objects.filter(course=coursedata).all() resources.order_by('uploadtime') return render( request, 'resource.html', { 'coursedata': coursedata, 'courseperms': has_course_permission(request.user, coursedata), 'resources': resources })
def studentcourse(request, courseid): coursedata = Course.objects.get(id=courseid) students = Studentcourse.objects.filter(course=coursedata). \ select_related('student', 'student__classid', 'student__classid__major', 'student__classid__department') \ .order_by('student_id').all() return render( request, 'studentcourse.html', { 'coursedata': coursedata, 'students': students, 'courseperms': has_course_permission(request.user, coursedata) })
def get_homework_commit(request, commit_id): commit = get_object_or_404(Homeworkcommit, pk=commit_id) course = commit.coursehomework.course courseperms = has_course_permission(request.user, course) if not courseperms: return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") return render(request, 'homework_commit.html', {'commit': commit})
def information(request, courseid): coursedata = Course.objects.get(id=courseid) lessondata = Lesson.objects.filter(course=coursedata) \ .exclude(status=LESSON_STATUS_TRANSFERRED) \ .order_by('week', 'day', 'time').all() return render( request, 'information.html', { 'coursedata': coursedata, 'lessondata': lessondata, 'courseperms': has_course_permission(request.user, coursedata) })
def stopCheckin(request, lessonid): lesson = Lesson.objects.get(id=lessonid) if not has_course_permission(request.user, lesson.course): return render(request, 'error.html', {'message': '没有权限'}) if lesson.status in (LESSON_STATUS_CHECKIN, LESSON_STATUS_CHECKIN_ADD, LESSON_STATUS_CHECKIN_AGAIN): re = endcheckin(lessonid) if re['error'] != 0: return render(request, 'error.html', {'message': re['message'], 'submessage': lesson.course.title, 'jumpurl': str( reverse('course:information', args=[lesson.course.id]))}) # checkin_start(lessonruntimeid) return redirect(reverse('checkin:lesson_data', args=[lesson.id]))
def remind_homework(request, homeworkid): homework = Coursehomework.objects.select_related('course').get( id=homeworkid) if not has_course_permission(request.user, homework.course): return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") send_homework_remind.delay(homework.id) return HttpResponse(json.dumps({ 'error': 0, 'message': '催交成功' }), content_type="application/json")
def sendmessage(request, courseid): coursedata = Course.objects.get(id=courseid) messages = CourseMessage.objects.filter( course=coursedata).order_by('-time').all() data = { 'coursedata': coursedata, 'courseperms': has_course_permission(request.user, coursedata), 'messages': messages } if request.META['REQUEST_METHOD'] == 'POST': message = request.POST.get('message') errorsendstudentnames = sendmessagetocoursestudent(coursedata, message) data['send'] = True data['errorsendstudentnames'] = errorsendstudentnames return render(request, 'sendmessage.html', data)
def clearcheckin(request, lessonid): lesson = Lesson.objects.get(id=lessonid) if not has_course_permission(request.user, lesson.course): return render(request, 'error.html', {'message': '没有权限'}) if request.GET.get('deleteall', 0): clear_checkin(lesson) elif request.GET.get('deletethis', 0): if lesson.ischeckinnow(): clear_last_checkin(lesson) cache.delete('lesson_%d_clear_flag' % lesson.id) elif cache.get('lesson_%d_clear_flag' % lesson.id, default=False): clear_last_checkin(lesson) cache.delete('lesson_%d_clear_flag' % lesson.id) else: return render(request, 'error.html', {'message': '无法清除', 'submessage': '间隔时间太久'}) return redirect(reverse('checkin:lesson_data', args=[lesson.id]))
def setperformance_score(request, courseid): course = Course.objects.get(id=courseid) student = Student.objects.get(studentid=request.GET.get('studentid')) score = request.GET.get('score') if not has_course_permission(request.user, course): return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") sc = Studentcourse.objects.get(student=student, course=course) sc.performance_score += int(score) sc.save() return HttpResponse(json.dumps({ 'error': 0, 'message': '加分成功', 'performance_score': sc.performance_score }), content_type="application/json")
def leavehomeworkcomment(request): homeworkcommit = Homeworkcommit.objects.select_related( 'coursehomework').get(id=request.POST.get('homeworkcommitid')) comment = request.POST.get('comment', '') if comment == '': return HttpResponse(json.dumps({ 'error': 101, 'message': '留言不能为空' }), content_type="application/json") if not has_course_permission(request.user, homeworkcommit.coursehomework.course): return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") homeworkcommit.comment = comment homeworkcommit.save() # send wechat notification article = { "title": u"作业留言提醒!", "description": u"教师留言:" + comment, "url": "%s%s" % (settings.DOMAIN, reverse('course:homework', args=[homeworkcommit.coursehomework.course_id]) + '?homeworkid=%d' % homeworkcommit.coursehomework_id), "image": "%s/static/img/homework.png" } wechat_client.message.send_articles( agent_id=settings.AGENTID, user_ids=[homeworkcommit.student.user.openid], articles=[article]) return HttpResponse(json.dumps({ 'error': 0, 'message': '留言成功' }), content_type="application/json")
def studentcourse_selectdata(request, courseid): course = Course.objects.get(id=courseid) courseperms = has_course_permission(request.user, course) if not courseperms: return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") wd = request.GET['wd'] limit = 5 offset = 0 # lessondata = Lesson.objects.all()[offset: (offset + limit)] studentcourse_data = Studentcourse.objects.filter( course=course).values_list('student') studentdata = Student.objects.filter( studentid__in=studentcourse_data).order_by('studentid') count = studentdata.filter( (Q(name__icontains=wd) | Q(studentid__startswith=wd))).count() studentdata = studentdata.select_related('classid').select_related( 'major').select_related('department').filter( (Q(name__icontains=wd) | Q(studentid__startswith=wd)))[offset:(offset + limit)] rows = [] for p in studentdata: ld = { 'id': p.studentid, 'name': p.name, 'sex': (p.sex - 1 and [u'女'] or [u'男'])[0], 'class': (p.classid and [p.classid.name] or [None])[0], 'major': (p.major and [p.major.name] or [None])[0], 'department': p.department.name } rows.append(ld) data = {'total': count, 'rows': rows} return HttpResponse(json.dumps(data), content_type="application/json")
def startCheckin(request, lessonid): lesson = Lesson.objects.get(id=lessonid) if not has_course_permission(request.user, lesson.course): return render(request, 'error.html', {'message': '没有权限'}) mode = request.GET.get('mode', default='first') auto_start = False if mode == 'startfirst': # 自动开启课程模式 mode = 'first' auto_start = True if lesson.status == LESSON_STATUS_AWAIT: if auto_start: re = lesson.startlesson() if re['error'] != 0: return render(request, 'error.html', {'message': re['message'], 'submessage': lesson.course.title, 'jumpurl': str( reverse('course:information', args=[lesson.course.id]))}) else: return render(request, 'error.html', {'message': '课程还未开始', 'submessage': lesson.course.title, 'jumpurl': str( reverse('course:information', args=[lesson.course.id]))}) if lesson.status == LESSON_STATUS_NOW: re = startcheckin(lessonid, mode) if re['error'] != 0: return render(request, 'error.html', {'message': re['message'], 'submessage': lesson.course.title}) return redirect(reverse('checkin:qrcheckin', args=[lessonid])) elif lesson.status in (LESSON_STATUS_CHECKIN, LESSON_STATUS_CHECKIN_ADD, LESSON_STATUS_CHECKIN_AGAIN): return redirect(reverse('checkin:qrcheckin', args=[lessonid])) return render(request, 'error.html', {'message': '开始签到失败', 'submessage': lesson.course.title, 'jumpurl': str( reverse('course:information', args=[lesson.course.id]))})
def homework(request, courseid): coursedata = Course.objects.get(id=courseid) courseperms = has_course_permission(request.user, coursedata) coursestudent = is_course_student(coursedata, request.user) if request.GET.get('newhomework'): if request.META['REQUEST_METHOD'] == 'POST': if not courseperms: return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") title = request.POST.get('title') deadline = request.POST.get('deadline') type = request.POST.get('type') if type == 'onlinesubmit': type = COURSE_HOMEWORK_TYPE_ONLINESUBMIT elif type == 'nosubmit': type = COURSE_HOMEWORK_TYPE_NOSUBMIT instruction = request.POST.get('instruction') attachments = request.FILES.getlist('attachment') weight = request.POST.get('weight') try: homework = Coursehomework.objects.create(title=title, deadline=deadline, type=type, weight=weight, course=coursedata) except ValidationError: return render(request, 'error.html', {'message': '截止日期格式错误'}) homework.instruction = instruction homework.deal_base64img() homework.save() for file in attachments: homework.attachment.add( Homeworkfile.objects.create(file=file, title=file.name)) send_homework_notification.delay(homework.id) return redirect( reverse('course:homework', args=[courseid]) + '?homeworkid=%d' % homework.id) else: return render(request, 'newhomework.html', { 'coursedata': coursedata, 'courseperms': courseperms }) elif request.GET.get('homeworkid'): homeworkdata = get_object_or_404(Coursehomework, pk=request.GET.get('homeworkid')) data = { 'coursedata': coursedata, 'courseperms': courseperms, 'homework': homeworkdata, 'coursestudent': coursestudent } if request.META[ 'REQUEST_METHOD'] == 'POST' and COURSE_HOMEWORK_TYPE_ONLINESUBMIT == homeworkdata.type: if not coursestudent: return HttpResponse(json.dumps({ 'error': 101, 'message': '上课名单里没有你' }), content_type="application/json") text = request.POST.get('text') attachments = request.FILES.getlist('attachment') commitdata, created = Homeworkcommit.objects.get_or_create( student=coursestudent, coursehomework=homeworkdata) if commitdata.score: pass # 已经判完分数 commitdata.text = text commitdata.deal_base64img() commitdata.submittime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) if not created and attachments: for ca in commitdata.attachment.exclude(title=None).all(): ca.file.delete() ca.delete() for file in attachments: commitdata.attachment.add( Homeworkfile.objects.create(file=file, title=file.name)) commitdata.save() return redirect( reverse('course:homework', args=[courseid]) + '?homeworkid=%d' % homeworkdata.id) else: if coursestudent: try: commitdata = Homeworkcommit.objects.get( student=coursestudent, coursehomework=homeworkdata) data['commitdata'] = commitdata except: pass if courseperms: allcommit = Homeworkcommit.objects.filter( coursehomework=homeworkdata, student=OuterRef('studentid')) students = Student.objects.filter( studentid__in=Studentcourse.objects.filter(course=coursedata) \ .values_list('student', flat=True)).order_by('studentid').only('name').annotate( score=Subquery(allcommit.values('score')[:1]), time=Subquery(allcommit.values('submittime')[:1]), submitid=Subquery(allcommit.values('id')[:1]) ) # data['allcommit'] = allcommit data['students'] = students return render(request, 'homeworkinformation.html', data) elif request.GET.get('delhomeworkid'): if not courseperms: return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") homeworkdata = Coursehomework.objects.get( id=request.GET.get('delhomeworkid')) for ca in homeworkdata.attachment.all(): ca.file.delete() ca.delete() for hc in Homeworkcommit.objects.filter( coursehomework=homeworkdata).all(): for ca in hc.attachment.all(): ca.file.delete() ca.delete() hc.delete() homeworkdata.delete() return redirect(reverse('course:homework', args=[courseid])) elif request.GET.get('edithomeworkid'): homeworkdata = Coursehomework.objects.get( id=request.GET.get('edithomeworkid')) if request.META['REQUEST_METHOD'] == 'POST': if not courseperms: return HttpResponse(json.dumps({ 'error': 101, 'message': '没有权限' }), content_type="application/json") homeworkdata.title = request.POST.get('title') homeworkdata.deadline = request.POST.get('deadline') type = request.POST.get('type') if type == 'onlinesubmit': type = COURSE_HOMEWORK_TYPE_ONLINESUBMIT elif type == 'nosubmit': type = COURSE_HOMEWORK_TYPE_NOSUBMIT homeworkdata.type = type homeworkdata.instruction = request.POST.get('instruction') attachments = request.FILES.getlist('attachment') if attachments: homeworkdata.weight = request.POST.get('weight') homeworkdata.deal_base64img() for ca in homeworkdata.attachment.exclude(title=None).all(): ca.file.delete() ca.delete() for file in attachments: homeworkdata.attachment.add( Homeworkfile.objects.create(file=file, title=file.name)) homeworkdata.save() return redirect( reverse('course:homework', args=[courseid]) + '?homeworkid=%d' % homeworkdata.id) else: return render( request, 'newhomework.html', { 'coursedata': coursedata, 'courseperms': courseperms, 'homework': homeworkdata }) else: homeworks = Coursehomework.objects.filter(course=coursedata).only('title', 'deadline') \ .order_by('-deadline').all() return render( request, 'homeworklist.html', { 'coursedata': coursedata, 'courseperms': courseperms, 'homeworks': homeworks, 'coursestudent': coursestudent })
def settings(request, courseid): course = Course.objects.get(id=courseid) try: scoreregulation = Scoreregulation.objects.get(course=course) except ObjectDoesNotExist: scoreregulation = Scoreregulation(course=course) if request.META['REQUEST_METHOD'] == 'POST': type = request.GET.get('type') if type == 'checkinscore': scoreregulation.normal = request.POST.get('normal') scoreregulation.success = request.POST.get('success') scoreregulation.early = request.POST.get('early') scoreregulation.lateearly = request.POST.get('lateearly') scoreregulation.late = request.POST.get('late') scoreregulation.private_ask = request.POST.get('private_ask') scoreregulation.public_ask = request.POST.get('public_ask') scoreregulation.sick_ask = request.POST.get('sick_ask') scoreregulation.save() elif type == 'people': students = request.POST.getlist('addstudents', default=None) exempt_students = request.POST.getlist('exempt_students', default=None) del_students = request.POST.getlist('delstudents', default=None) teachers = request.POST.getlist('addteachers', default=None) disable_sync = request.POST.get('disable_sync', default=None) add_student_from_course = request.POST.get( 'add_student_from_course', default=None) if disable_sync and disable_sync == 'on': disable_sync = True else: disable_sync = False if course.disable_sync != disable_sync: course.disable_sync = disable_sync course.save() if add_student_from_course and add_student_from_course != '': try: if add_student_from_course.isdigit(): from_course = Course.objects.get( id=int(add_student_from_course)) else: from_course = Course.objects.get( serialnumber=add_student_from_course) except ObjectDoesNotExist: return render(request, 'error.html', {'message': '没有找到课程,请检查课程编号或id'}) new_students = Studentcourse.objects.filter( course=from_course).values_list('student', flat=True) new_students_create = [] for ns in new_students: if not Studentcourse.objects.filter( course=course, student_id=ns).exists(): new_students_create.append( Studentcourse(course=course, student_id=ns)) Studentcourse.objects.bulk_create(new_students_create) if students: for s in students: if not Studentcourse.objects.filter(course=course, student_id=s).exists(): Studentcourse.objects.create(course=course, student_id=s) if del_students: for s in del_students: Studentcourse.objects.filter(course=course, student_id=s).delete() # exempt_students: old_exempt_students_id = [] for s in course.exempt_students.all(): old_exempt_students_id.append(s.studentid) new_exempt_students = Student.objects.filter( studentid__in=exempt_students).all() course.exempt_students.set(new_exempt_students) Studentcourse.objects.filter( course=course, student__in=new_exempt_students).delete() for s in new_exempt_students: try: old_exempt_students_id.remove(s.studentid) except ValueError: pass for s in old_exempt_students_id: Studentcourse.objects.create(course=course, student_id=s) if teachers: for t in teachers: course.teachers.add(Teacher.objects.get(teacherid=t)) data = { 'normal': scoreregulation.normal, 'success': scoreregulation.success, 'early': scoreregulation.early, 'lateearly': scoreregulation.lateearly, 'late': scoreregulation.late, 'private_ask': scoreregulation.private_ask, 'public_ask': scoreregulation.public_ask, 'sick_ask': scoreregulation.sick_ask, 'coursedata': course, 'exempt_students': course.exempt_students.all(), 'courseperms': has_course_permission(request.user, course) } return render(request, 'settings.html', data)
def lesson_data(request, lessonid): lesson = Lesson.objects.get(id=lessonid) if not (has_course_permission(request.user, lesson.course) or request.user.has_perm('checkin_view')): return render(request, 'error.html', {'message': '没有权限'}) t = { 'lessondata': lesson, 'coursedata': lesson.course, 'courseperms': has_course_permission(request.user, lesson.course) } if lesson.ischeckinnow(): return redirect(reverse('checkin:qrcheckin', args=[lessonid])) if not (lesson.isnow() or lesson.isend()): return render( request, 'error.html', { 'message': '课程还未开启', 'jumpurl': reverse('course:information', args=[lesson.course_id]) }) checkinrecord = Checkinrecord.objects.filter(lesson=lesson) checkincount = checkinrecord.count() shouldnumber = lesson.shouldnumber actuallynumber = lesson.actuallynumber asknumber = lesson.asknumber notreachnumber = lesson.notreachnumber t['shouldnumber'] = shouldnumber t['actuallynumber'] = actuallynumber t['asknumber'] = asknumber t['notreachnumber'] = notreachnumber checkin_success = Checkin.objects.filter(lesson=lesson).filter( status=CHECKIN_STATUS_SUCCESS).count() checkin_early = Checkin.objects.filter(lesson=lesson).filter( status=CHECKIN_STATUS_EARLY).count() checkin_late = Checkin.objects.filter(lesson=lesson).filter( status=CHECKIN_STATUS_LATE).count() checkin_lateearly = Checkin.objects.filter(lesson=lesson).filter( status=CHECKIN_STATUS_LATEEARLY).count() checkin_normal = Checkin.objects.filter(lesson=lesson).filter( status=CHECKIN_STATUS_NORMAL).count() t['checkin_success'] = checkin_success t['checkin_early'] = checkin_early t['checkin_late'] = checkin_late t['checkin_lateearly'] = checkin_lateearly t['checkin_normal'] = checkin_normal t['checkincount'] = checkincount if not checkincount == 0: checkinrecord = checkinrecord.order_by('time').all() t['checkinrecord'] = checkinrecord sc = Studentcourse.objects.filter(course=lesson.course, student=OuterRef('student')) checkindata = Checkin.objects.filter(lesson=lesson).exclude( status__gt=10).select_related( 'student').select_related('student__classid').order_by( 'abnormal', 'student__studentid').annotate( score=Subquery(sc.values('performance_score')[:1])).only( 'student_id', 'student__name', 'student__classid__name', 'status', 'abnormal') students = [] for c in checkindata: students.append({ 'studentid': c.student_id, 'name': c.student.name, 'class': c.student.classid.name if c.student.classid else None, 'score': c.score, 'status': c.status, 'abnormal': c.abnormal, }) t['students'] = json.dumps(students) askdata = Checkin.objects.filter( lesson=lesson, status__gt=10).select_related('student').select_related( 'student__classid').select_related( 'student__classid__department').select_related( 'student__classid__major').all() t['askdata'] = askdata t['canclearlastdata'] = cache.get('lesson_%d_clear_flag' % lesson.id, default=False) return render(request, 'lesson_data.html', t)
def course_data(request, courseid): modify = False if request.GET.get('mode', default=None) == 'modify': modify = True course = Course.objects.get(id=courseid) if not (has_course_permission(request.user, course) or request.user.has_perm('checkin_view')): return render(request, 'error.html', {'message': '没有权限'}) alllesson = Lesson.objects.filter(course=course).exclude( status=LESSON_STATUS_AWAIT).order_by('week', 'day', 'time').all() allhomework = Coursehomework.objects.filter(course=course).exclude(type=COURSE_HOMEWORK_TYPE_NOSUBMIT) \ .order_by('deadline').all() homework_count = allhomework.count() columns = [[ { 'field': 'name', 'title': u'学生', 'rowspan': 2, 'align': 'center', 'valign': 'middle', 'searchable': True }, { 'field': 'studentid', 'title': u'学号', 'rowspan': 2, 'align': 'center', 'valign': 'middle', 'searchable': True, 'sortable': True }, { 'field': 'class', 'title': u'班级', 'rowspan': 2, 'align': 'center', 'valign': 'middle' }, { 'field': 'ratio', 'title': u'出勤率', 'rowspan': 2, 'align': 'center', 'valign': 'middle' }, { 'field': 'score', 'title': u'考勤分数', 'rowspan': 2, 'align': 'center', 'valign': 'middle' }, { 'field': 'performance_score', 'title': u'表现分数', 'rowspan': 2, 'align': 'center', 'valign': 'middle' }, { 'title': u'签到数据', 'colspan': alllesson.count(), 'align': 'center' }, ], []] if homework_count > 0: columns[0].append({ 'title': u'作业数据', 'colspan': homework_count, 'align': 'center' }) # for i in range(0, count - 1): # columns.append({'field': 'lesson%d' % i, 'title': i + 1, 'formatter': 'identifierFormatter'}) for i, l in enumerate(alllesson): if modify and l.status != LESSON_STATUS_AWAIT and l.status != LESSON_STATUS_CANCLE: columns[1].append({ 'field': 'lesson%d' % l.id, 'title': i + 1, 'align': 'center', 'editable': { 'url': reverse('checkin:changecheckinstatus', args=[l.id]) } }) else: columns[1].append({ 'field': 'lesson%d' % l.id, 'title': i + 1, 'align': 'center', 'formatter': 'identifierFormatter', 'cellStyle': 'cellStyle' }) for i, l in enumerate(allhomework): columns[1].append({ 'field': 'homework%d' % l.id, 'title': i + 1, 'align': 'center' }) studentdata = Studentcourse.objects.filter(course=course).select_related('student') \ .select_related('student__classid').order_by('student').all() lessondata = [] '''for s in studentdata: studentcheckindata[s.student.studentid] = {'studentid': s.student.studentid, 'name': s.student.name} for l in alllesson: checkin = Checkin.objects.filter(lesson=l).all() for c in checkin: ''' count = Checkin.objects.filter( lesson__course=course).distinct('lesson').count() try: scoreregulation = Scoreregulation.objects.get(course=course) except ObjectDoesNotExist: scoreregulation = Scoreregulation(course=course) for s in studentdata: studentdata = { 'studentid': s.student.studentid, 'name': s.student.name, 'class': s.student.classid.name if s.student.classid else None } homeworkdata = Homeworkcommit.objects.filter( student=s.student, coursehomework__in=allhomework).all() for h in homeworkdata: studentdata['homework%d' % (h.coursehomework_id)] = h.score if h.score else '未评' checkindata = Checkin.objects.filter( student=s.student, lesson__course=course).order_by( 'lesson__week', 'lesson__day', 'lesson__time').select_related('lesson').all() ratio = 0.0 score = 0.0 totalscore = 0 for c in checkindata: studentdata['lesson%d' % (c.lesson.id)] = c.status if c.status != CHECKIN_STATUS_NORMAL: ratio += 1 score += scoreregulation.getscore(c.status) totalscore += 100 if count == 0: ratio = 1 else: ratio = ratio / count if totalscore == 0: score = 100 else: score = int((score / totalscore) * 100) studentdata['ratio'] = '%.1f%%' % (ratio * 100) studentdata['score'] = '%d' % (score) studentdata['performance_score'] = '%d' % (s.performance_score) lessondata.append(studentdata) data = {'header': json.dumps(columns), 'newrows': json.dumps(lessondata)} return render( request, 'course_data.html', { 'coursedata': course, 'data': data, 'courseperms': has_course_permission(request.user, course) })