from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Welcome(Page): pass class Consent(Page): form_model = 'player' form_fields = ['ProlificID', 'accept'] class Introduction(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot def before_next_page(self): if self.player.lottery_draw <= self.player.computer_n: self.player.lottery_win = True else: self.player.lottery_win = False class Part1Instructions(Page): def is_displayed(self): return self.player.accept form_model = 'player' form_fields = ['q1', 'q2', 'q3', 'q4'] def before_next_page(self): if self.session.config['G3treatment'] == 'G3-Motiv' and self.player.id_in_group == 1: self.player.check_answers_motiv() else: self.player.check_answers_nomotiv() class Part1Incorrect(Page): def is_displayed(self): return self.player.accept and self.player.answers_correct < 4 form_model = 'player' form_fields = ['q1a', 'q2a', 'q3a', 'q4a'] def before_next_page(self): if self.session.config['G3treatment'] == 'G3-Motiv' and self.player.id_in_group == 1: self.player.check_answers_motiv_a() else: self.player.check_answers_nomotiv_a() class Part1Answers(Page): def is_displayed(self): return self.player.accept and self.player.answers_correct < 4 and self.player.answers_correct_a < 4 class PrePart1(Page): def is_displayed(self): return self.player.accept class Part1(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot form_model = 'player' form_fields = ['more_info_part1'] class Part1Info(Page): def is_displayed(self): return self.player.accept and self.player.more_info_part1 and not Constants.pre_pilot form_model = 'player' form_fields = ['more_info_report'] class Part1NoInfo(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot form_model = 'player' form_fields = ['posterior_belief'] def before_next_page(self): # whether simple lottery is played or outcome lottery is played if self.player.computer_n >= self.player.posterior_belief: self.player.lottery_played = True else: self.player.lottery_played = False # if simple lottery is played, win or lose if self.player.lottery_draw <= self.player.computer_n: self.player.lottery_win = True else: self.player.lottery_win = False # if outcome lottery is played, win or lose if self.player.lottery_outcome_draw <= Constants.outcome_part1: self.player.lottery_outcome_win = True else: self.player.lottery_outcome_win = False class Confirm(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot def vars_for_template(self): return {'inverse_belief': 100 - self.player.posterior_belief, } class Part1N1(Page): def is_displayed(self): return self.player.accept and self.player.id_in_group == 3 and self.player.random_order == 1 form_model = 'player' form_fields = ['norm1_pun_EP', 'norm1_nopun_EP', 'norm1_pun_CP', 'norm1_nopun_CP'] class Part1N12(Page): def is_displayed(self): return self.player.accept and self.player.id_in_group == 3 and self.player.random_order == 2 form_model = 'player' form_fields = ['norm1_pun_EP', 'norm1_nopun_EP', 'norm1_pun_CP', 'norm1_nopun_CP'] class Part1N2(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot \ and self.player.id_in_group == 3 and self.player.random_order == 1 form_model = 'player' form_fields = ['norm2_pun_EP', 'norm2_nopun_EP', 'norm2_pun_CP', 'norm2_nopun_CP'] class Part1N22(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot \ and self.player.id_in_group == 3 and self.player.random_order == 2 form_model = 'player' form_fields = ['norm2_pun_EP', 'norm2_nopun_EP', 'norm2_pun_CP', 'norm2_nopun_CP'] class Part1N3(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot \ and self.player.id_in_group == 3 form_model = 'player' form_fields = ['more_info_norm'] class Part1N3Info(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot \ and self.player.id_in_group == 3 and self.player.more_info_norm form_model = 'player' form_fields = ['more_info_norm_report'] class Part1N3NoInfo(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot \ and self.player.id_in_group == 3 and self.player.random_order == 1 form_model = 'player' form_fields = ['emp_norm_pun_EP', 'emp_norm_nopun_EP'] def before_next_page(self): # whether simple lottery is played or outcome lottery is played (pun) if self.player.computer_n >= self.player.emp_norm_pun_EP: self.player.lottery_played_norm_pun = True else: self.player.lottery_played_norm_pun = False # if simple lottery is played, win or lose if self.player.lottery_draw <= self.player.computer_n: self.player.lottery_win_norm_pun = True else: self.player.lottery_win_norm_pun = False # if outcome lottery is played, win or lose if self.player.lottery_outcome_draw <= Constants.outcome_norm_pun: self.player.lottery_outcome_win_norm_pun = True else: self.player.lottery_outcome_win_norm_pun = False # whether simple lottery is played or outcome lottery is played (no_pun) if self.player.computer_n >= self.player.emp_norm_nopun_EP: self.player.lottery_played_norm_nopun = True else: self.player.lottery_played_norm_nopun = False # if simple lottery is played, win or lose if self.player.lottery_draw <= self.player.computer_n: self.player.lottery_win_norm_nopun = True else: self.player.lottery_win_norm_nopun = False # if outcome lottery is played, win or lose if self.player.lottery_outcome_draw <= Constants.outcome_norm_nopun: self.player.lottery_outcome_win_norm_nopun = True else: self.player.lottery_outcome_win_norm_nopun = False class Part1N3NoInfo2(Page): def is_displayed(self): return self.player.accept and not Constants.pre_pilot \ and self.player.id_in_group == 3 and self.player.random_order == 2 form_model = 'player' form_fields = ['emp_norm_pun_EP', 'emp_norm_nopun_EP'] def before_next_page(self): # whether simple lottery is played or outcome lottery is played (pun) if self.player.computer_n >= self.player.emp_norm_pun_EP: self.player.lottery_played_norm_pun = True else: self.player.lottery_played_norm_pun = False # if simple lottery is played, win or lose if self.player.lottery_draw <= self.player.computer_n: self.player.lottery_win_norm_pun = True else: self.player.lottery_win_norm_pun = False # if outcome lottery is played, win or lose if self.player.lottery_outcome_draw <= Constants.outcome_norm_pun: self.player.lottery_outcome_win_norm_pun = True else: self.player.lottery_outcome_win_norm_pun = False # whether simple lottery is played or outcome lottery is played (no_pun) if self.player.computer_n >= self.player.emp_norm_nopun_EP: self.player.lottery_played_norm_nopun = True else: self.player.lottery_played_norm_nopun = False # if simple lottery is played, win or lose if self.player.lottery_draw <= self.player.computer_n: self.player.lottery_win_norm_nopun = True else: self.player.lottery_win_norm_nopun = False # if outcome lottery is played, win or lose if self.player.lottery_outcome_draw <= Constants.outcome_norm_nopun: self.player.lottery_outcome_win_norm_nopun = True else: self.player.lottery_outcome_win_norm_nopun = False class TaskA(Page): def is_displayed(self): return self.player.accept and self.player.id_in_group == 1 form_model = 'player' form_fields = ['impose_fee'] def vars_for_template(self): return dict( image_path=f"instructions/game{self.group.random_game}_fee_nofee_text.png" ) class TaskB(Page): def is_displayed(self): return self.player.accept and self.player.id_in_group == 2 form_model = 'player' def get_form_fields(self): if self.player.random_order == 1: return ['project_choice_pun', 'project_choice_nopun'] else: return ['project_choice_nopun', 'project_choice_pun'] class TaskC(Page): def is_displayed(self): return self.player.accept and self.player.id_in_group == 3 # class PreSurvey(Page): # def is_displayed(self): # return self.player.accept and not self.player.id_in_group == 3 class Survey(Page): def is_displayed(self): return self.player.accept form_model = 'player' form_fields = ['gender', 'age', 'education', 'religiosity', 'income', 'political', 'open_ended', 'open_ended_B', 'feedback'] class End(Page): def is_displayed(self): return self.player.accept page_sequence = [ Welcome, Consent, Introduction, Part1Instructions, Part1Incorrect, Part1Answers, PrePart1, Part1, Part1Info, Part1NoInfo, Confirm, Part1N1, Part1N12, Part1N2, Part1N22, Part1N3, Part1N3Info, Part1N3NoInfo, Part1N3NoInfo2, TaskA, TaskB, # TaskB2, TaskC, # PreSurvey, Survey, End ]