from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .models import Constants class IntroWp(WaitPage): group_by_arrival_time = True def is_displayed(self): return self.subsession.round_number == 1 class WelcomePage(Page): def is_displayed(self): return self.subsession.round_number == 1 form_model = 'player' form_fields = ['experiment_ID'] class Instructions(Page): def is_displayed(self): return self.subsession.round_number == 1 class ExperimentIntroduction(Page): def is_displayed(self): return self.subsession.round_number == 1 class DetermineVoteNumber(Page): def is_displayed(self): return self.subsession.round_number == 1 class StageOneDieRoll(Page): def is_displayed(self): return self.subsession.round_number == 1 class StageOneDieRollEnter(Page): form_model = 'player' form_fields = ['die_rolling'] def is_displayed(self): return self.subsession.round_number == 1 class VoteNumberResultsWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 class VoteNumberResults(Page): def is_displayed(self): return self.subsession.round_number == 1 def vars_for_template(self): return { 'player_in_all_rounds': self.player.in_all_rounds(), } class Election(Page): def is_displayed(self): return self.subsession.round_number == 1 form_model = 'player' form_fields = ['vote_p1', 'vote_p2', 'vote_p3', 'vote_p4'] def error_message(self, values): if self.player.die_rolling < 4 and values['vote_p1'] + values['vote_p2'] + values['vote_p3'] + values['vote_p4']!=1: return "请检查投票数,投票的总数应该等于你所拥有的投票权数" elif 6 > self.player.die_rolling > 4 and values['vote_p1'] + values['vote_p2'] + values['vote_p3'] + values['vote_p4']!=5: return "请检查投票数,投票的总数应该等于你所拥有的投票权数" elif 5 > self.player.die_rolling > 3 and values['vote_p1'] + values['vote_p2'] + values['vote_p3'] + values['vote_p4'] != 3: return "请检查投票数,投票的总数应该等于你所拥有的投票权数" elif self.player.die_rolling > 5 and values['vote_p1'] + values['vote_p2'] + values['vote_p3'] + values['vote_p4'] != 0: return "请检查投票数,投票的总数应该等于你所拥有的投票权数" class ResultsWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 def after_all_players_arrive(self): self.group.set_roles() class VoteResults(Page): def vars_for_template(self): return { 'player_in_all_rounds': self.player.in_all_rounds(), 'total_vote_p1': self.group.total_vote_p1, 'total_vote_p2': self.group.total_vote_p2, 'total_vote_p3': self.group.total_vote_p3, 'total_vote_p4': self.group.total_vote_p4, } def is_displayed(self): return self.subsession.round_number == 1 class DictatorInstruction(Page): def is_displayed(self): return self.subsession.round_number == 1 form_model = 'player' form_fields = ['dictator_leader_offer'] class LeaderOffer(Page): def is_displayed(self): return self.subsession.round_number == 1 form_model = 'player' form_fields = ['dictator_leader_offer'] class DictatorResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_dictator_payoffs() def is_displayed(self): return self.subsession.round_number == 1 class DictatorResults(Page): def vars_for_template(self): return { 'kept': Constants.dictator_endowment - self.player.dictator_leader_offer - self.player.dictator_leader_offer - self.player.dictator_leader_offer, 'real_leader_offer': self.group.real_leader_offer, } class PublicGoodGameWaitPage(WaitPage): pass class PublicGoodInstruction(Page): def is_displayed(self): return self.subsession.round_number == 1 class PublicGoodExample(Page): form_model = 'player' form_fields = ['practice_question5', 'practice_question6', 'practice_question7'] class PublicGoodQuizCheck(Page): form_model = 'player' form_fields = ['practice_question5', 'practice_question6', 'practice_question7'] def is_displayed(self): return self.player.practice_question5 != 16 or self.player.practice_question6 != 16 or self.player.practice_question7 != 18 class PublicGoodLeaderTask(Page): """This page is only for Leader Leader sends message to employee Leader: send a message and choose how much to contribute""" form_model = 'group' form_fields = ['public_good_suggested_amount'] def is_displayed(self): return self.player.in_round(1).is_winner == 1 class PublicGoodEmployeeTask(Page): """This page is only for Employee Employee received the message from leader and make a contribution""" def is_displayed(self): return self.player.in_round(1).is_winner != 1 class PublicGoodContributionWaitPage(WaitPage): pass class PublicGoodContribute(Page): form_model = 'player' form_fields = ['contribution'] class PublicGoodLeaderMessageWaitPage(WaitPage): body_text = "请等待领导者发送信息." def is_displayed(self): return self.player.in_round(1).is_winner != 1 class PublicGoodResultsWaitPage(WaitPage): def is_displayed(self): return self.round_number < Constants.num_rounds def after_all_players_arrive(self): self.group.set_public_good_payoffs() class PublicGoodHistory(Page): def is_displayed(self): return self.round_number < Constants.num_rounds def vars_for_template(self): return { 'player_in_previous_rounds': self.player.in_previous_rounds(), 'total_contribution': self.group.total_contribution, 'current_payoff': self.player.public_good_payoffs, 'player_in_all_rounds': self.player.in_all_rounds(), 'individual_investment': Constants.public_good_endowment - self.player.contribution, 'group_investment': self.player.contribution, 'group_return': self.group.group_return, } class PublicGoodResultsLastRoundWaitPage(WaitPage): def is_displayed(self): return self.round_number == Constants.num_rounds def after_all_players_arrive(self): self.group.set_public_good_payoffs() self.group.set_leader_average_contribution() class PublicGoodLastRoundHistory(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): return { 'player_in_previous_rounds': self.player.in_previous_rounds(), 'total_contribution': self.group.total_contribution, 'current_payoff': self.player.public_good_payoffs, 'player_in_all_rounds': self.player.in_all_rounds(), 'individual_investment': Constants.public_good_endowment - self.player.contribution, 'group_investment': self.player.contribution, 'group_return': self.group.group_return, } class CooperationBeliefWaitPage(WaitPage): def is_displayed(self): return self.round_number == Constants.num_rounds def after_all_players_arrive(self): self.group.set_leader_average_contribution() class CooperationBelief(Page): def is_displayed(self): return self.round_number == Constants.num_rounds and self.player.in_round(1).is_winner != 1 form_model = 'player' form_fields = ['cooperation_belief'] class PublicGoodResultsSummaryWaitPage(WaitPage): def is_displayed(self): return self.round_number == Constants.num_rounds def after_all_players_arrive(self): self.group.set_correct_estimation_payoffs() class PublicGoodResultsSummary(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): return { 'total_payoffs_public_good': sum([p.public_good_payoffs for p in self.player.in_all_rounds()]), 'player_in_all_rounds': self.player.in_all_rounds(), 'leader_average_contribution': self.group.leader_average_contribution, 'correct_estimation': self.player.correct_estimation_payoffs, } class ExperimentResultsSummaryWaitPage(WaitPage): def is_displayed(self): return self.round_number == Constants.num_rounds def after_all_players_arrive(self): self.group.set_payoffs() class ExperimentResultsSummaryLeader(Page): def is_displayed(self): return self.round_number == Constants.num_rounds and self.player.in_round(1).is_winner == 1 def vars_for_template(self): return { 'kept': Constants.dictator_endowment - self.player.in_round(1).dictator_leader_offer - self.player.in_round(1).dictator_leader_offer - self.player.in_round(1).dictator_leader_offer, 'real_leader_offer': self.group.in_round(1).real_leader_offer, 'total_payoffs_public_good': sum([p.public_good_payoffs for p in self.player.in_all_rounds()]), 'player_in_all_rounds': self.player.in_all_rounds(), 'total_payoff_leader': self.player.payoffs, 'total_earning_leader': self.player.payoffs_convert } class ExperimentResultsSummaryEmployee(Page): def is_displayed(self): return self.round_number == Constants.num_rounds and self.player.in_round(1).is_winner != 1 def vars_for_template(self): return { 'kept': Constants.dictator_endowment - self.player.in_round(1).dictator_leader_offer - self.player.in_round(1).dictator_leader_offer - self.player.in_round(1).dictator_leader_offer, 'real_leader_offer': self.group.in_round(1).real_leader_offer, 'total_payoffs_public_good': sum([p.public_good_payoffs for p in self.player.in_all_rounds()]), 'correct_estimation': self.player.correct_estimation_payoffs, 'player_in_all_rounds': self.player.in_all_rounds(), 'total_payoff_employee': self.player.payoffs, 'total_earning_employee': self.player.payoffs_convert, 'leader_average_contribution': self.group.leader_average_contribution, 'cooperation_belief': self.player.cooperation_belief } class ExperimentSummaryInstruction(Page): pass class Demographics(Page): form_model = 'player' form_fields = ['gender', 'age', 'ethnic', 'grade', 'major'] def is_displayed(self): return self.round_number == Constants.num_rounds class Survey(Page): form_model = 'player' form_fields = ['crt_trust1', 'crt_trust2', 'crt_trust3'] def is_displayed(self): return self.round_number == Constants.num_rounds class End(Page): def is_displayed(self): return self.round_number == Constants.num_rounds page_sequence = [ IntroWp, StageOneDieRollEnter, VoteNumberResultsWaitPage, VoteNumberResults, Election, ResultsWaitPage, DictatorInstruction, DictatorResultsWaitPage, VoteResults, PublicGoodContribute, PublicGoodResultsWaitPage, PublicGoodHistory, PublicGoodResultsLastRoundWaitPage, PublicGoodLastRoundHistory, CooperationBeliefWaitPage, CooperationBelief, PublicGoodResultsSummaryWaitPage, PublicGoodResultsSummary, ExperimentResultsSummaryWaitPage, ExperimentResultsSummaryLeader, ExperimentResultsSummaryEmployee, Demographics, End ]