from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Welcome(Page): pass class Instructions(Page): pass class Quiz(Page): form_model = 'player' form_fields = ['quiz1', 'quiz2', 'quiz3'] def error_message(self, values): if values['quiz1'] or values['quiz2'] != 24 or values['quiz3'] != 15: return 'You have to answer all questions correctly.' class Next(Page): pass class StartWaitPage(WaitPage): def is_displayed(self): return not self.player.participant.vars['agreed'] class Groupcall(Page): def is_displayed(self): return self.round_number == 1 class CommWaitPage(WaitPage): def is_displayed(self): return not self.player.participant.vars['agreed'] class Countdown(Page): timeout_seconds = 10 timer_text = 'Time left until communication stage:' def is_displayed(self): return not self.player.participant.vars['agreed'] class Communicate(Page): def is_displayed(self): return not self.player.participant.vars['agreed'] timeout_seconds = 180 timer_text = 'Time left to communicate:' class BargainWaitPage(WaitPage): def is_displayed(self): return not self.player.participant.vars['agreed'] class Offers(Page): def is_displayed(self): return not self.player.participant.vars['agreed'] timeout_seconds = 60 timer_text = 'Time left to make offers:' def vars_for_template(self): if self.player.id_in_group == 1: one = True else: one = False if self.player.id_in_group == 2: two = True else: two = False if self.player.id_in_group == 3: three = True else: three = False return dict( one=one, two=two, three=three ) def js_vars(self): pie = Constants.pie[self.round_number-1] return dict( player_id=self.player.id_in_group, pie=pie ) live_method = 'live_offers' class MidWaitPage(WaitPage): def is_displayed(self): return not self.player.participant.vars['agreed'] after_all_players_arrive = 'set_agreement' class End(Page): def is_displayed(self): return not self.player.participant.vars['agreed'] def vars_for_template(self): pie = Constants.pie[self.round_number] if self.player.id_in_group == 1: one = True else: one = False if self.player.id_in_group == 2: two = True else: two = False if self.player.id_in_group == 3: three = True else: three = False return dict( one=one, two=two, three=three, payoff1=self.group.get_player_by_id(1).final_share, payoff2=self.group.get_player_by_id(2).final_share, payoff3=self.group.get_player_by_id(3).final_share, pie=pie ) def before_next_page(self): if self.group.agreement: self.player.participant.vars['agreed'] = True self.player.payoff = self.player.final_share else: self.player.payoff = 0 class Return(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): total_payoff = sum(p.payoff for p in self.player.in_all_rounds()) showup = Constants.participation_fee return dict( earning=total_payoff+showup ) class General(Page): form_model = 'player' form_fields = ['cubicle', 'gender', 'age', 'nationality', 'study'] class SimpleWaitPage(WaitPage): pass class Friends(Page): form_model = 'player' form_fields = ['friends'] class Guess(Page): form_model = 'player' form_fields = ['guess'] class Comp(Page): form_model = 'player' form_fields = ['competetiveness'] def before_next_page(self): others = self.player.get_others_in_group() if others[0].cubicle % 2 == 0: gender1 = 1 else: gender1 = 0 if others[1].cubicle % 2 == 0: gender2 = 1 else: gender2 = 0 if gender1 + gender2 == 1 and self.player.guess == 1: self.player.payoff = 1 if gender1 + gender2 == 2 and self.player.guess == 2: self.player.payoff = 1 if gender1 + gender2 == 0 and self.player.guess == 3: self.player.payoff = 1 class Compe(Page): form_model = 'player' form_fields = ['competetition'] class Risk(Page): form_model = 'player' form_fields = ['risk'] class Time(Page): form_model = 'player' form_fields = ['time'] class Intent(Page): form_model = 'player' form_fields = ['intentions'] class Alt(Page): form_model = 'player' form_fields = ['altruism'] class Bottle(Page): form_model = 'player' form_fields = ['bottle'] class Pun(Page): form_model = 'player' form_fields = ['punish'] class Experiment(Page): form_model = 'player' form_fields = ['heard', 'content', 'aim', 'understand', 'time_pressure', 'enjoy'] class End(Page): pass page_sequence = [MyPage, ResultsWaitPage, Results]