Ejemplo n.º 1
0
def generate_single_checkpoint(work_program, absolute_semester,
                               relative_semester, programs, setup):
    # Переменные для формирования запроса к БАРС
    list_regular = []
    extra_points = True if work_program.extra_points else False
    work_program_id = work_program.id
    types_checkpoints = get_list_of_regular_checkpoints(setup)
    has_course_project = False
    course_project = None
    final_checkpoint = None
    point_distribution = 0

    evaluation_tools = EvaluationTool.objects.filter(
        evaluation_tools__in=DisciplineSection.objects.filter(
            work_program__id=work_program_id)).distinct().filter(
                semester=relative_semester)
    for eva in evaluation_tools:
        id = None
        test_id = -1
        for el in types_checkpoints:
            if el["name"] == eva.type:
                id = el["id"]
                if el["name"] == "Электронное тестирование (тест в ЦДО)":
                    test_list = get_tests(setup)
                    for test in test_list:
                        if test['name'] == eva.name:
                            test_id = test['id']
                    if test_id == -1:
                        body = generate_test(term=absolute_semester,
                                             year=setup[0],
                                             name=eva.name)
                        test_id = post_tests(setup=setup, body=body)["id"]
        list_regular.append(
            generate_checkpoint(name=eva.name,
                                min=eva.min,
                                max=eva.max,
                                week=int(eva.deadline),
                                type_id=id,
                                key=eva.check_point,
                                test_id=test_id))
    certificate = СertificationEvaluationTool.objects.filter(
        work_program=work_program_id, semester=relative_semester)
    for cerf in certificate:
        if int(cerf.type) == 4:
            has_course_project = True
            course_project = generate_checkpoint(name=cerf.name,
                                                 min=cerf.min,
                                                 max=cerf.max,
                                                 week=None,
                                                 type_id=id,
                                                 key=True)
        else:
            point_distribution = 100 - cerf.max
            final_checkpoint = generate_checkpoint(
                name=cerf.name,
                min=cerf.min,
                max=cerf.max,
                week=None,
                type_id=get_checkpoints_type(int(cerf.type)),
                key=True)
    discipline = generate_discipline(bars_id=work_program.wp_isu_id,
                                     name=work_program.title,
                                     term=absolute_semester,
                                     course_project=has_course_project)
    checkpoint_plan = generate_checkpoint_plan(
        regular_checkpoint=list_regular,
        programs=programs,
        discipline=discipline,
        final_checkpoint=final_checkpoint,
        course_project_checkpoint=course_project,
        term=absolute_semester,
        point_distribution=point_distribution,
        additional_points=extra_points,
        alternate_methods=False,
        has_course_project=has_course_project)
    return checkpoint_plan
Ejemplo n.º 2
0
def CreateCheckPoint(request):
    # TODO: УБРАТЬ ХАРДКОДИНГ
    work_program_id = request.data.get('work_program_id')
    field_of_study_id = request.data.get('field_of_study_id')
    term = request.data.get('term')

    # Переменные для формирования запроса к БАРС
    point_distribution = 0
    bars_id = WorkProgram.objects.get(
        id=work_program_id).wp_isu_id
    types_checkpoints = get_list_of_regular_checkpoints()  # Список оценочных средств в БАРСе
    list_regular = []
    has_course_project = False
    course_project = None
    final_checkpoint = None
    discipline = None
    extra_points = True if WorkProgram.objects.get(id=work_program_id).extra_points else False
    field_of_study = FieldOfStudy.objects.get(id=field_of_study_id)

    # Получение дисцплины из направления
    wp_in_change = WorkProgramChangeInDisciplineBlockModule.objects.filter(work_program=work_program_id,
                    discipline_block_module__descipline_block__academic_plan__field_of_study=field_of_study).distinct()
    wp_in_change = wp_in_change[0]

    """
    Пока названия имен в Конструкторе РПД не совпадают с именами в БАРСе этот код не имеет смысла, 
    заменяется тем что ниже
    
    educational_bars_id = WorkProgramInFieldOfStudy.objects.filter(
        work_program_change_in_discipline_block_module=wp_in_change)[0].id_str_up
    """

    # Поиск информции об образовательной программе в барсе, получение ее таблицы
    programs = []
    bars_education = get_one_educational_program(bars_id, term)
    for educ in bars_education:
        if educ["code"] == field_of_study.number + ".":
            programs = educ

    # Поиск относительного семестра из переданного абсолютного
    semesters = str(wp_in_change.credit_units).split(",")
    needed_semester = -1
    count = 1
    for i, el in enumerate(semesters):
        if int(el) > 0:
            if i + 1 == term:
                needed_semester = count
                break
            count += 1

    # Поиск оценочных средства для семетра, а также нахождение БАРСовских типов оценочных срелств
    evaluation_tools = EvaluationTool.objects.filter(evaluation_tools__in=DisciplineSection.objects.filter(
        work_program__id=work_program_id)).distinct().filter(semester=needed_semester)
    for eva in evaluation_tools:
        for el in types_checkpoints:
            if el["name"] == eva.type:
                id = el["id"]
        list_regular.append(
            generate_checkpoint(name=eva.name, min=eva.min, max=eva.max, week=int(eva.deadline), type_id=id,
                                key=eva.check_point))
    certificate = СertificationEvaluationTool.objects.filter(work_program=work_program_id, semester=needed_semester)
    for cerf in certificate:
        if int(cerf.type) == 4:
            has_course_project = True
            course_project = generate_checkpoint(name=cerf.name, min=cerf.min, max=cerf.max, week=None, type_id=id,
                                                 key=True)
        else:
            point_distribution = 100 - cerf.max
            final_checkpoint = generate_checkpoint(name=cerf.name, min=cerf.min, max=cerf.max, week=None,
                                                   type_id=get_checkpoints_type(int(cerf.type)), key=True)

    discipline = generate_discipline(bars_id=bars_id, name=WorkProgram.objects.get(id=work_program_id).title, term=term,
                                     course_project=has_course_project)
    print(programs)
    checkpoint_plan = generate_checkpoint_plan(regular_checkpoint=list_regular, programs=programs,
                                               discipline=discipline,
                                               final_checkpoint=final_checkpoint,
                                               course_project_checkpoint=course_project,
                                               term=term, point_distribution=point_distribution,
                                               additional_points=extra_points,
                                               alternate_methods=False, has_course_project=has_course_project)
    print(post_checkpoint_plan(checkpoint_plan))
    return Response(checkpoint_plan)