from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants from otreeutils.pages import ExtendedPage, APPS_DEBUG import time def progress(p): curpageindex = page_sequence.index(type(p))+1 progress = ((p.round_number-1)*pages_per_round+curpageindex)/tot_pages*100 return progress # Demographics class Demographics(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' form_fields = ['member_num', 'group_num', 'age', 'gender', 'studies', 'studies_second', 'experience_general', 'company_name', 'experience_local', 'sector', 'experience', 'period_work', 'remote', 'married', 'children_number', 'children_age', 'birth_region', 'live_region', 'period_live'] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == 1 # Test Belbin class Test_Belbin_instructions(ExtendedPage): def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == 1 class Test_Belbin_block(ExtendedPage): #debug_fill_forms_randomly = True form_model = 'player' form_fields = ['sa_belbin{}'.format(i) for i in range(0, 8)] #def before_next_page(self): # self.player.check_correct() #def get_form_fields(self): # return ['block_b1{}'.format(i) for i in range(0, 8)] + ['block_b2{}'.format(i) for i in range(0, 8)] +\ # ['block_b3{}'.format(i) for i in range(0, 8)] + ['block_b4{}'.format(i) for i in range(0, 8)] +\ # ['block_b5{}'.format(i) for i in range(0, 8)] + ['block_b6{}'.format(i) for i in range(0, 8)] +\ # ['block_b7{}'.format(i) for i in range(0, 8)] def is_displayed(self): return self.round_number <= Constants.belbin_num_rounds def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 current_title = Constants.belbin_title[self.round_number-1] sum_points = self.player.sa_belbin0 + self.player.sa_belbin1 + \ self.player.sa_belbin2 + self.player.sa_belbin3 + \ self.player.sa_belbin4 + self.player.sa_belbin5 + \ self.player.sa_belbin6 + self.player.sa_belbin7 counts = (self.player.sa_belbin0 != 0) + (self.player.sa_belbin1 != 0) + \ (self.player.sa_belbin2 != 0) + (self.player.sa_belbin3 != 0) + \ (self.player.sa_belbin4 != 0) + (self.player.sa_belbin5 != 0) + \ (self.player.sa_belbin6 != 0) + (self.player.sa_belbin7 != 0) return { 'current_title': current_title, 'sum_points': sum_points, 'counts': counts, 'progress': progress(self) } def error_message(self, values): print('values is', values) if (values['sa_belbin0'] + values['sa_belbin1'] + values['sa_belbin2'] +\ values['sa_belbin3'] + values['sa_belbin4'] + values['sa_belbin5'] +\ values['sa_belbin6'] + values['sa_belbin7'] > 10)\ and\ ((values['sa_belbin0'] != 0) +(values['sa_belbin1'] != 0) + \ (values['sa_belbin2'] != 0) + (values['sa_belbin3'] != 0) + \ (values['sa_belbin4'] != 0) + (values['sa_belbin5'] != 0) + \ (values['sa_belbin6'] != 0) + (values['sa_belbin7'] != 0) > 4): return ['Сумма баллов по всем блокам не должна превышать 10', 'Количество использованных блоков не должно превышать 4'] elif (values['sa_belbin0'] + values['sa_belbin1'] + values['sa_belbin2'] +\ values['sa_belbin3'] + values['sa_belbin4'] + values['sa_belbin5'] +\ values['sa_belbin6'] + values['sa_belbin7'] > 10): return 'Сумма баллов по всем блокам не должна превышать 10' elif ((values['sa_belbin0'] != 0) + (values['sa_belbin1'] != 0) +\ (values['sa_belbin2'] != 0) + (values['sa_belbin3'] != 0) +\ (values['sa_belbin4'] != 0) + (values['sa_belbin5'] != 0) +\ (values['sa_belbin6'] != 0) + (values['sa_belbin7'] != 0) > 4): return 'Количество использованных утверждений не должно превышать 4' #def before_next_page(self): # self.player.error_message(values) # Test Guilford class Test_Guilford_instructions(ExtendedPage): def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == Constants.belbin_num_rounds class Test_Guilford1_instructions(ExtendedPage): def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == Constants.belbin_num_rounds class Test_Guilford2_instructions(ExtendedPage): def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == Constants.belbin_num_rounds class Test_Guilford3_instructions(ExtendedPage): def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == Constants.belbin_num_rounds class Test_Guilford4_instructions(ExtendedPage): def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == Constants.belbin_num_rounds class Test_Guilford_block1(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' timeout_seconds = 360 timer_text = 'Оставшееся время:' def get_form_fields(self): return ['sa_guilford1{}'.format(i) for i in range(1, 15)] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == Constants.belbin_num_rounds class Test_Guilford_block2(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' timeout_seconds = 420 timer_text = 'Оставшееся время:' def get_form_fields(self): return ['sa_guilford2{}'.format(i) for i in range(1, 16)] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == Constants.belbin_num_rounds class Test_Guilford_block3(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' timeout_seconds = 300 timer_text = 'Оставшееся время:' def get_form_fields(self): return ['sa_guilford3{}'.format(i) for i in range(1, 13)] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == Constants.belbin_num_rounds class Test_Guilford_block4(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' timeout_seconds = 600 timer_text = 'Оставшееся время:' def get_form_fields(self): return ['sa_guilford4{}'.format(i) for i in range(1, 15)] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == Constants.belbin_num_rounds # Test MMPI class Test_MMPI(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' def get_form_fields(self): return ['sa_mmpi'] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 mmpi_round_number = self.round_number - Constants.belbin_num_rounds + 1 return { 'mmpi_round_number': mmpi_round_number, 'progress': progress(self) } def is_displayed(self): return (self.round_number >= Constants.belbin_num_rounds)and(self.round_number < (Constants.belbin_num_rounds + Constants.mmpi_num_rounds)) # Test 16PF Cattell class Test_16PF_Cattell(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' def get_form_fields(self): return ['sa_cattell'] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 cattell_round_number = self.round_number - Constants.belbin_num_rounds - Constants.mmpi_num_rounds + 1 return { 'cattell_round_number': cattell_round_number, 'progress': progress(self) } def is_displayed(self): return (self.round_number >= (Constants.belbin_num_rounds + Constants.mmpi_num_rounds)) and\ (self.round_number < (Constants.belbin_num_rounds + Constants.mmpi_num_rounds + Constants.cattell_num_rounds)) # Test Myers Briggs class Test_Myers_Briggs(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' def get_form_fields(self): if (self.player.q_myers_briggs_id == 68): return ['sa_myers_briggs_cb'] else: return ['sa_myers_briggs'] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 myers_briggs_round_number = self.round_number - Constants.belbin_num_rounds - Constants.mmpi_num_rounds - Constants.cattell_num_rounds + 1 return { 'myers_briggs_round_number': myers_briggs_round_number, 'progress': progress(self) } def is_displayed(self): return (self.round_number >= (Constants.belbin_num_rounds + Constants.mmpi_num_rounds + Constants.cattell_num_rounds) and (self.round_number < (Constants.belbin_num_rounds + Constants.mmpi_num_rounds + Constants.cattell_num_rounds) + Constants.myers_briggs_num_rounds)) # Test Thomas Kilmann class Test_Thomas_Kilmann_instructions(ExtendedPage): def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def before_next_page(self): # user has 5 minutes to complete as many pages as possible self.participant.vars['expiry'] = time.time() + 10 * 60 def is_displayed(self): return self.round_number == (Constants.belbin_num_rounds + Constants.mmpi_num_rounds + Constants.cattell_num_rounds + Constants.myers_briggs_num_rounds) class Test_Thomas_Kilmann(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' #timeout_seconds = 600 timer_text = 'Оставшееся время:' def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def get_form_fields(self): return ['sa_kilmann'] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 kilmann_round_number = self.round_number - Constants.belbin_num_rounds - Constants.mmpi_num_rounds - \ Constants.cattell_num_rounds - Constants.myers_briggs_num_rounds + 1 return { 'kilmann_round_number': kilmann_round_number, 'progress': progress(self) } def is_displayed(self): return (self.round_number >= (Constants.belbin_num_rounds + Constants.mmpi_num_rounds + \ Constants.cattell_num_rounds + Constants.myers_briggs_num_rounds)) and \ (self.round_number < (Constants.belbin_num_rounds + Constants.mmpi_num_rounds + Constants.cattell_num_rounds + \ Constants.myers_briggs_num_rounds + Constants.kilmann_num_rounds)) and \ self.get_timeout_seconds() > 1 # Test Team Model class Test_Team_Model(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' def get_form_fields(self): return ['sa_team_m{}'.format(i) for i in range(1, 16)] + ['leader'] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): return self.round_number == (Constants.belbin_num_rounds + Constants.mmpi_num_rounds + \ Constants.cattell_num_rounds + Constants.myers_briggs_num_rounds + Constants.kilmann_num_rounds) # Test Adizes class Test_Adizes_instructions(ExtendedPage): def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): #(self.player.leader == 2) and result_boolean = (self.round_number == (Constants.belbin_num_rounds + Constants.mmpi_num_rounds +\ Constants.cattell_num_rounds + Constants.myers_briggs_num_rounds + Constants.kilmann_num_rounds)) and\ ((self.player.leader == ['2']) or (self.player.leader == ['1', '2'])) return result_boolean class Test_Adizes(ExtendedPage): #debug_fill_forms_randomly = True form_model = 'player' def get_form_fields(self): return ['sa_adizes{}'.format(i) for i in range(0, 4)] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 adizes_round_number = self.round_number - Constants.belbin_num_rounds - Constants.mmpi_num_rounds - \ Constants.cattell_num_rounds - Constants.myers_briggs_num_rounds - Constants.kilmann_num_rounds + 1 sum_points = self.player.sa_adizes0 + self.player.sa_adizes1 + \ self.player.sa_adizes2 + self.player.sa_adizes3 return { 'adizes_round_number': adizes_round_number, 'sum_points': sum_points, 'progress': progress(self) } def is_displayed(self): adizes_round_number = self.round_number - Constants.belbin_num_rounds - Constants.mmpi_num_rounds - \ Constants.cattell_num_rounds - Constants.myers_briggs_num_rounds - Constants.kilmann_num_rounds + 1 if adizes_round_number > 1: self.player.leader = self.player.in_round(self.round_number - 1).leader result_boolean = (self.round_number >= (Constants.belbin_num_rounds + Constants.mmpi_num_rounds + \ Constants.cattell_num_rounds + Constants.myers_briggs_num_rounds + Constants.kilmann_num_rounds)) and \ (self.round_number < Constants.num_rounds) and \ ((self.player.leader == ['2']) or (self.player.leader == ['1', '2'])) return result_boolean def error_message(self, values): print('values is', values) if (values['sa_adizes0'] + values['sa_adizes1'] +\ values['sa_adizes2'] + values['sa_adizes3'] != 10): return 'Сумма баллов должна быть равна 10' # Test Team Result class Test_Team_Result(ExtendedPage): debug_fill_forms_randomly = True form_model = 'player' def get_form_fields(self): return ['sa_team_r{}'.format(i) for i in range(1, 8)] def vars_for_template(self): # curpageindex = page_sequence.index(type(self)) - 1 # progress = curpageindex / len(page_sequence) * 100 return { 'progress': progress(self) } def is_displayed(self): result_boolean = (self.round_number == Constants.num_rounds) and \ ((self.player.leader == ['2']) or (self.player.leader == ['1', '2'])) return result_boolean class Results(ExtendedPage): def is_displayed(self): return self.round_number == Constants.num_rounds page_sequence = [ Demographics, Test_Belbin_instructions, Test_Belbin_block, Test_Guilford_instructions, Test_Guilford1_instructions, Test_Guilford_block1, Test_Guilford2_instructions, Test_Guilford_block2, Test_Guilford3_instructions, Test_Guilford_block3, Test_Guilford4_instructions, Test_Guilford_block4, Test_MMPI, Test_16PF_Cattell, Test_Myers_Briggs, Test_Thomas_Kilmann_instructions, Test_Thomas_Kilmann, Test_Team_Model, Test_Adizes_instructions, Test_Adizes, Test_Team_Result, Results ] pages_per_round = len(page_sequence) tot_pages = pages_per_round * Constants.num_rounds # (Constants.belbin_num_rounds*10 + Constants.mmpi_num_rounds + Constants.cattell_num_rounds + Constants.myers_briggs_num_rounds +\ # Constants.kilmann_num_rounds + Constants.adizes_num_rounds*4 + (14 +15 + 13 + 14))