from otree.api import * c = Currency doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'Dictator' players_per_group = None num_rounds = 1 amount = c(10) ENDOWMENT = c(10) participation_fee = c(0) class Subsession(BaseSubsession): pass class Group(BaseGroup): kept = models.CurrencyField( doc="""Amount Player1 decided to keep for herself""", min=0, max=Constants.ENDOWMENT, label="The amount I give to the other player", ) kept2 = models.CurrencyField( doc="""Amount Player1 decided to keep for herself in the second round""", min=0, max=Constants.ENDOWMENT, label="The amount I give to the other player", ) class Player(BasePlayer): Gender = models.IntegerField(label='Please select your gender', choices=[[1, "Male"], [2, "Female"], [3, "Non-binary"], [4, "Prefer not to answer"]], widget=widgets.RadioSelect, initial=0) Age = models.IntegerField(label='Please enter your age', min=16, max=99) Education = models.IntegerField(label='Please select your highest level of education you attained', choices=[[1, "High School"], [2, "Technical or vocational training"], [3, "Associate degree"], [4, "Bachelor's degree"], [5, "Master's degree"], [6, "PhD"], [7, "Other"]], widget=widgets.RadioSelect, initial=0) Employment = models.IntegerField( label='What is your primary employment status?" ', choices=[[1, "Full-time employed"], [2, "Part-time employed"], [3, "Unemployed"], [4, "Student"], [5, "Other"]], widget=widgets.RadioSelect, initial=0) Mode = models.IntegerField(label='Please rate your current mood from 1-5, where 1 is "Completely unhappy" and 5 is "Completely happy" ', choices=[[1, "Completely unhappy"], [2, "Somewhat unhappy"], [3, "Neutral"], [4, "Somewhat happy"], [5, "Completely happy"]], widget=widgets.RadioSelect, initial=0) Email = models.StringField(label='Please indicate your email address (this will be solely used for the purpose of reaching you out in case you win the lottery.)') #Functions def set_payoffs1(group: Group): p1 = group.get_player_by_id(1) p1.payoff = 10 - group.kept def set_payoffs2(group: Group): p1 = group.get_player_by_id(1) p1.payoff = 10 - group.kept2 # PAGES class a_Introduction(Page): pass class ab_Assignment(Page): pass class ba_Player1(Page): form_model = 'group' form_fields = ['kept'] class ResultsWaitPage(WaitPage) : after_all_players_arrive = 'set_payoffs1' class ca_Results(Page) : @staticmethod def vars_for_template(player: Player): group = player.group p1 = group.get_player_by_id(1) return dict( payoff1 = p1.payoff,) class cb_Feedback_Proposer(Page) : pass class d_Introduction(Page): pass class e_Offer(Page): form_model = 'group' form_fields = ['kept2'] class ResultsWaitPage2(WaitPage): after_all_players_arrive = 'set_payoffs2' class f_Results2(Page): @staticmethod def vars_for_template(player: Player): group = player.group return dict(offer=Constants.ENDOWMENT - group.kept2) class g_Survey(Page): form_model = 'player' form_fields = ['Gender', 'Age', 'Education', 'Employment', 'Mode', 'Email'] class h_Endpage(Page) : pass page_sequence = [a_Introduction, ab_Assignment, ba_Player1, ResultsWaitPage, ca_Results, cb_Feedback_Proposer, e_Offer, ResultsWaitPage2, f_Results2, g_Survey, h_Endpage]