from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import statistics class Final(Page): def is_displayed(self): return True class Instructions(Page): def vars_for_template(self): return { 'round_number': self.player.round_number, 'player_colour': self.player.participant.vars['colour'], } class Info(Page): form_model = 'player' form_fields = ['name'] class Assignment(Page): def vars_for_template(self): return { 'treatment_indicator': self.player.participant.vars['treatment_indicator'], } class Colour(Page): def vars_for_template(self): return { 'treatment_colour': self.player.participant.vars['colour'], } class MakingGroups(WaitPage): wait_for_all_groups = True def after_all_players_arrive(self): self.subsession.do_my_shuffle() class Offer(Page): form_model = 'group' form_fields = ['amount_offered'] def is_displayed(self): return self.player.id_in_group == 1 #timeout_seconds = 600 def vars_for_template(self): return { 'partner_colour': self.player.get_partner().participant.vars['colour'], 'player_colour': self.player.participant.vars['colour'], 'round_number': self.player.round_number } class WaitForProposer(WaitPage): pass class Accept(Page): form_model = 'group' form_fields = ['offer_accepted'] def is_displayed(self): return self.player.id_in_group == 2 def vars_for_template(self): return { 'partner_colour': self.player.get_partner().participant.vars['colour'], 'player_colour': self.player.participant.vars['colour'], 'round_number': self.player.round_number } class AcceptStrategy(Page): form_model = 'group' form_fields = ['response_{}'.format(int(i)) for i in Constants.offer_choices] def is_displayed(self): return False class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class Results(Page): def vars_for_template(self): return { 'partner_colour': self.player.get_partner().participant.vars['colour'], 'player_colour': self.player.participant.vars['colour'], 'round_number': self.player.round_number } def before_next_page(self): return self.player.vars_dump() class FinalResultsWaitPage(WaitPage): wait_for_all_groups = True def is_displayed(self): return self.round_number == Constants.num_rounds #def after_all_players_arrive(self): # self.subsession.collate_offers() class FinalResults(Page): def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): return { 'final_payment': c(100) + self.participant.payoff } class Buffer(Page): #wait_for_all_groups = True def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): return { 'rejected_offer_values_treatment': statistics.mean(self.session.vars['rejected_offer_values_treatment']), 'accepted_offer_values_treatment': statistics.mean(self.session.vars['accepted_offer_values_treatment']), 'accepted_offer_values_control': statistics.mean(self.session.vars['accepted_offer_values_control']), 'rejected_offer_values_control': statistics.mean(self.session.vars['rejected_offer_values_control']), 'offer_control': statistics.mean(self.session.vars['offer_control']), 'offer_treatment': statistics.mean(self.session.vars['offer_treatment']), 'offer_ingroup': statistics.mean(self.session.vars['offer_ingroup']), 'offer_outgroup': statistics.mean(self.session.vars['offer_outgroup']), 'accepted_offer_values_treatment_ingroup':statistics.mean(self.session.vars['accepted_offer_values_treatment_ingroup']), 'accepted_offer_values_treatment_outgroup': statistics.mean(self.session.vars['accepted_offer_values_treatment_outgroup']) } class graph_1(Page): def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): return { 'rejected_offer_values_treatment': statistics.mean(self.session.vars['rejected_offer_values_treatment']), 'accepted_offer_values_treatment': statistics.mean(self.session.vars['accepted_offer_values_treatment']), 'accepted_offer_values_control': statistics.mean(self.session.vars['accepted_offer_values_control']), 'rejected_offer_values_control': statistics.mean(self.session.vars['rejected_offer_values_control']), 'offer_control': statistics.mean(self.session.vars['offer_control']), 'offer_treatment': statistics.mean(self.session.vars['offer_treatment']), 'offer_ingroup': statistics.mean(self.session.vars['offer_ingroup']), 'offer_outgroup': statistics.mean(self.session.vars['offer_outgroup']), 'accepted_offer_values_treatment_ingroup': statistics.mean( self.session.vars['accepted_offer_values_treatment_ingroup']), 'accepted_offer_values_treatment_outgroup': statistics.mean( self.session.vars['accepted_offer_values_treatment_outgroup']) } class graph_2(Page): def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): return { 'rejected_offer_values_treatment': statistics.mean(self.session.vars['rejected_offer_values_treatment']), 'accepted_offer_values_treatment': statistics.mean(self.session.vars['accepted_offer_values_treatment']), 'accepted_offer_values_control': statistics.mean(self.session.vars['accepted_offer_values_control']), 'rejected_offer_values_control': statistics.mean(self.session.vars['rejected_offer_values_control']), 'offer_control': statistics.mean(self.session.vars['offer_control']), 'offer_treatment': statistics.mean(self.session.vars['offer_treatment']), 'offer_ingroup': statistics.mean(self.session.vars['offer_ingroup']), 'offer_outgroup': statistics.mean(self.session.vars['offer_outgroup']), 'accepted_offer_values_treatment_ingroup': statistics.mean( self.session.vars['accepted_offer_values_treatment_ingroup']), 'accepted_offer_values_treatment_outgroup': statistics.mean( self.session.vars['accepted_offer_values_treatment_outgroup']) } class graph_3(Page): def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): return { 'rejected_offer_values_treatment': statistics.mean(self.session.vars['rejected_offer_values_treatment']), 'accepted_offer_values_treatment': statistics.mean(self.session.vars['accepted_offer_values_treatment']), 'accepted_offer_values_control': statistics.mean(self.session.vars['accepted_offer_values_control']), 'rejected_offer_values_control': statistics.mean(self.session.vars['rejected_offer_values_control']), 'offer_control': statistics.mean(self.session.vars['offer_control']), 'offer_treatment': statistics.mean(self.session.vars['offer_treatment']), 'offer_ingroup': statistics.mean(self.session.vars['offer_ingroup']), 'offer_outgroup': statistics.mean(self.session.vars['offer_outgroup']), 'accepted_offer_values_treatment_ingroup': statistics.mean( self.session.vars['accepted_offer_values_treatment_ingroup']), 'accepted_offer_values_treatment_outgroup': statistics.mean( self.session.vars['accepted_offer_values_treatment_outgroup']) } page_sequence = [Instructions, MakingGroups, Offer, WaitForProposer, Accept, AcceptStrategy, ResultsWaitPage, Results, FinalResultsWaitPage, FinalResults, #Buffer, graph_1, graph_2, graph_3 ]