def tm(page=1): if g.user.role.name == ROLE_HEAD_OF_TACTICAL_LEVEL: is_om_answered_on_questions = ApplicationData.is_om_answered_on_questions() try: chosen_processes = UserChoice.user_choice_processes_by_role_id(g.user.role_id).paginate(page, 1, False) except NoResultFound: chosen_processes = [] if is_om_answered_on_questions.status: current_process = chosen_processes.items[0] questions_by_process = Question.chosen_questions(current_process.id).all() else: current_process = None questions_by_process = [] form = TestForm(questions=questions_by_process) is_tm_answered_on_questions = ApplicationData.is_tm_answered_on_questions() if form.validate_on_submit(): if form.finish.data: page = chosen_processes.pages save_answers_to_db(form, g.user.role_id, current_process.id) if not is_tm_answered_on_questions.status: is_tm_answered_on_questions.status = bool(not is_tm_answered_on_questions.status) is_tm_answered_on_questions.update() if form.next_page.data: save_answers_to_db(form, g.user.role_id, current_process.id) page = chosen_processes.next_num return redirect(url_for('tm', page=page)) html = render_template('roles/tm.html', form=form, current_process=current_process, is_om_answered_on_questions=is_om_answered_on_questions, is_tm_answered_on_questions=is_tm_answered_on_questions, processes=chosen_processes, investment_level=UserChoice.user_choice_chosen_investment_level()) return __make_tooltips(html) else: return u'Вы не можете получить доступ к этой странице'
def cso_testing(page=1): if g.user.role.name == ROLE_HEAD_OF_INFORMATION_SECURITY: is_tm_answered_on_questions = ApplicationData.is_tm_answered_on_questions() chosen_processes = UserChoice.user_choice_processes_by_role_id(g.user.role_id).paginate(page, 1, False) if is_tm_answered_on_questions.status: current_process = chosen_processes.items[0] questions_by_process = Question.chosen_questions(current_process.id).all() else: current_process = None questions_by_process = [] form = TestForm(questions=questions_by_process) is_cso_answered_on_questions = ApplicationData.is_cso_answered_on_questions() if form.validate_on_submit(): if form.finish.data: save_answers_to_db(form, g.user.role_id, current_process.id) if not is_cso_answered_on_questions.status: is_cso_answered_on_questions.status = bool(not is_cso_answered_on_questions.status) is_cso_answered_on_questions.update() make_statistic() return redirect(url_for('cso')) if form.next_page.data: save_answers_to_db(form, g.user.role_id, current_process.id) page = chosen_processes.next_num return redirect(url_for('cso_testing', page=page)) html = render_template('roles/cso_testing.html', form=form, current_process=current_process, is_tm_answered_on_questions=is_tm_answered_on_questions, is_cso_answered_on_questions=is_cso_answered_on_questions, processes=chosen_processes, investment_level=UserChoice.user_choice_chosen_investment_level()) return __make_tooltips(html) else: return u'Вы не можете получить доступ к этой странице'
def cio(page=1): """ Отображение страницы для CIO :param page: номер страницы (int) :return: html """ # Проверяем полномочия пользователя (пользователь может просматривать страницы только по своему уровню доступа) if g.user.role.name == ROLE_HEAD_OF_BASE_LEVEL: # Получаем информацию о состоянии системы is_cso_choose_processes = ApplicationData.is_cso_choose_processes() # Получаем процессы, по которым должен пользователь пройти тестирование # метод paginate(page, count, error_out) возвращает список объектов в количестве count на страницу page # тем самым добиваемся того, что тестирование по 1 процессу является 1 страница try: chosen_processes = UserChoice.user_choice_processes_by_role_id(g.user.role_id).paginate(page, 1, False) except NoResultFound: chosen_processes = [] if is_cso_choose_processes.status: # Определяем текущий процесс и список вопросов, которые нужно будет отрисовать на форме current_process = chosen_processes.items[0] questions_by_process = Question.chosen_questions(current_process.id).all() else: # Эта ветвь необходима для корректного завершения функции (например, когда тестирование не началось, # а CSO прошёл аутентификацию current_process = None questions_by_process = [] # Создаём форму, в которую будут поступать ответы пользователя form = TestForm(questions=questions_by_process) is_cio_answered_on_questions = ApplicationData.is_cio_answered_on_questions() # Форма прошла валидацию и отправлена? if form.validate_on_submit(): # Тестирование завершено? if form.finish.data: page = chosen_processes.pages # Сохраняем ответы в базу данных save_answers_to_db(form, g.user.role_id, current_process.id) if not is_cio_answered_on_questions.status: # Изменяем параметр пройденности тестирования пользователя cio на обратное (False -> True) is_cio_answered_on_questions.status = bool(not is_cio_answered_on_questions.status) # Сохраняем параметр в базе данных is_cio_answered_on_questions.update() # Если пользователю предстоит проходить тестирование по нескольким процессам, # и есть ещё процессы, на вопросы которых он не ответил, # то сохраняем ответы со страницы и изменяем номер страницы на 1 if form.next_page.data: save_answers_to_db(form, g.user.role_id, current_process.id) page = chosen_processes.next_num # Перенаправление пользователя на новый номер страницы return redirect(url_for('cio', page=page)) # Отрисовка страницы html = render_template('roles/cio.html', form=form, current_process=current_process, is_cso_choose_processes=is_cso_choose_processes, is_cio_answered_on_questions=is_cio_answered_on_questions, processes=chosen_processes, investment_level=UserChoice.user_choice_chosen_investment_level()) return __make_tooltips(html) else: return u'Вы не можете получить доступ к этой странице'