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_temp = 2 elif part_lab[2] == "EPC": self.group.type_temp = 1 elif part_lab[2] == "EA": self.group.type_temp = 0 if part_lab[3] == "ppri": self.group.treatment_temp = 2 elif part_lab[3] == "ppub": self.group.treatment_temp = 1 elif part_lab[3] == "cont": self.group.treatment_temp = 0 #if part_lab[4] == "transferL": # self.group.subtreatment = 3 if part_lab[4] == "ER": self.group.subtreatment_temp = 1 elif part_lab[4] == "NER": self.group.subtreatment_temp = 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.ea_fix_belief = int(part_lab[8]) self.group.pub_update_sub = int(part_lab[9]) self.group.d_update_sub = int(part_lab[10]) self.group.d_likelihood_sub = int(part_lab[11]) self.group.mood_sub = int(part_lab[12]) self.group.elicit_c_score = int(part_lab[13]) self.group.elicit_c_type = int(part_lab[14]) self.participant.vars['male'] = self.player.male self.session.vars['type_temp'] = self.group.type_temp self.session.vars['treatment_temp'] = self.group.treatment_temp self.session.vars['subtreatment_temp'] = self.group.subtreatment_temp 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['ea_fix_belief'] = self.group.ea_fix_belief self.participant.vars['pub_update_sub'] = self.group.pub_update_sub self.participant.vars['d_update_sub'] = self.group.d_update_sub self.participant.vars['d_likelihood_sub'] = self.group.d_likelihood_sub self.participant.vars['mood_sub'] = self.group.mood_sub self.participant.vars['elicit_c_score'] = self.group.elicit_c_score self.participant.vars['elicit_c_type'] = self.group.elicit_c_type class A_lottery_instructions(Page): pass class A_InputDetails(Page): form_model = 'player' form_fields = ['lottery_num_pair'] def before_next_page(self): self.participant.vars['lottery_num_pair'] = self.player.lottery_num_pair class A_Lottery_WaitPage(WaitPage): pass class A_LotteryResults(Page): form_model = 'player' form_fields = ['spouse_lottery_num','opponent_lottery_num_pair','opponent_groupID','group_pos_game'] 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_lottery_num_pair = self.player.lottery_num_pair, #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_lottery_num_pair = self.group.get_player_by_id(1).lottery_num_pair, 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_lottery_num_pair=self.group.get_player_by_id(2).lottery_num_pair, 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_lottery_num_pair=self.group.get_player_by_id(3).lottery_num_pair, 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_lottery_num_pair=self.group.get_player_by_id(4).lottery_num_pair, p4_male=self.group.get_player_by_id(4).male, ) def before_next_page(self): self.participant.vars['group_pos_game'] = self.player.group_pos_game class B_InputDetails(Page): form_model = 'player' form_fields = ['lottery_num_role'] def before_next_page(self): self.participant.vars['lottery_num_role'] = self.player.lottery_num_role class B_Lottery_WaitPage(WaitPage): pass class B_LotteryResults(Page): form_model = 'player' form_fields = ['opponent_lottery_num_role','game_role'] def js_vars(self): return dict( #self attributes self_lottery_num_role = self.player.lottery_num_role, #opponent player attributes opponent_lottery_num_role=self.group.get_player_by_id(self.player.opponent_groupID).lottery_num_role, ) def before_next_page(self): self.participant.vars['opponent_lottery_num_role'] = self.player.opponent_lottery_num_role self.participant.vars['game_role'] = self.player.game_role class C_waitAllPlayerLottery(WaitPage): pass class C_enumInstructTreatment(Page): form_model = 'player' form_fields = ['diagnostic','treatment','type','subtreatment','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, initial_type = self.group.type_temp, initial_treatment = self.group.treatment_temp, initial_subtreatment = self.group.subtreatment_temp, const_diagnostic_treatment = Constants.diagnostic_treatment ) def before_next_page(self): self.participant.vars['type'] = self.player.type self.participant.vars['treatment'] = self.player.treatment self.participant.vars['subtreatment'] = self.player.subtreatment 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 class C_allTreatmentWaitPage(WaitPage): pass class C_allTreatmentWait(Page): def before_next_page(self): temp_tot_diagnostic = 0 for p in self.group.get_players(): if p.diagnostic == 1: temp_tot_diagnostic += 1 self.group.total_diagnostic = temp_tot_diagnostic class C_EnumInstructSurveyContinue(Page): pass class C_waitPlayerProceed1(Page): def is_displayed(self): return self.player.group_pos_game == 2 or self.player.group_pos_game == 3 or self.player.group_pos_game == 4 class C_waitPlayerProceed1_WaitPage(WaitPage): def is_displayed(self): return self.player.group_pos_game == 2 or self.player.group_pos_game == 3 or self.player.group_pos_game == 4 class C_waitPlayerProceed2(Page): def is_displayed(self): return self.player.group_pos_game == 3 or self.player.group_pos_game == 4 class C_waitPlayerProceed2_WaitPage(WaitPage): def is_displayed(self): return self.player.group_pos_game == 3 or self.player.group_pos_game == 4 page_sequence = [ A_ImportDetails, A_lottery_instructions, A_InputDetails, A_Lottery_WaitPage, A_LotteryResults, B_InputDetails, B_Lottery_WaitPage, B_LotteryResults, C_waitAllPlayerLottery, C_enumInstructTreatment, C_allTreatmentWaitPage, C_allTreatmentWait, C_EnumInstructSurveyContinue, C_waitPlayerProceed1, C_waitPlayerProceed1_WaitPage, C_waitPlayerProceed2, C_waitPlayerProceed2_WaitPage ]