from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class A_ImportDetails(Page): #define variables by using data from link def before_next_page(self): part_lab = self.player.participant.label.split("_") self.player.enum_name = int(part_lab[0]) if int(part_lab[0]) % 2 == 0: self.player.male = 1 else: self.player.male = 0 #use temp variables for type, treatment, subtreatment if part_lab[2] == "EPH": self.group.type = 2 elif part_lab[2] == "EPC": self.group.type = 1 elif part_lab[2] == "EA": self.group.type = 0 if part_lab[3] == "ppri": self.group.treatment = 2 elif part_lab[3] == "ppub": self.group.treatment = 1 elif part_lab[3] == "cont": self.group.treatment = 0 if part_lab[4] == "ER": self.group.subtreatment = 1 elif part_lab[4] == "NER": self.group.subtreatment = 0 self.player.HHID = int(part_lab[5]) self.player.PID = int(part_lab[5]+part_lab[0]) self.group.super_game_ID = int(part_lab[6]) self.group.eph_elicit_regret = int(part_lab[7]) self.group.cv_ante = int(part_lab[8]) self.participant.vars['male'] = self.player.male self.session.vars['type'] = self.group.type self.session.vars['treatment'] = self.group.treatment self.session.vars['subtreatment'] = self.group.subtreatment self.session.vars['cv_ante'] = self.group.cv_ante self.participant.vars['HHID'] = self.player.HHID self.participant.vars['PID'] = self.player.PID self.session.vars['super_game_ID'] = self.group.super_game_ID self.participant.vars['eph_elicit_regret'] = self.group.eph_elicit_regret #self.participant.vars['break_code_b1'] = int(part_lab[9]) #self.participant.vars['break_code_b2'] = int(part_lab[10]) #self.participant.vars['break_code_b3'] = int(part_lab[11]) #self.participant.vars['break_code_b4'] = int(part_lab[12]) #self.participant.vars['break_code_b5'] = int(part_lab[13]) #Method 1: Enumerator input the RW/SW scores in Otree and we ask the questions in SurveyCTO class A_InputIRscores(Page): form_model = 'player' def get_form_fields(self): if self.player.male == 1: return ['e_irscore', 'e_irscorecheck'] else: return ['si_irscore', 'si_irscorecheck'] def before_next_page(self): if self.player.male == 1: self.participant.vars['e_irscore'] = self.player.e_irscore self.participant.vars['e_irscorecheck'] = self.player.e_irscorecheck else: self.participant.vars['si_irscore'] = self.player.si_irscore self.participant.vars['si_irscorecheck'] = self.player.si_irscorecheck def error_message(self, values): if self.player.male == 1: fieldone = values['e_irscore'] fieldtwo = values['e_irscorecheck'] if fieldone != fieldtwo: return "Please go back to SurveyCTO and check which of the two numbers you inputted is correct!" else: fieldone = values['si_irscore'] fieldtwo = values['si_irscorecheck'] if fieldone != fieldtwo: return "Please go back to SurveyCTO and check which of the two numbers you inputted is correct!" ''' form_model = 'player' form_fields = ['e_irscore','e_irscorecheck'] def before_next_page(self): self.participant.vars['e_irscore'] = self.player.e_irscore self.participant.vars['e_irscorecheck'] = self.player.e_irscorecheck def error_message(player, values): fieldone = values['e_irscore'] fieldtwo = values['e_irscorecheck'] if fieldone != fieldtwo: return "Please go back to SurveyCTO and check which of the two numbers you inputted is correct!" def before_next_page(self): if self.player.male == 1: self.participant.vars['e_irscore'] = self.player.e_irscore self.participant.vars['e_irscorecheck'] = self.player.e_irscorecheck else: self.participant.vars['si_irscore'] = self.player.e_irscore self.participant.vars['si_irscorecheck'] = self.player.e_irscorecheck def error_message(self, values): if self.player.male==1: fieldone = values['e_irscore'] fieldtwo = values['e_irscorecheck'] if fieldone != fieldtwo: return "Please go back to SurveyCTO and check which of the two numbers you inputted is correct!" else: fieldone = values['si_irscore'] fieldtwo = values['si_irscorecheck'] if fieldone != fieldtwo: return "Please go back to SurveyCTO and check which of the two numbers you inputted is correct!" class A_ego_0_practice(Page): form_model = 'player' form_fields = ['e_prac','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_prac'] = self.player.e_prac #### RM Questions ############################################################ class A_ego_1(Page): form_model = 'player' form_fields = ['e_1','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_1'] = self.player.e_1 class A_ego_1_break(Page): form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b1']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None class A_ego_2(Page): form_model = 'player' form_fields = ['e_2','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_2'] = self.player.e_2 class A_ego_2_break(Page): form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b2']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None class A_ego_3(Page): form_model = 'player' form_fields = ['e_3','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_3'] = self.player.e_3 class A_ego_3_break(Page): form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b3']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None class A_ego_4(Page): form_model = 'player' form_fields = ['e_4','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_4'] = self.player.e_4 class A_ego_4_break(Page): form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b4']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None class A_ego_5(Page): form_model = 'player' form_fields = ['e_5','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_5'] = self.player.e_5 temp_score = 0 for i in range(1,5): temp_str = "e_" + str(i) temp_score += self.participant.vars[temp_str] self.player.e_score = temp_score self.participant.vars['e_score'] = self.player.e_score if self.participant.vars['male'] == 1: self.player.e_other_scores = Constants.rm_scores_string temp_score_list = Constants.rm_scores_list else: self.player.e_other_scores = Constants.sw_scores_string temp_score_list = Constants.sw_scores_list temp_counter = 0 for i in temp_score_list: if self.participant.vars['e_score'] < i: temp_counter += 1 self.player.e_rank_act = temp_counter + 1 self.participant.vars['e_rank_act'] = self.player.e_rank_act ##NOTE: PASS rank and score to other player in game_upd app class A_ego_5_break(Page): def is_displayed(self): return self.session.vars['cv_ante'] == 0 form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b5']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None ''' ''' class A_ego_6(Page): form_model = 'player' form_fields = ['e_6','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_6'] = self.player.e_6 class A_ego_6_break(Page): form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b6']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None class A_ego_7(Page): form_model = 'player' form_fields = ['e_7','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_7'] = self.player.e_7 class A_ego_7_break(Page): form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b7']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None class A_ego_8(Page): form_model = 'player' form_fields = ['e_8','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_8'] = self.player.e_8 class A_ego_8_break(Page): form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b8']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None class A_ego_9(Page): form_model = 'player' form_fields = ['e_9','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_9'] = self.player.e_9 class A_ego_9_break(Page): form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b9']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None class A_ego_10(Page): form_model = 'player' form_fields = ['e_10','pass_key'] def error_message(player, values): if values['pass_key'] != 456: return 'Wrong passcode' def before_next_page(self): self.player.pass_key = None self.participant.vars['e_10'] = self.player.e_10 temp_score = 0 for i in range(1,10): temp_str = "e_" + str(i) temp_score += self.participant.vars[temp_str] self.player.e_score = temp_score self.participant.vars['e_score'] = self.player.e_score if self.participant.vars['male'] == 1: self.player.e_other_scores = Constants.rm_scores_string temp_score_list = Constants.rm_scores_list else: self.player.e_other_scores = Constants.sw_scores_string temp_score_list = Constants.sw_scores_list temp_counter = 0 for i in temp_score_list: if self.participant.vars['e_score'] < i: temp_counter += 1 self.player.e_rank_act = temp_counter + 1 self.participant.vars['e_rank_act'] = self.player.e_rank_act ##NOTE: PASS rank and score to other player in game_upd app class A_ego_10_break(Page): def is_displayed(self): return self.session.vars['cv_ante'] == 0 form_model = 'player' form_fields = ['break_code'] def error_message(player, values): if values['break_code'] != player.participant.vars['break_code_b10']: return 'Go back to SurveyCTO and see what your break code is' def before_next_page(self): self.player.break_code = None ''' ######################################################################## ######### Lottery Start ################################################ ######################################################################## class A_lottery_instructions(Page): pass class A_InputDetails(Page): form_model = 'player' form_fields = ['coin_toss_winner'] def before_next_page(self): self.participant.vars['coin_toss_winner'] = self.player.coin_toss_winner class A_InputDetailsTwo(Page): form_model = 'player' form_fields = ['color_lottery','pass_key'] def before_next_page(self): self.participant.vars['color_lottery'] = self.player.color_lottery class A_Lottery_WaitPage(WaitPage): pass class A_LotteryResults(Page): form_model = 'player' form_fields = ['spouse_color_lottery','opponent_color_lottery','opponent_groupID'] def js_vars(self): return dict( #self attributes self_id = self.player.id_in_group, self_HHID = self.player.HHID, self_enumID = self.player.enum_name, self_male = self.player.male, self_color_lottery = self.player.color_lottery, #all player attributes p1_HHID = self.group.get_player_by_id(1).HHID, p1_enumID=self.group.get_player_by_id(1).enum_name, p1_color_lottery = self.group.get_player_by_id(1).color_lottery, p1_male = self.group.get_player_by_id(1).male, p2_HHID=self.group.get_player_by_id(2).HHID, p2_enumID=self.group.get_player_by_id(2).enum_name, p2_color_lottery=self.group.get_player_by_id(2).color_lottery, p2_male=self.group.get_player_by_id(2).male, p3_HHID=self.group.get_player_by_id(3).HHID, p3_enumID=self.group.get_player_by_id(3).enum_name, p3_color_lottery=self.group.get_player_by_id(3).color_lottery, p3_male=self.group.get_player_by_id(3).male, p4_HHID=self.group.get_player_by_id(4).HHID, p4_enumID=self.group.get_player_by_id(4).enum_name, p4_color_lottery=self.group.get_player_by_id(4).color_lottery, p4_male=self.group.get_player_by_id(4).male, ) def before_next_page(self): self.participant.vars['opponent_color'] = self.player.opponent_color_lottery class B_Lottery_Results_Two(Page): form_model = 'player' form_fields = ['game_role'] def js_vars(self): return dict( #self attributes self_color_lottery=self.player.color_lottery, #opponent player attributes opponent_color_lottery=self.participant.vars['opponent_color'], ) def before_next_page(self): self.participant.vars['game_role'] = self.player.game_role class C_waitAllPlayerLottery(WaitPage): pass class C_enumInstructTreatment(Page): form_model = 'player' form_fields = ['diagnostic','diagnostic_type'] def js_vars(self): return dict( self_role = self.player.game_role, self_male = self.player.male, opp_male = self.group.get_player_by_id(self.player.opponent_groupID).male, opp_role = self.group.get_player_by_id(self.player.opponent_groupID).game_role, type = self.session.vars['type'], treatment = self.session.vars['treatment'], subtreatment = self.session.vars['subtreatment'] ) def before_next_page(self): self.participant.vars['opp_male'] = self.group.get_player_by_id(self.player.opponent_groupID).male self.participant.vars['diagnostic'] = self.player.diagnostic self.participant.vars['diagnostic_type'] = self.player.diagnostic_type self.participant.vars['type'] = self.group.type self.participant.vars['treatment'] = self.group.treatment self.participant.vars['subtreatment'] = self.group.subtreatment class C_allTreatmentWaitPage(WaitPage): pass class C_allTreatmentWait(Page): pass class C_waitPlayerProceed1(Page): def is_displayed(self): return self.player.color_lottery == 2 or self.player.color_lottery == 3 or self.player.color_lottery == 4 class C_waitPlayerProceed1_WaitPage(WaitPage): def is_displayed(self): return self.player.color_lottery == 2 or self.player.color_lottery == 3 or self.player.color_lottery == 4 class C_waitPlayerProceed2(Page): def is_displayed(self): return self.player.color_lottery == 2 or self.player.color_lottery == 3 class C_waitPlayerProceed2_WaitPage(WaitPage): def is_displayed(self): return self.player.color_lottery == 2 or self.player.color_lottery == 3 page_sequence = [ A_ImportDetails, #A_ego_0_practice, #A_ego_1, #A_ego_1_break, #A_ego_2, #A_ego_2_break, #A_ego_3, #A_ego_3_break, #A_ego_4, #A_ego_4_break, #A_ego_5, #A_ego_5_break, A_InputIRscores, A_lottery_instructions, A_InputDetails, A_InputDetailsTwo, A_Lottery_WaitPage, A_LotteryResults, B_Lottery_Results_Two, C_waitAllPlayerLottery, C_enumInstructTreatment, C_allTreatmentWaitPage, C_allTreatmentWait, C_waitPlayerProceed1, C_waitPlayerProceed1_WaitPage, C_waitPlayerProceed2, C_waitPlayerProceed2_WaitPage ]