from otree.api import * import random doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'results' players_per_group = 2 num_rounds = 1 class Subsession(BaseSubsession): pass def creating_session(subsession): if subsession.session.vars.get('group_matrix'): group_matrix = subsession.session.vars['group_matrix'] subsession.set_group_matrix(group_matrix) for player in subsession.get_players(): # set treatment from session config, if not set before if player.participant.vars.get('treatment') is None: player.treatment = subsession.session.config['treatment'] player.participant.vars['treatment'] = player.treatment else: player.treatment = player.participant.vars['treatment'] # set types by group ids, if not grouped before if player.participant.vars.get('type') is None: if player.id_in_group == 1: player.type = "A" if player.id_in_group == 2: player.type = "B" player.participant.vars['type'] = player.type else: player.type = player.participant.vars['type'] class Group(BaseGroup): pass class Player(BasePlayer): payoff_part = models.IntegerField() participant_save = models.StringField() treatment = models.StringField() type = models.StringField() bank_account = models.LongStringField() # PAGES class ResultsWaitPage(WaitPage): def after_all_players_arrive(group: Group): players = group.get_players() player_A = [p for p in players if p.type == "A"][0] player_B = [p for p in players if p.type == "B"][0] payoff_part = random.choice([1, 2]) for player in [player_A, player_B]: player.payoff_part = payoff_part if player.payoff_part == 1: player.payoff = player.participant.vars['payoffs']['p1'] if player.payoff_part == 2: player.payoff = player.participant.vars['payoffs']['p2'] player.participant_save = str(player.participant.vars) class Results(Page): def vars_for_template(player: Player): return { 'pvars': player.participant.vars } class BankAccount(Page): form_fields = ['bank_account'] form_model = 'player' def is_displayed(player: Player): bank_shown = player.subsession.session.config.get("bank_acc_screen_show") if bank_shown: return True else: return False class Finished(Page): pass page_sequence = [ResultsWaitPage, Results, Finished]