from ._builtin import Page, WaitPage from .models import Constants, Group, Subsession class Introduction(Page): def is_displayed(player): return player.round_number == 1 pass class Understanding_question(Page): form_model = 'player' form_fields = ['answer1', 'answer2', 'answer3'] def error_message(self, values): solutions = dict(answer1=10, answer2=80, answer3=60) if values != solutions: return 'One or more answers were incorrect.' def is_displayed(player): return player.round_number == 1 class Offer(Page): form_model = 'group' form_fields = ['sent'] def is_displayed(self): return self.player.id_in_group == 1 class ResultsWaitPage(WaitPage): # wait_for_all_groups = True def after_all_players_arrive(self): self.group.set_payoffs() def vars_for_template(self): if self.player.id_in_group == 2: body_text = "You are participant 2. Waiting for participant 1 to decide." else: body_text = 'Please wait' return {'body_text': body_text} class Decision(Page): form_model = 'group' form_fields = ['decision'] def is_displayed(self): return self.player.id_in_group == 2 class ResultsWaitPage(WaitPage): # wait_for_all_groups = True def after_all_players_arrive(self): self.group.set_payoffs() def vars_for_template(self): if self.player.id_in_group == 1: body_text = "You are participant 1. Waiting for participant 2 to decide." else: body_text = 'Please wait' return {'body_text': body_text} class Results(Page): pass class Results_questions(Page): def is_displayed(player): return player.round_number == 1 pass class ResultsWaitPage(WaitPage): wait_for_all_groups = True def after_all_players_arrive(subsession: Subsession): # print("you are here!!!!!!") overall = [] accept = [] payoffs = [] for g in subsession.get_groups(): overall.append(g.sent) try: if g.decision == 'Accept': accept.append(g.sent) payoffs.append(100+10 - int(str(g.sent).split(" ")[0])) payoffs.append(10+int(str(g.sent).split(" ")[0])) else: payoffs.append(10) payoffs.append(10) except: print("none") # print("Payoffs") # print(payoffs) average_sent = sum(overall) / len(overall) average_accept = 0 if len(accept) == 0: average_accept = 0 else: average_accept = sum(accept) / len(accept) for g in subsession.get_groups(): g.average_accept = int(str(average_accept).split(" ")[0]) g.average_overall = int(str(average_sent).split(" ")[0]) try: for i, p in enumerate(subsession.get_players()): # print(p) # print(i) # print(payoffs[i]) p.payoff = payoffs[i] except: print("Error!!") class Results_average(Page): pass class Survey(Page): form_model = 'player' form_fields = ['age', 'gender', 'nationality', 'education', 'comment'] def is_displayed(player): return player.round_number == 5 page_sequence = [ Introduction, Understanding_question, Results_questions, Offer, ResultsWaitPage, Decision, ResultsWaitPage, Results, Results_average, Survey]