from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Send(Page): form_model = 'group' form_fields = ['sent_amount'] def is_displayed(self): return self.player.id_in_group != 1 class SendBack(Page): form_model = 'group' form_fields = ['sent_back_amount'] def is_displayed(self): return self.player.id_in_group == 1 def vars_for_template(self): return { 'tripled_amount': self.group.sent_amount * Constants.multiplication_factor } def sent_back_amount_choices(self): return currency_range(c(0), self.group.sent_amount * Constants.multiplication_factor, c(1)) class WaitForP1(WaitPage): pass class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): group = self.group players = group.get_players() p1 = group.get_player_by_role('distributor') p2 = group.get_player_by_role('sender') p3 = group.get_player_by_role('sender') p4 = group.get_player_by_role('sender') allocations = [p.sent_amount for p in players] group.total_allocations = sum(allocations) p2.payoff = Constants.endowment - group.sent_amount + group.sent_back_amount p1.payoff = group.sent_amount * Constants.multiplication_factor - group.sent_back_amount p3.payoff = Constants.endowment - group.sent_amount + group.sent_back_amount p4.payoff = Constants.endowment - group.sent_amount + group.sent_back_amount class Results(Page): pass page_sequence = [ Send, WaitForP1, SendBack, ResultsWaitPage, Results, ]