Ejemplo n.º 1
0
def event_achievement(request, pk):
    context = {}
    context['pk'] = pk
    context["num"] = int(request.query_params["num"])
    try:
        event = common.get_user_event(request.user, pk)
        context['event'] = event
    except event_models.Event.DoesNotExist as e:
        return default_views.Http404Page(request, e)

    return app_render(request, 'exam_achievement.html', context)
Ejemplo n.º 2
0
def task_detail(request, pk, task_pk, **kwargs):
    context = {}

    pk = int(pk)
    try:
        event = common.get_user_event(request.user, pk)
    except event_models.Event.DoesNotExist as e:
        return default_views.Http404Page(request, e)
    context['event'] = event

    task_pk = int(task_pk)
    if task_pk == 0:
        context['mode'] = 0
    else:
        try:
            task = event_models.EventTask.objects.get(pk=task_pk)
        except event_models.EventTask.DoesNotExist as e:
            return default_views.Http404Page(request, e)
        context['task'] = task

    return app_render(request, 'task_detail.html', context)
Ejemplo n.º 3
0
def exam_detail(request, pk, **kwargs):
    context = {}
    teachers = User.objects.filter(groups__id=GroupType.TEACHER).exclude(
        Q(id=request.user.id) | Q(status=0))
    context['teachers'] = teachers

    pk = int(pk)
    if pk == 0:
        context['mode'] = 0
    else:
        try:
            event = common.get_user_event(request.user, pk)
        except event_models.Event.DoesNotExist as e:
            return default_views.Http404Page(request, e)

        context['mode'] = 1
        context['event'] = event
    ######################################################
    # totalEvent = event_models.Event.objects.all()
    # context['totalEvent'] = totalEvent
    ######################################################
    return app_render(request, 'exam_detail.html', context)
Ejemplo n.º 4
0
    def batch_create(self, request):
        event_pk = self.shift_data.get('event', int)
        task_hashs = self.shift_data.getlist('task_hashs', str)
        task_scores = self.shift_data.getlist('task_scores', int)
        if not task_hashs:
            raise exceptions.ValidationError(error.EMPTY_REQUEST)

        if task_scores and len(task_scores) != len(task_hashs):
            raise exceptions.ValidationError(
                error.TASK_SCORE_NOT_CORRESPONDING)

        try:
            event = common.get_user_event(request.user, event_pk)
        except event_models.Event.DoesNotExist as e:
            raise exceptions.NotFound(error.EVENT_NOT_EXIST)

        handled_task_hashs = self.task_handler_class.handle_tasks(task_hashs)

        seq = event_models.EventTask.objects.filter(event=event).count() + 1
        event_tasks = []
        for i, task_hash in enumerate(handled_task_hashs):
            event_task = event_models.EventTask(
                event=event,
                seq=seq,
                task_hash=task_hash,
                type=task_hash.split('.')[-1],
                status=event_models.EventTask.Status.CLOSE)
            if task_scores:
                event_task.task_score = task_scores[i]
            event_tasks.append(event_task)
            seq = seq + 1

        event_models.EventTask.objects.bulk_create(event_tasks)
        self.clear_cache()

        return Response(status=status.HTTP_200_OK)
Ejemplo n.º 5
0
def event_report_score(request, pk):
    if is_en(request):
        ORGANIZATION = ORGANIZATION_EN
    else:
        ORGANIZATION = ORGANIZATION_CN

    context = {}
    context['pk'] = pk
    context['ORGANIZATION'] = ORGANIZATION
    try:
        event = common.get_user_event(request.user, pk)
        context['event'] = event
        taskArrary = event_models.EventTask.objects.filter(event=pk)
        all_score = 0
        all_count = 0
        for t in taskArrary:
            all_count += 1
            all_score = all_score + t.task_score
        context['all_score'] = all_score
        context['all_count'] = all_count
        # 获取授权的班级,年级,院系

        auth_class_list = event.auth_classes.all()

        auth_major = []
        auth_faculty = []
        auth_class = []
        process = []
        # is authority
        process = [{
            'id': 0,
            'status': _("x_answering")
        }, {
            'id': 1,
            'status': _("x_submit_over")
        }]

        if len(auth_class_list) == 0:
            auth_class_list = Classes.objects.all()

        for classes in auth_class_list:
            auth_class.append(classes)
            major_dict = {
                'name': classes.major_name(),
                'id': classes.major_id,
                'parent_id': classes.major.faculty_id,
            }
            faculty_dict = {
                'name': classes.faculty_name(),
                'id': classes.faculty(),
            }

            if not auth_major.__contains__(major_dict):
                auth_major.append(major_dict)

            if not auth_faculty.__contains__(faculty_dict):
                auth_faculty.append(faculty_dict)

        context['process'] = process
        context['classes'] = auth_class
        context['majors'] = auth_major
        context['facultys'] = auth_faculty

    except event_models.Event.DoesNotExist as e:
        return default_views.Http404Page(request, e)

    return app_render(request, 'exam_result_list.html', context)
Ejemplo n.º 6
0
def event_rank_list(request):
    event_id = request.GET.get('event', int)
    process = request.GET.get('process', int)
    faculty = request.GET.get('faculty', int)
    major = request.GET.get('major', int)
    classes = request.GET.get('classes', int)
    event = common.get_user_event(request.user, event_id)
    auth_class_list = event.auth_classes.all()
    keyword = request.GET.get("search", None)

    if len(auth_class_list) == 0:
        type = 'unAuthority'
        user_list = User.objects.all()
    else:
        type = 'authoritied'

        auth_class_list = event.auth_classes.all()

        auth_class_id_list = {auth_class.id for auth_class in auth_class_list}
        user_list = User.objects.all().filter(
            classes__id__in=auth_class_id_list)

    user_id_list = []

    # 如果按班级为单位筛选
    if classes != '':
        # 获取全班所有学生
        user_list = user_list.filter(classes__id=classes)

    elif major != '':
        user_list = user_list.filter(major__id=major)

    elif faculty != '':
        user_list = user_list.filter(faculty__id=faculty)

    else:
        user_list = user_list

    user_id_list = {user.id for user in user_list}

    # queryset = event_models.EventUserSubmitLog.objects.filter()
    # queryset = queryset.filter(event_task__event=event).filter(user__id__in=user_id_list)
    queryset = SolvedRecord.objects.filter()
    queryset = queryset.filter(event=event).filter(user__id__in=user_id_list)

    queryset = queryset.values('user__id').annotate(
        obj_id=F('user__id'),
        obj_name=F('user__first_name'),
        obj_username=F('user__username'))
    # 所有已提交记录
    queryset = queryset.annotate(
        submit_time=Max('solved_time'), ).order_by("-solved_time")
    if keyword != "" and keyword is not None:
        filter_list = []
        for user_result in queryset:
            if keyword in user_result["obj_name"] or keyword in user_result[
                    "obj_username"]:
                filter_list.append(user_result)
        queryset = filter_list
    res_list = []
    submit_list = []
    finish_list = []

    if queryset:
        for doing_user in queryset:
            doing_user['writeup_score'] = 0
            doing_user["submit_time"] = doing_user["submit_time"].strftime(
                "%Y-%m-%d %H:%M:%S")
            doing_user['status'] = _("x_answering")
            doing_user['sum_score'] = 0
            if SubmitRecord.objects.filter(user=doing_user["obj_id"]).filter(
                    event__id=event.id).exists():
                pass
            else:
                submit_list.append(doing_user)

    # 所有已交卷的
    did_queryset = SubmitRecord.objects.filter(event__id=event.id).filter(
        user__id__in=user_id_list)
    exam_did_list = did_queryset.values('user__id', 'submit_time').annotate(
        obj_id=F('user__id'),
        obj_name=F('user__first_name'),
        obj_username=F('user__username'),
        score=Sum('score'))

    if keyword != "" and keyword is not None:
        filter_list = []
        for user_result in exam_did_list:
            if keyword in user_result["obj_name"] or keyword in user_result[
                    "obj_username"]:
                filter_list.append(user_result)

        exam_did_list = filter_list

    if exam_did_list:
        for did_user in exam_did_list:
            did_user['status'] = _("x_submit_over")
            did_user['submit_time'] = did_user["submit_time"].strftime(
                "%Y-%m-%d %H:%M:%S")
            did_user['writeup_score'] = 0
            did_user['sum_score'] = did_user["score"]
            finish_list.append(did_user)

    context = {}
    context['user_list'] = user_list.exclude(status=User.USER.DELETE)
    ret_list = []
    ret_list.extend(submit_list)
    ret_list.extend(finish_list)
    context['contain_list'] = ret_list

    if process == '':  # 如果是所有状态
        res_list.extend(submit_list)
        res_list.extend(finish_list)

        # not_exam_list = get_not_exam_user(context)
        # if len(not_exam_list) != 0:
        #     res_list.extend(not_exam_list)

    elif process == '1':  # 已交卷
        res_list.extend(finish_list)
    elif process == '0':  # 已提交
        res_list.extend(submit_list)
    # else:  # 如果是未开始状态
    #     res_list = get_not_exam_user(context)
    # if type == 'unAuthority':
    #     res_list = []

    return _list_view(request, res_list, ListEventRankSerializer)
Ejemplo n.º 7
0
def outputResult(request, pk):
    context = {}
    context['pk'] = pk
    try:
        event = common.get_user_event(request.user, pk)
        context['event'] = event
        task_arrary = event_models.EventTask.objects.filter(event=pk)
        all_score = 0
        all_count = 0
        for t in task_arrary:
            all_count += 1
            all_score = all_score + t.task_score
        context['all_score'] = all_score
        context['all_count'] = all_count
    except event_models.Event.DoesNotExist as e:
        return default_views.Http404Page(request, e)
    events = event_models.Event.objects.get(pk=pk)
    eventset = SubmitRecord.objects.filter(event=events)
    queryset = eventset.values('user__id').annotate(
        obj_id=F('user__id'),
        obj_name=F('user__first_name'),
        obj_username=F('user__username'))
    write_up_list = []
    tash_list = []
    # for task in task_arrary:
    #     task_hash = str(task.task_hash)
    #
    #     write_up_di_lict = Note.objects.filter(resource=task_hash)
    #     tash_list.append(task_hash)
    #     write_up_list.append(write_up_di_lict)

    queryset = queryset.annotate(
        start_time=Min('submit_time'),
        sum_score=Sum('score'),
        submit_time=Max('submit_time'),
    ).order_by('-sum_score', 'submit_time')

    for qs in queryset:
        note = Note.objects.filter(resource=events.hash,
                                   user_id=qs['obj_id']).first()
        wr_score = qs['sum_score']
        if note:
            qs['sum_score'] = wr_score + note.score
            qs['writeup_score'] = note.score

    wb = xlwt.Workbook(encoding='utf-8')
    sheet = wb.add_sheet('考试结果')
    pattern = xlwt.Pattern()  # Create the Pattern
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
    pattern.pattern_fore_colour = 5  # 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = YelloW
    borders = xlwt.Borders()  # Create Borders
    borders.left = xlwt.Borders.THIN  # NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE,
    borders.right = xlwt.Borders.THIN
    borders.top = xlwt.Borders.THIN
    borders.bottom = xlwt.Borders.THIN
    style_border = xlwt.XFStyle()  # Create Style
    style_border_color = xlwt.XFStyle()
    style_border.borders = borders  # Add Borders to Style
    style_border_color.borders = borders
    style_border_color.pattern = pattern
    sheet = excelHead(sheet, context, style_border, style_border_color)
    sheet = excelContent(sheet, queryset, style_border)

    wb.save('report.xls')
    sio = StringIO.StringIO()
    wb.save(sio)
    sio.seek(0)
    response = HttpResponse(sio.getvalue(),
                            content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment; filename=report.xls'
    response.write(sio.getvalue())
    return response