from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import time class FirstWaitpage(WaitPage): wait_for_all_groups = True def after_all_players_arrive(self): self.subsession.determine_part_to_pay() class Introduction(Page): pass class NormFollowingInstructions(Page): pass class NormFollowing(Page): pass form_model = 'player' form_fields = ['norm_following_payoff'] def before_next_page(self): #self.participant.vars['payoffs_vector'].append(c(self.player.norm_following_payoff).to_real_world_currency(self.session)/(100*0.15)) #Adjusting for the value for the conversion rate self.participant.vars['payoffs_vector'].append(self.player.norm_following_payoff*Constants.exchange_rate_adjustment) # Adjusting for the value of the conversion rate class Page1(Page): form_model = 'player' form_fields = ['risk_taking'] def before_next_page(self): self.player.passing_payoffs() class Page2(Page): form_model = 'player' form_fields = ['thorough_worker','communicative','rough','inventive','worries','forgive','lazy'] class Page3(Page): form_model = 'player' form_fields = ['extrovert','sense_for_art','nervous','efficient','reserved','respectful','vivid_imagination','stress_management'] class Sample_Raven(Page): def before_next_page(self): # user has 5 minutes to complete as many pages as possible self.participant.vars['expiry'] = time.time() + (Constants.minutes_to_complete_raven * 60) class Raven1(Page): form_model = 'player' form_fields = ['raven_01'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): self.player.raven_payoff = 0 # Initializing payoff variable self.player.raven_total = 0 # Initializing total variable if self.player.raven_01 == 1: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() class Raven2(Page): form_model = 'player' form_fields = ['raven_02'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): if self.player.raven_02 == 0: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.participant.vars['expiry'] - time.time() > 3 class Raven3(Page): form_model = 'player' form_fields = ['raven_03'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): if self.player.raven_03 == 6: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.participant.vars['expiry'] - time.time() > 3 class Raven4(Page): form_model = 'player' form_fields = ['raven_04'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): if self.player.raven_04 == 7: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.participant.vars['expiry'] - time.time() > 3 class Raven5(Page): form_model = 'player' form_fields = ['raven_05'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): if self.player.raven_05 == 0: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.participant.vars['expiry'] - time.time() > 3 class Raven6(Page): form_model = 'player' form_fields = ['raven_06'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): if self.player.raven_06 == 0: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.participant.vars['expiry'] - time.time() > 3 class Raven7(Page): form_model = 'player' form_fields = ['raven_07'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): if self.player.raven_07 == 2: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.participant.vars['expiry'] - time.time() > 3 class Raven8(Page): form_model = 'player' form_fields = ['raven_08'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): if self.player.raven_08 == 2: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.participant.vars['expiry'] - time.time() > 3 class Raven9(Page): form_model = 'player' form_fields = ['raven_09'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): if self.player.raven_09 == 1: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.participant.vars['expiry'] - time.time() > 3 class Raven10(Page): form_model = 'player' form_fields = ['raven_10'] timer_text = 'Verbleibende Zeit:' def before_next_page(self): if self.player.raven_10 == 6: self.player.raven_payoff += Constants.num_tokens_at_adjusted_rate self.player.raven_total += 1 def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.participant.vars['expiry'] - time.time() > 3 class Demographics(Page): form_model = 'player' form_fields = ['female'] #class Waitpage(WaitPage): # def after_all_players_arrive(self): # self.group.passing_payoffs() class Thanks(Page): pass class PaymentInfo(Page): form_model = 'player' def before_next_page(self): self.player.raven_total() def vars_for_template(self): return { 'payoff': c(self.player.total_payoff).to_real_world_currency(self.session), 'base_pay': self.session.config['participation_fee'], 'part1_payoff': c(self.player.participant.vars['payoffs_vector'][0]), 'part2_payoff': c(self.player.participant.vars['payoffs_vector'][1]), 'balls_payoff': c(self.player.participant.vars['payoffs_vector'][2]).to_real_world_currency(self.session), 'supergame_for_payment': self.player.participant.vars['supergame_payment'], 'raven_total': self.player.raven_total } page_sequence = [ FirstWaitpage, Introduction, NormFollowingInstructions, NormFollowing, Page1, Page2, Page3, Sample_Raven, Raven1, Raven2, Raven3, Raven4, Raven5, Raven6, Raven7, Raven8, Raven9, Raven10, Demographics, Thanks, PaymentInfo ]