from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants from django.utils import translation from django import http from django.conf import settings class Experimenter(Page): form_model = 'player' form_fields = ['counterbalance_choice'] def is_displayed(self): return self.round_number == 1 and self.player.id_in_group == 1 def before_next_page(self): self.participant.vars['counterbalance_choice'] = self.player.counterbalance_choice class setRandomRole(WaitPage): body_text = "Waiting for the other participants to make their decisions. Thank you for your patience." def after_all_players_arrive(self): self.group.role() class Personal_ID(Page): form_model = 'player' form_fields = ['personal_ID'] def is_displayed(player): return player.round_number == 1 def before_next_page(self): self.participant.vars['personal_ID'] = self.player.personal_ID print("personal_ID") # print(self.player.personal_ID) print(self.participant.vars['personal_ID']) class Welcome(Page): def is_displayed(player): return player.round_number == 1 class RulesPage01(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class RulesPage10(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class RulesPage11(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class RulesPage20(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class RulesPage21(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class RulesPage22(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class RulesPage30(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class RulesPage31(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class RulesPage40(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class RulesPage41(Page): form_model = 'player' def is_displayed(self): return self.round_number == 1 class ComprQuest_1(Page): form_model = 'player' form_fields = ["compr_quest_1","compr_quest_2","compr_quest_3","compr_quest_4","compr_quest_5","compr_quest_6","compr_quest_7"] def error_message(self, values): if (values["compr_quest_1"] != 1) or (values["compr_quest_2"] != 1) or (values["compr_quest_3"] != 1) or (values["compr_quest_4"] != 1) or (values["compr_quest_5"] != 1) or (values["compr_quest_6"] != 1): return 'One or more of your answers were incorrect. Please try again.' if self.player.condition == "honest": if values["compr_quest_7"] != 2: return 'One or more of your answers were incorrect. Please try again.' else: if values["compr_quest_7"] != 1: return 'One or more of your answers were incorrect. Please try again.' def is_displayed(self): return self.round_number == 1 class ComprQuest_2(Page): form_model = 'player' form_fields = ["compr_quest_8","compr_quest_9","compr_quest_10","compr_quest_11","compr_quest_12","compr_quest_13","compr_quest_14",] def error_message(self, values): if (values["compr_quest_8"] != 1) or (values["compr_quest_9"] != 5) or (values["compr_quest_10"] != 4) or (values["compr_quest_11"] != 5) or (values["compr_quest_12"] != 1) or (values["compr_quest_13"] != 1) or (values["compr_quest_14"] != 1): return 'One or more of your answers were incorrect. Please try again.' def is_displayed(self): return self.round_number == 1 class ComprQuest_3(Page): form_model = 'player' form_fields = ["compr_quest_15","compr_quest_16","compr_quest_17","compr_quest_18","compr_quest_19","compr_quest_20","compr_quest_21",] def error_message(self, values): if (values["compr_quest_15"] != 3) or (values["compr_quest_16"] != 3) or (values["compr_quest_17"] != 4) or (values["compr_quest_18"] != 1) or (values["compr_quest_19"] != 4) or (values["compr_quest_20"] != 3) or (values["compr_quest_21"] != 5): return 'One or more of your answers were incorrect. Please try again.' def is_displayed(self): return self.round_number == 1 class PQ_Finished(WaitPage): def is_displayed(self): return self.round_number == 1 body_text = "You have finished the comprehension questions. Since some participants may take a little bit longer to read the instructions and answer the comprehension questions, you may have to wait a bit. Thank you for your patience." class Summary_Fighter(Page): form_model = 'player' def is_displayed(self): return self.player.leader == 'Fighter' and self.round_number == 1 class Summary_Leader(Page): form_model = 'player' def is_displayed(self): return self.player.leader == 'Leader' and self.round_number == 1 class LeaderRole(Page): form_model = 'player' form_fields = ['leader_role'] def is_displayed(self): return self.player.leader == 'Leader' def error_message(self, values): if self.player.leader == 'Leader': if self.player.condition == 'honest': if (values['leader_role'] != self.player.role_player): self.player.incorrect_attempts_leaderrole += 1 print("self.player.incorrect_attempts_leaderrole") print(self.player.incorrect_attempts_leaderrole) return 'Please make sure that you provide correct information to your members.' class setLeaderRole(WaitPage): body_text = "Waiting for the other participants to make their decisions. Thank you for your patience." def after_all_players_arrive(self): self.group.leaderrole() class Expectations(Page): form_model = 'player' form_fields = ['expectation_confl'] def is_displayed(self): return self.player.leader == 'Leader' def error_message(self, values): if values['expectation_confl'] > 20 or values['expectation_confl'] < 0: return 'Please make sure that you enter a number between 0 and 20 points.' class Contribute(Page): form_model = 'player' form_fields = ['contribution_confl', 'contribution_keep'] def is_displayed(self): return self.player.leader == 'Fighter' def error_message(self, values): if values['contribution_confl'] + values['contribution_keep'] != 20: return 'Please make sure that you invest 20 points in total.' class ResultsWaitPage(WaitPage): body_text = "Waiting for the other participants to make their decisions. Thank you for your patience." def after_all_players_arrive(self): self.group.calculate_payoffs() class Results(Page): form_model = 'player' class Endoftask(Page): form_model = 'player' def is_displayed(self): return self.round_number == 20 def vars_for_template(self): avgpoeuro = self.player.set_payoffs_avgpoeuro() self.participant.vars['avgpoeuro'] = avgpoeuro class Questions_Fighters_Honesty_hon(Page): form_model = 'player' form_fields = ['exp_RoleArounds', 'exp_RoleBrounds', 'reelect'] def is_displayed(self): return self.player.leader == 'Fighter' and self.player.condition == "honest" and self.round_number == 20 def error_message(self, values): if self.player.condition == "honest": if (values['exp_RoleArounds'] + values['exp_RoleBrounds'] != 20): return 'Make sure there are 20 rounds in total' class Questions_Fighters_Honesty_dec(Page): form_model = 'player' form_fields = ['exp_RoleArounds', 'exp_RoleBrounds', 'exp_signalhonest', 'reelect'] def is_displayed(self): return self.player.leader == 'Fighter' and self.player.condition != "honest" and self.round_number == 20 def error_message(self, values): if (values['exp_RoleArounds'] + values['exp_RoleBrounds'] != 20) or (values["exp_signalhonest"] < 0) or (values["exp_signalhonest"] > 20): return 'Make sure there are 20 rounds in total' class Questions_Leader_Honesty_hon(Page): form_model = 'player' form_fields = ['exp_RoleArounds', 'exp_RoleBrounds'] def is_displayed(self): return self.player.leader == 'Leader' and self.player.condition == "honest" and self.round_number == 20 def error_message(self, values): if (values['exp_RoleArounds'] + values['exp_RoleBrounds'] != 20): return 'Make sure there are 20 rounds in total' class Questions_Leader_Honesty_dec(Page): form_model = 'player' form_fields = ['exp_RoleArounds', 'exp_RoleBrounds', 'exp_signalhonest'] def is_displayed(self): return self.player.leader == 'Leader' and self.player.condition != "honest" and self.round_number == 20 def error_message(self, values): if (values['exp_RoleArounds'] + values['exp_RoleBrounds'] != 20) or (values["exp_signalhonest"] < 0) or (values["exp_signalhonest"] > 20): return 'Make sure there are 20 rounds in total' class Questions_Scenario(Page): form_model = 'player' form_fields = ['ScenarionAA', 'ScenarionAB', 'ScenarionBA', 'ScenarionBB'] def is_displayed(self): return self.round_number == 20 class Questions_Fighters_Endorsement(Page): form_model = 'player' form_fields = ['increase_leaderendorse', 'decrease_leaderendorse'] def is_displayed(self): return self.player.leader == 'Fighter' and self.round_number == 20 def error_message(self, values): if values['increase_leaderendorse'] + values['decrease_leaderendorse'] != 10: return 'Make sure you invest 10 points in total' class Questions_Leader_Endorsement(Page): form_model = 'player' def is_displayed(self): return self.player.leader == 'Leader' and self.round_number == 20 class Questions_Cohesion(Page): form_model = 'player' form_fields = ['coh1_solidarity', 'coh2_solidarity', 'coh3_solidarity', 'coh4_satisfaction', 'coh5_satisfaction', 'coh6_satisfaction', 'coh7_satisfaction'] def is_displayed(self): return self.round_number == 20 class Questions_Wait(WaitPage): body_text = "Waiting for the other participants to make their decisions. Thank you for your patience." def after_all_players_arrive(self): self.group.set_exp() class Earning(Page): form_model = 'player' def is_displayed(self): return self.round_number == 20 def vars_for_template(self): self.player.avgpoeuro = self.participant.vars['avgpoeuro'] / 160 * 8 # print("avgpoeuro") # print(self.player.avgpoeuro) # print("self.player.exp_earnings before") # print(self.participant.vars['exp_earnings']) # self.player.exp_earnings = c(self.participant.vars['exp_earnings']).to_real_world_currency(self.session) self.player.exp_earnings = self.participant.vars['exp_earnings'] # print("self.player.exp_earnings after") # print(self.player.exp_earnings) self.player.avgpoeuro_total = self.player.avgpoeuro + self.player.exp_earnings # self.player.avgpoeuro_total = self.player.avgpoeuro + self.participant.vars['exp_earnings'] if self.player.leader == 'Leader': self.player.earnings_expectation_confl = c(self.player.correct_expectation_confl / 10).to_real_world_currency(self.session) self.player.totalincrease_leaderendorse = c(self.player.totalincrease_leaderendorse).to_real_world_currency(self.session) self.player.totaldecrease_leaderendorse = c(self.player.totaldecrease_leaderendorse).to_real_world_currency(self.session) self.player.totalincrease_leaderendorse_euro = self.player.totalincrease_leaderendorse / 10 * 0.5 self.player.totaldecrease_leaderendorse_euro = self.player.totaldecrease_leaderendorse / 10 * 0.5 self.player.earnings_expectation_confl_float = float(self.player.correct_expectation_confl) / 10 self.player.totalincrease_leaderendorse_euro_float = float(self.player.totalincrease_leaderendorse_euro) self.player.totaldecrease_leaderendorse_euro_float = float(self.player.totaldecrease_leaderendorse_euro) self.player.avgpoeuro_total = self.player.avgpoeuro_total + self.player.earnings_expectation_confl_float + self.player.totalincrease_leaderendorse_euro - self.player.totaldecrease_leaderendorse_euro print("Total Earnings") print(self.player.avgpoeuro_total) self.player.avgpoeuro_total_float = float(self.player.avgpoeuro_total) self.player.avgpoeuro_float = float(self.player.avgpoeuro) self.player.exp_earnings_float = float(self.player.exp_earnings) # if self.player.leader == 'Leader': # self.player.earnings_expectation_confl_float = float(self.player.correct_expectation_confl) / 10 # self.player.totalincrease_leaderendorse_euro_float = float(self.player.totalincrease_leaderendorse_euro) # self.player.totaldecrease_leaderendorse_euro_float = float(self.player.totaldecrease_leaderendorse_euro) page_sequence = [ Experimenter, setRandomRole, Personal_ID, Welcome, RulesPage01,RulesPage10,RulesPage11,RulesPage20,RulesPage21,RulesPage22,RulesPage30,RulesPage31,RulesPage40,RulesPage41, ComprQuest_1,ComprQuest_2,ComprQuest_3,PQ_Finished, Summary_Fighter,Summary_Leader, LeaderRole, setLeaderRole, Expectations, Contribute, ResultsWaitPage, Results, Endoftask, Questions_Cohesion, Questions_Fighters_Honesty_hon, Questions_Fighters_Honesty_dec, Questions_Leader_Honesty_hon, Questions_Leader_Honesty_dec, Questions_Scenario, Questions_Fighters_Endorsement, Questions_Leader_Endorsement, Questions_Wait, Earning ]