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
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)