from otree.api import * from constants import * doc = """Family Groupings and Endowment Revelation for Generation 1""" class C(BaseConstants): NAME_IN_URL = 'C_FamilyGroupings_Gen1_D' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): Ana_generation = models.IntegerField() Ana_own_id = models.IntegerField() Ana_family_assignment = models.StringField() Ana_GroupID = models.IntegerField() Ana_EndowmentType = models.IntegerField() Ana_Endowment = models.IntegerField() Ana_RankingType = models.IntegerField() my_order = models.IntegerField() Ana_Mmb1_id = models.IntegerField() Ana_Mmb2_id = models.IntegerField() Ana_Mmb3_id = models.IntegerField() Ana_fname_Mmb1 = models.StringField() Ana_fname_Mmb2 = models.StringField() Ana_fname_Mmb3 = models.StringField() Ana_Edmt_Mmb1 = models.IntegerField() Ana_Edmt_Mmb2 = models.IntegerField() Ana_Edmt_Mmb3 = models.IntegerField() Ana_Att1 = models.IntegerField( label="", choices=[ (1, 'most'), (2, 'least'), ], blank=True, ) Ana_Att1_attempts = models.IntegerField(initial=0) class Intro_startDT(Page): @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 1 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): return { 'Ana_generation': player.participant.Ana_generation, 'round_number': player.round_number, 'DemoRound_Payoff': player.participant.DemoRound_Payoff, 'Ana_demo_endowment': player.participant.Ana_demo_endowment, 'Ana_demo_contribution': player.participant.Ana_demo_contribution, 'Ana_demo_group_id': player.participant.Ana_demo_group_id, } class WaitForinfoRevl1(WaitPage): wait_for_all_groups = True @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 1 and player.participant.vars.get('state') == "active") class GennFamily0(Page): @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 1 and player.participant.vars.get('state') == "active") class GennFamily1(Page): @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 1 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): players_in_gen1 = [p for p in player.subsession.get_players() if p.participant.vars.get('Ana_generation') == 1 and p.participant.vars.get('state') == "active"] assigned_families = [p.participant.vars.get('Ana_family_assignment') for p in sorted(players_in_gen1, key=lambda p: p.participant.vars.get('Ana_own_id', 0))] return { 'assigned_families': assigned_families, 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.Ana_family_assignment, 'Ana_EndowmentType': player.participant.vars.get('Ana_EndowmentType'), 'Ana_Endowment': player.participant.vars.get('Ana_Endowment'), } class GennFamily2(Page): @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 1 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): players_in_gen1 = [p for p in player.subsession.get_players() if p.participant.vars.get('Ana_generation') == 1 and p.participant.vars.get('state') == "active"] num_players = len(players_in_gen1) return { 'Ana_GroupID': player.participant.vars.get('Ana_GroupID'), 'player_ids': [player.participant.vars.get('Ana_Mmb1_id'), player.participant.vars.get('Ana_Mmb2_id'), player.participant.vars.get('Ana_Mmb3_id')], 'display_order': [1, 2, 3], 'player_names': [player.participant.vars.get('Ana_fname_Mmb1'), player.participant.vars.get('Ana_fname_Mmb2'), player.participant.vars.get('Ana_fname_Mmb3')], 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.Ana_family_assignment, 'round_number': player.round_number, 'player_numbers': range(1, num_players + 1), 'MyOrder': player.participant.vars.get('my_order'), } class GennFamily3(Page): timeout_seconds = TIME_TO_SHOWBUTTON @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 1 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): players_in_gen1 = [p for p in player.subsession.get_players() if p.participant.vars.get('Ana_generation') == 1 and p.participant.vars.get('state') == "active"] num_players = len(players_in_gen1) return { 'Ana_GroupID': player.participant.vars.get('Ana_GroupID'), 'player_ids': [player.participant.vars.get('Ana_Mmb1_id'), player.participant.vars.get('Ana_Mmb2_id'), player.participant.vars.get('Ana_Mmb3_id')], 'player_names': [player.participant.vars.get('Ana_fname_Mmb1'), player.participant.vars.get('Ana_fname_Mmb2'), player.participant.vars.get('Ana_fname_Mmb3')], 'player_numbers': range(1, num_players + 1), 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.Ana_family_assignment, 'round_number': player.round_number, 'Ana_EndowmentType': player.participant.vars.get('Ana_EndowmentType'), 'Ana_Endowment': player.participant.vars.get('Ana_Endowment'), 'Ana_RankingType': player.participant.vars.get('Ana_RankingType'), } class GennFamily3_withbtn(Page): form_model = 'player' form_fields = ['Ana_Att1', 'Ana_Att1_attempts'] @staticmethod def is_displayed(player): return (player.round_number == C.NUM_ROUNDS and player.participant.vars.get('Ana_generation') == 1 and player.participant.vars.get('state') == "active") @staticmethod def vars_for_template(player): players_in_gen1 = [p for p in player.subsession.get_players() if p.participant.vars.get('Ana_generation') == 1 and p.participant.vars.get('state') == "active"] num_players = len(players_in_gen1) return { 'Ana_GroupID': player.participant.vars.get('Ana_GroupID'), 'player_ids': [player.participant.vars.get('Ana_Mmb1_id'), player.participant.vars.get('Ana_Mmb2_id'), player.participant.vars.get('Ana_Mmb3_id')], 'player_names': [player.participant.vars.get('Ana_fname_Mmb1'), player.participant.vars.get('Ana_fname_Mmb2'), player.participant.vars.get('Ana_fname_Mmb3')], 'player_numbers': range(1, num_players + 1), 'Ana_generation': player.participant.Ana_generation, 'Ana_own_id': player.participant.Ana_own_id, 'Ana_family_assignment': player.participant.Ana_family_assignment, 'round_number': player.round_number, 'Ana_EndowmentType': player.participant.vars.get('Ana_EndowmentType'), 'Ana_Endowment': player.participant.vars.get('Ana_Endowment'), 'Ana_RankingType': player.participant.vars.get('Ana_RankingType'), 'MyOrder': player.participant.vars.get('my_order'), } page_sequence = [ Intro_startDT, WaitForinfoRevl1, GennFamily0, GennFamily1, GennFamily2, GennFamily3, GennFamily3_withbtn, ]