from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Intro(Page): pass class DelegationChoice(Page): form_model = 'player' form_fields = ['delegation_choice'] def is_displayed(self): return self.player.id_in_group == 1 class FirstWaitPage(WaitPage): def is_displayed(self): return self.player.id_in_group == 2 title_text = "A's decision" body_text = "Please wait for A to decide whether he delegates or not." class DistributionChoice(Page): form_model = 'player' form_fields = ['distribution_choice'] def is_displayed(self): if self.group.get_player_by_id(1).delegation_choice: return self.player.id_in_group == 2 else: return self.player.id_in_group == 1 def vars_for_template(self): delegation = self.group.get_player_by_id(1).delegation_choice return dict( delegation = delegation, ) class NotDelegationPage(Page): form_model = 'player' def is_displayed(self): if not self.group.get_player_by_id(1).delegation_choice: return self.player.id_in_group == 2 class PunishmentChoice(Page): form_model = 'player' form_fields = ['request_punishment_noD_fair', 'request_punishment_noD_unfair', 'request_punishment_D_fair', 'request_punishment_D_unfair'] def is_displayed(self): return self.player.id_in_group >= 3 class PunishmentLevel_noD_fair(Page): form_model = 'player' form_fields = ['punishment_A_noD_fair', 'punishment_B_noD_fair', 'punishment_C_noD_fair'] def is_displayed(self): if self.player.request_punishment_noD_fair: return self.player.id_in_group >= 3 def error_message(self, values): print('values is', values) if values['punishment_A_noD_fair'] + values['punishment_B_noD_fair'] + values['punishment_C_noD_fair'] > 7: return 'You can subtract maximum 7 points among all players in each scenario' class PunishmentLevel_noD_unfair(Page): form_model = 'player' form_fields = ['punishment_A_noD_unfair', 'punishment_B_noD_unfair', 'punishment_C_noD_unfair'] def is_displayed(self): if self.player.request_punishment_noD_unfair: return self.player.id_in_group >= 3 def error_message(self, values): print('values is', values) if values['punishment_A_noD_unfair'] + values['punishment_B_noD_unfair'] + values['punishment_C_noD_unfair'] > 7: return 'You can subtract maximum 7 points among all players in each scenario' class PunishmentLevel_D_fair(Page): form_model = 'player' form_fields = ['punishment_A_D_fair', 'punishment_B_D_fair', 'punishment_C_D_fair'] def is_displayed(self): if self.player.request_punishment_D_fair: return self.player.id_in_group >= 3 def error_message(self, values): print('values is', values) if values['punishment_A_D_fair'] + values['punishment_B_D_fair'] + values['punishment_C_D_fair'] > 7: return 'You can subtract maximum 7 points among all players in each scenario' class PunishmentLevel_D_unfair(Page): form_model = 'player' form_fields = ['punishment_A_D_unfair', 'punishment_B_D_unfair', 'punishment_C_D_unfair'] def is_displayed(self): if self.player.request_punishment_D_unfair: return self.player.id_in_group >= 3 def error_message(self, values): print('values is', values) if values['punishment_A_D_unfair'] + values['punishment_B_D_unfair'] + values['punishment_C_D_unfair'] > 7: return 'You can subtract maximum 7 points among all players in each scenario' class ResultsWaitPage(WaitPage): after_all_players_arrive = 'set_payoffs' title_text = "Steps completed" body_text = "Please wait for all the other players to finish theirs. You will know your payoff immediately after." class Results(Page): pass page_sequence = [Intro, DelegationChoice, FirstWaitPage, DistributionChoice, NotDelegationPage, PunishmentChoice, PunishmentLevel_noD_fair, PunishmentLevel_noD_unfair, PunishmentLevel_D_fair, PunishmentLevel_D_unfair, ResultsWaitPage, Results]