from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class Introduction(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class VPInformationen(Page): form_model = 'player' timeout_seconds = 60 form_fields = ['vp_alter', 'vp_gender', 'vp_stunden'] def is_displayed(self): return self.round_number == 1 def before_next_page(self): lettersAndDigits = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" self.player.vp_code = self.player.vp_alter + self.player.vp_gender self.participant.vars["vp_code"] = self.player.vp_code self.player.vp_complCode = '' self.player.vp_helpCode = '' for x in range(10): self.player.vp_complCode += random.choice(lettersAndDigits) for x in range(5): self.player.vp_helpCode += random.choice(lettersAndDigits) self.participant.vars["vp_complCode"] = self.player.vp_complCode self.participant.vars["vp_helpCode"] = self.player.vp_helpCode class Codes(Page): form_model = 'player' timeout_seconds = 60 def is_displayed(self): return self.round_number == 1 def vars_for_template(self): if self.round_number == 1: self.participant.vars["vp_complCode"] = self.player.vp_complCode if self.player.vp_stunden == "geld": self.participant.vars["g_gesamt"] = c(4) self.participant.vars["g_teilnahme"] = "geld" else: self.participant.vars["g_gesamt"] = c(0) self.participant.vars["g_teilnahme"] = "vph" return dict() class Round(Page): form_model = 'player' def before_next_page(self): if self.round_number == 1: self.subsession.group_randomly(fixed_id_in_group = False) else: self.subsession.group_like_round(1) class GroupDisWaitPage(WaitPage): wait_for_all_groups = True def after_all_players_arrive(self): self.subsession.set_groups() class DiscussGuess(Page): form_model = 'group' timeout_seconds = 300 def vars_for_template(self): self.player.vp_helpCode = self.participant.vars["vp_helpCode"] allg = [""] avg = [""] if self.round_number > 1: allg = self.session.vars['allg'] avg = self.session.vars['avg'] return dict(allg2 = str(allg).strip('[]'), avg2 = avg) class SubmitGuess(Page): form_model = 'player' form_fields = ['guess'] class GroupWaitPage(WaitPage): wait_for_all_groups = True class ResultsWaitPageCalcGuess(WaitPage): def after_all_players_arrive(self): self.group.set_guess() class GroupWaitPage2(WaitPage): wait_for_all_groups = True class ResultsWaitPageSetP(WaitPage): def after_all_players_arrive(self): self.group.set_payoff() class GroupWaitPage3(WaitPage): wait_for_all_groups = True class ResultsWaitPageDisP(WaitPage): def after_all_players_arrive(self): self.group.dis_payoff() class GroupWaitPage4(WaitPage): wait_for_all_groups = True class GroupResults(Page): form_model = 'player' def vars_for_template(self): guesses = self.participant.vars['guesses'] return dict(guesses2 = str(guesses).strip('[]')) class Results(Page): form_model = 'player' def vars_for_template(self): guesses = [] for g in self.subsession.get_groups(): if g.group_guess <= Constants.guess_max: guesses.append(g.group_guess) sorted_guesses = sorted(guesses) self.session.vars['allg'] = sorted_guesses self.session.vars['avg'] = self.subsession.two_thirds_avg return dict(sorted_guesses = str(sorted_guesses).strip('[]')) def before_next_page(self): #Anghängig von der Nummer der Runden, Übernehmen! par = self.participant if self.round_number == 1: par.vars["g1"] = self.player.p_payoff par.vars["g_gesamt"] += self.player.p_payoff elif self.round_number == 2: par.vars["g2"] = self.player.p_payoff par.vars["g_gesamt"] += self.player.p_payoff elif self.round_number == 3: par.vars["g3"] = self.player.p_payoff par.vars["g_gesamt"] += self.player.p_payoff elif self.round_number == 4: par.vars["g4"] = self.player.p_payoff par.vars["g_gesamt"] += self.player.p_payoff class Expertise(Page): form_model = 'player' form_fields = ['expertise'] def is_displayed(self): return self.round_number == 4 class EndPage(Page): form_model = 'player' def is_displayed(self): return self.round_number == 4 def vars_for_template(self): veriCode = self.participant.vars["vp_complCode"] sicherCode = self.participant.vars["vp_code"] g1 = self.participant.vars["g1"] g2 = self.participant.vars["g2"] g3 = self.participant.vars["g3"] g4 = self.participant.vars["g4"] g_gesamt = self.participant.vars["g_gesamt"] g_teilnahme = self.participant.vars["g_teilnahme"] return dict(veriCode2 = veriCode, sicherCode2 = sicherCode, g1_temp = g1, g2_temp = g2, g3_temp = g3, g4_temp = g4, g_gesamt_temp = g_gesamt, g_teilnahme_temp = g_teilnahme) class Debriefing(Page): form_model = 'player' def is_displayed(self): return self.round_number == 4 page_sequence = [Introduction, VPInformationen, Codes, GroupDisWaitPage, DiscussGuess, SubmitGuess, GroupWaitPage, ResultsWaitPageCalcGuess, GroupWaitPage2, ResultsWaitPageSetP, GroupWaitPage3, ResultsWaitPageDisP, GroupWaitPage4, GroupResults, Results, Expertise, EndPage, Debriefing]