from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class AssignRole(Page): def before_next_page(self): for other_player in self.player.get_others_in_group(): if other_player.is_p1 and (other_player.offer != None) and not other_player.partner_id: self.player.partner_id = other_player.id_in_group other_player.partner_id = self.player.id_in_group self.player.is_p1 = False return self.player.is_p1 = True class P1Page(Page): def is_displayed(self): return self.player.is_p1 form_model = 'player' form_fields = ['offer'] class P2Page(Page): def is_displayed(self): return not self.player.is_p1 form_model = 'player' form_fields = ['response'] def vars_for_template(self): me = self.player partner = self.group.get_player_by_id(me.partner_id) tripled_amount = partner.offer * Constants.multiplier return dict( partner = self.player.get_partner(), tripled_amount = tripled_amount ) def before_next_page(self): me = self.player partner = self.group.get_player_by_id(me.partner_id) # calculate payoff here: me.payoff = partner.offer * Constants.multiplier - me.response partner.payoff = Constants.endowment - partner.offer + me.response class Results(Page): pass page_sequence = [AssignRole, P1Page, P2Page, Results]