from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants class Wait(WaitPage): def after_all_players_arrive(self): p1 = self.group.get_player_by_id(1) p2 = self.group.get_player_by_id(2) p3 = self.group.get_player_by_id(3) p1.role_saved = 'Person1' p2.role_saved = 'Person2' p3.role_saved = 'Person3' #class Name(Page): # def is_displayed(self): # return self.subsession.round_number == 1 # form_model = models.Player # form_fields = ['ppnr', 'name', 'age', 'gender', 'study'] #class Wait2(WaitPage): # def is_displayed(self): # return self.subsession.round_number ==1 class Introduction(Page): timeout_seconds = 120 def is_displayed(self): return self.subsession.round_number == 1 def vars_for_template(self): p1 = self.group.get_player_by_id(1) p2 = self.group.get_player_by_id(2) p3 = self.group.get_player_by_id(3) p1_name = p1.name p2_name = p2.name p3_name = p3.name if self.player.role_saved == "Person1": role = "Person 1" elif self.player.role_saved == "Person2": role = "Person 2" else: role = "Person 3" return {'role': role, 'p1_name': p1_name, 'p2_name': p2_name, 'p3_name': p3_name} class quiz(Page): timeout_seconds = 120 def is_displayed(self): return self.subsession.round_number == 1 form_model = models.Player form_fields = ['quiz_1', 'quiz_2', 'quiz_3', 'quiz_4'] #def error_message(self, values): # print('values is', values) # if values["quiz_1"] != "3 Persons" or values["quiz_2"] != "10 points" or values["quiz_3"] != \ # "Then no one will keep any points." or values["quiz_4"] != \ # "Then all group members will keep their points.": # return 'You gave at least one incorrect answer. You have to answer all four quiz questions correctly to ' \ # 'start with the task. If you have any questions about the task, you can ask the experimenter.' class Decision(Page): timeout_seconds = 120 form_model = models.Player form_fields = ['volunteer'] def before_next_page(self): if self.timeout_happened: self.player.study = "no choice" class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class Results(Page): timeout_seconds = 120 def vars_for_template(self): p1 = self.group.get_player_by_id(1) p2 = self.group.get_player_by_id(2) p3 = self.group.get_player_by_id(3) if p1.volunteer == True: p1_choice = 'gave up points for the group' else: p1_choice = 'did not give up points for the group' if p2.volunteer == True: p2_choice = 'gave up points for the group' else: p2_choice = 'did not give up points for the group' if p3.volunteer == True: p3_choice = 'gave up points for the group' else: p3_choice = 'did not give up points for the group' if self.player.role_saved == "Person1": role = "Person 1" elif self.player.role_saved == "Person2": role = "Person 2" else: role = "Person 3" return {'role': role, 'p1_choice': p1_choice, 'p2_choice': p2_choice, 'p3_choice': p3_choice, 'num_volunteers': len([ p for p in self.group.get_players() if p.volunteer])} class motives(Page): timeout_seconds = 120 def is_displayed(self): return self.subsession.round_number == Constants.num_rounds form_model = models.Player form_fields = ['motive_1', 'motive_2', 'motive_3', 'motive_4'] page_sequence = [Wait, #Name, #Wait2, Introduction, quiz, Decision, ResultsWaitPage, Results, motives]