from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class MyPage(Page): pass class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): pass class Results(Page): form_model = 'player' def is_displayed(self): return False def vars_for_template(self): return { 'total_dollars': self.participant.payoff_plus_participation_fee(), } class RoundWaitPage(WaitPage): def after_all_players_arrive(self): if self.round_number >= 1: self.group.bonus = 8 else: pass players = self.group.get_players() efforts = [p.effort for p in players] self.group.groupEffort = min(efforts) for p in players: p.roundPayoff = 200 - 5*p.effort + self.group.bonus*self.group.groupEffort for p in players: p.set_payoffs() if self.round_number in [10, 20, 30]: allPayoffs = [] for p in players: playerPayoff = sum([r.roundPayoff for r in p.in_rounds(self.round_number-5, self.round_number)])/6 allPayoffs.append(playerPayoff) group = self.group group.group_payoff = round(sum(allPayoffs) / 4, 2) group.misreportPayoff = group.group_payoff + 50 if self.round_number in [4, 14, 24]: for p in players: p.averageEffort = round(sum([r.effort for r in p.in_rounds(self.round_number-3, self.round_number)])/4, 2) class RoundResults(Page): pass class Misreporting(Page): form_model = 'player' form_fields = ['reportChoice1', 'reportChoice2', 'reportChoice3', 'reportChoice4', 'reportChoice5'] def is_displayed(self): return self.player.current_role == 'manager' and self.round_number in [10, 20, 30] class riskAversion(Page): form_model = 'player' form_fields = ['riskChoice1','riskChoice2','riskChoice3','riskChoice4','riskChoice5','riskChoice6','riskChoice7' ,'riskChoice8','riskChoice9','riskChoice10','riskChoice11','riskChoice12','riskChoice13', 'riskChoice14', 'riskChoice15','riskChoice16','riskChoice17','riskChoice18','riskChoice19','riskChoice20'] def is_displayed(self): return self.round_number == 30 class ambAversion(Page): form_model = 'player' form_fields = ['ambChoice1','ambChoice2','ambChoice3','ambChoice4','ambChoice5','ambChoice6','ambChoice7', 'ambChoice8','ambChoice9', 'ambChoice10','ambChoice11','ambChoice12','ambChoice13','ambChoice14','ambChoice15','ambChoice16', 'ambChoice17', 'ambChoice18','ambChoice19','ambChoice20'] def is_displayed(self): return self.round_number == 30 class groupSatisfaction(Page): form_model = 'player' form_fields = ['teamQuestion1','teamQuestion2','teamQuestion3','teamQuestion4','leaderQuestion1','leaderQuestion2' ,'leaderQuestion3'] def is_displayed(self): return self.round_number in [10, 20, 30] class leadershipQuestions(Page): form_model = 'player' form_fields = ['styleQuestion1','styleQuestion2','styleQuestion3','styleQuestion4','styleQuestion5','styleQuestion6','styleQuestion7','styleQuestion8' ,'styleQuestion9','styleQuestion10','groupQuestion1','groupQuestion2','groupQuestion3','groupQuestion4','groupQuestion5','groupQuestion6' ,'groupQuestion7','groupQuestion8','groupQuestion9','groupQuestion10','groupQuestion11','groupQuestion12','groupQuestion13','groupQuestion14','groupQuestion15'] def is_displayed(self): return self.round_number == 30 class quiz(Page): form_model = 'player' form_fields = ['quizQuestion1', 'quizQuestion2', 'quizQuestion3', 'quizQuestion4', 'quizQuestion5'] def is_displayed(self): return self.round_number == 1 class instructions1(Page): def is_displayed(self): return self.round_number == 1 class instructions2(Page): def is_displayed(self): return self.round_number == 1 class instructions3(Page): def is_displayed(self): return self.round_number == 1 class instructions4(Page): def is_displayed(self): return self.round_number == 1 class instructions5(Page): def is_displayed(self): return self.round_number == 1 class instructions6(Page): def is_displayed(self): return self.round_number == 1 class instructions7(Page): def is_displayed(self): return self.round_number == 1 class instructions9(Page): def is_displayed(self): return self.round_number == 1 class instructions9_1(Page): def is_displayed(self): return self.round_number == 1 class instructions9_2(Page): def is_displayed(self): return self.round_number == 1 class instructions10(Page): def is_displayed(self): return self.round_number == 30 class misreportingInstructions(Page): def is_displayed(self): return self.round_number in [10, 20, 30] and self.player.current_role == 'manager' class effortChoice_1(Page): form_model = 'player' form_fields = ['effort'] def is_displayed(self): return 1 <= self.round_number <= 4 \ or 11 <= self.round_number <= 14\ or 21 <= self.round_number <= 24 class effortChoice_1_1(Page): form_model = 'player' form_fields = ['effort'] def is_displayed(self): return 5 <= self.round_number <= 10 \ or 15 <= self.round_number <= 20\ or 25 <= self.round_number <= 30 class Selection_1(Page): def is_displayed(self): return self.round_number == 5 def vars_for_template(self): return { 'players': self.group.get_players(), } class Selection_2(Page): form_model = 'player' form_fields = ['tickets'] def is_displayed(self): return self.round_number == 25 def vars_for_template(self): return { 'others_in_group': self.player.get_others_in_group(), 'players': self.group.get_players(), } class Selection_3(Page): form_model = 'player' form_fields = ['vote_choice'] def is_displayed(self): return self.round_number == 15 def vars_for_template(self): return { 'others_in_group': self.player.get_others_in_group(), 'players': self.group.get_players(), } class SelectionWait(WaitPage): def is_displayed(self): return self.round_number in [5, 15, 25] def after_all_players_arrive(self): if self.round_number == 5: self.group.get_random_leader() elif self.round_number == 25: self.group.tullock() elif self.round_number == 15: self.group.get_elected_leader() class assignmentWait(WaitPage): def after_all_players_arrive(self): if self.round_number >= 1: self.group.bonus = 8 else: pass players = self.group.get_players() if self.round_number == 1: for p in players: p.gradeQuiz() if self.round_number in [5, 15, 25]: for p in players: p.averageEffort = p.in_round(self.round_number - 1).averageEffort p.quizScore = p.in_round(1).quizScore if self.round_number in [6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 26, 27, 28, 29, 30]: for p in players: if p.in_round(self.round_number - 1).current_role == 'manager': p.current_role = 'manager' else: pass class endRoundWait(WaitPage): def is_displayed(self): return self.round_number in [10, 20, 30] def after_all_players_arrive(self): players = self.group.get_players() for p in players: if self.round_number == 30: p.getRandomPayoffs() p.getLeaderPayoff() p.participant.vars['payoffs'].append(p.riskPayoff) p.participant.vars['payoffs'].append(p.ambPayoff) p.get_final_payoffs() elif self.round_number in [10, 20]: p.getLeaderPayoff() class leaderMessage(Page): def is_displayed(self): return self.player.current_role == 'manager' and self.round_number in [5, 6, 7, 8, 9, 10, 15, 16, 17, 18, 19, 20, 25 , 26, 27, 28, 29, 30] class followerMessage(Page): def is_displayed(self): return self.player.current_role == 'employee' and self.round_number in [5, 6, 7, 8, 9, 10, 15, 16, 17, 18, 19, 20, 25 , 26, 27, 28, 29, 30] class rolePage(Page): def is_displayed(self): return self.round_number in [5, 15, 25] class Practice(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['effort', 'other_effort'] class selection1(Page): def is_displayed(self): return self.round_number == 1 class selection2(Page): def is_displayed(self): return self.round_number == 21 class selection3(Page): def is_displayed(self): return self.round_number == 11 page_sequence = [ instructions1, instructions2, instructions3, instructions4, quiz, instructions5, instructions6, instructions7, Practice, instructions9, instructions9_1, instructions9_2, assignmentWait, selection1, selection2, selection3, Selection_1, Selection_2, Selection_3, SelectionWait, rolePage, leaderMessage, followerMessage, effortChoice_1, effortChoice_1_1, RoundWaitPage, RoundResults, misreportingInstructions, Misreporting, groupSatisfaction, instructions10, leadershipQuestions, riskAversion, ambAversion, endRoundWait, Results ]