from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Search(Page): form_model = 'player' form_fields = ['dimension_1', 'dimension_2', 'dimension_3', 'numberOfClicks', 'current_payoff'] class Search_2(Page): #timeout_seconds = 60 form_model = 'player' form_fields = ['dimension_1', 'dimension_2', 'dimension_3', 'numberOfClicks', 'current_payoff', 'maxLocation', 'maxLemon', 'maxSugar','subPeriod'] def is_displayed(self): return self.player.current_role == 'employee' class Search_Leader(Page): #timeout_seconds = 60 form_model = 'player' form_fields = ['dimension_1', 'dimension_2', 'dimension_3', 'value'] def is_displayed(self): return self.player.current_role == 'manager' class Search_Leader2(Page): timeout_seconds = 60 form_model = 'player' form_fields = ['dimension_1', 'dimension_2', 'dimension_3', 'value'] def is_displayed(self): return self.player.current_role == 'manager' def vars_for_template(self): return { 'others_in_group': self.player.get_others_in_group(), } class Selection_1(Page): def is_displayed(self): return self.round_number == 1 def vars_for_template(self): return { 'others_in_group': self.player.get_others_in_group(), } class Selection_2(Page): def is_displayed(self): return self.round_number == 2 def vars_for_template(self): return { 'others_in_group': self.player.get_others_in_group(), } class Selection_3(Page): form_model = 'player' form_fields = ['vote_choice'] def is_displayed(self): return self.round_number == 3 def vars_for_template(self): return { 'others_in_group': self.player.get_others_in_group(), } class SelectionWait(WaitPage): def after_all_players_arrive(self): if self.round_number == 1: self.group.get_random_leader() elif self.round_number == 2: self.group.get_contest_leader() elif self.round_number == 3: self.group.get_elected_leader() self.group.getRandomOptima() group = self.group players = group.get_players() for p in players: p.numberOfClicks = 0 p.current_payoff = 0 class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): players = self.group.get_players() for p in players: if self.round_number == 1: p.individual_payoff = p.current_payoff p.quizScore = p.quizScore else: p.individual_payoff = p.current_payoff p.quizScore = p.in_round(self.round_number - 1).quizScore class Results_1(Page): def vars_for_template(self): return { 'others_in_group': self.player.get_others_in_group(), } class ResultsWaitPage_2(WaitPage): def after_all_players_arrive(self): group = self.group players = self.group.get_players() payoffs = [p.current_payoff for p in players] for p in players: if p.subPeriod == 1: p.r1_payoff = p.current_payoff elif p.subPeriod == 2: p.r2_payoff = p.current_payoff elif p.subPeriod == 3: p.r3_payoff = p.current_payoff elif p.subPeriod == 4: p.r4_payoff = p.current_payoff elif p.subPeriod == 5: p.r5_payoff = p.current_payoff for p in players: p.subPeriod += 1 print(payoffs) group.group_payoff = round(sum(payoffs)/(Constants.players_per_group-1), 2) if group.subPeriod == 1: group.r1_payoff = group.group_payoff elif group.subPeriod == 2: group.r2_payoff = group.group_payoff elif group.subPeriod == 3: group.r3_payoff = group.group_payoff elif group.subPeriod == 4: group.r4_payoff = group.group_payoff elif group.subPeriod == 5: group.r5_payoff = group.group_payoff group.subPeriod += 1 class taskWait(WaitPage): pass class introWait(WaitPage): def after_all_players_arrive(self): self.group.getRandomOptima() class Results_2(Page): def is_displayed(self): return self.player.current_role == 'employee' def vars_for_template(self): return { 'others_in_group': self.player.get_others_in_group(), } class leader_results(Page): form_model = 'player' def is_displayed(self): return self.player.current_role == 'manager' def vars_for_template(self): return { 'others_in_group': self.player.get_others_in_group(), } class roundResults(Page): form_model = 'player' class ResetPage(WaitPage): def is_displayed(self): return self.round_number < 3 def after_all_players_arrive(self): if self.round_number < 3: self.group.reset() else: pass class Final_Results(Page): def is_displayed(self): return self.round_number == 3 def vars_for_template(self): return { 'total_dollars': self.participant.payoff_plus_participation_fee(), } class Search_practice(Page): form_model = 'player' form_fields = ['dimension_1', 'dimension_2', 'dimension_3'] def is_displayed(self): return self.round_number == 1 class practiceReset(WaitPage): def is_displayed(self): return self.round_number == 1 def after_all_players_arrive(self): players = self.group.get_players() if self.round_number == 1: for p in players: p.gradeQuiz() if self.round_number == 1: self.group.reset() else: pass group = self.group players = group.get_players() for p in players: p.dimension_1 = '' p.dimension_2 = 5 p.dimension_3 = 5 class IntroPage1(Page): def is_displayed(self): return self.round_number == 1 class IntroPage2(Page): def is_displayed(self): return self.round_number == 2 class IntroPage3(Page): def is_displayed(self): return self.round_number == 3 class Misreporting(Page): form_model = 'player' form_fields = ['reportChoice1','reportChoice2','reportChoice3','reportChoice4','reportChoice5'] def is_displayed(self): return self.player.current_role == 'manager' 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 == 3 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 == 3 class groupSatisfaction(Page): form_model = 'player' form_fields = ['teamQuestion1','teamQuestion2','teamQuestion3','teamQuestion4','leaderQuestion1','leaderQuestion2' ,'leaderQuestion3'] def is_displayed(self): return self.player.current_role == 'employee' 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 == 3 class rolePage(Page): form_model = 'player' class endRoundWait(WaitPage): def after_all_players_arrive(self): group = self.group group.misreportPayoff = group.group_payoff + 5 self.group.set_payoffs() class finalResultsWait(WaitPage): def after_all_players_arrive(self): group = self.group players = group.get_players() for p in players: p.getRandomPayoffs() p.payoff += p.ambPayoff + p.riskPayoff class instructions1(Page): 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 instructions8(Page): def is_displayed(self): return self.round_number == 1 class instructions9(Page): def is_displayed(self): return self.round_number == 1 class stageIII(Page): def is_displayed(self): return self.round_number == 3 class quiz(Page): form_model = 'player' form_fields = ['quizQuestion1', 'quizQuestion2', 'quizQuestion3', 'quizQuestion4', 'quizQuestion5'] def is_displayed(self): return self.round_number == 1 page_sequence = [ instructions1, instructions2, instructions3, instructions4, quiz, instructions5, instructions6, Search_practice, practiceReset, instructions7, instructions8, instructions9, IntroPage1, IntroPage2, IntroPage3, introWait, Search, ResultsWaitPage, Results_1, Selection_1, Selection_2, Selection_3, SelectionWait, rolePage, taskWait, Search_2, Search_Leader, ResultsWaitPage_2, Results_2, leader_results, taskWait, Search_2, Search_Leader2, ResultsWaitPage_2, Results_2, leader_results, taskWait, Search_2, Search_Leader2, ResultsWaitPage_2, Results_2, taskWait, Search_2, Search_Leader2, ResultsWaitPage_2, Results_2, taskWait, Search_2, Search_Leader2, ResultsWaitPage_2, Results_2, leader_results, endRoundWait, roundResults, Misreporting, groupSatisfaction, ResetPage, stageIII, leadershipQuestions, riskAversion, ambAversion, finalResultsWait, Final_Results ]