from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import math class Instructions(Page): def is_displayed(self): return self.player.round_number == 1 def before_next_page(self): self.subsession.payingTask() class Quiz1(Page): def is_displayed(self): return self.player.round_number == 1 form_model = 'player' form_fields = ['quiz1', 'quiz2', 'quiz3', 'quiz4', 'quiz5', 'quiz6', 'quiz7'] class Quiz2(Page): def is_displayed(self): return self.player.round_number == 1 form_model = 'player' form_fields = ['quiz8', 'quiz9', 'quiz10', 'quiz11', 'quiz12'] class Task1(Page): def is_displayed(self): return self.player.round_number == 1 def before_next_page(self): self.player.set_claim() self.player.set_ssb() class CarryOver(Page): timeout_seconds = 0.00001 def is_displayed(self): return self.player.round_number > 1 def before_next_page(self): self.player.set_claim() self.player.set_ssb() self.subsession.payingTask() self.player.set_intermediate_balance() class ssb_claimed(Page): def is_displayed(self): return self.player.is_claimed == 1 def vars_for_template(self): return dict( age=Constants.min_age + self.player.round_number - 1 ) def before_next_page(self): self.player.set_ssb() self.player.set_intermediate_balance() class ssb_low(Page): def is_displayed(self): return self.player.is_claimed == 0 and self.player.is_balance_low == 1 and self.player.round_number < 9 def vars_for_template(self): return dict( age=Constants.min_age + self.player.round_number - 1 ) def before_next_page(self): self.player.set_ssb() self.player.set_intermediate_balance() self.subsession.payingTask() class ssb_period9(Page): def is_displayed(self): return self.player.is_claimed == 0 and self.player.round_number == 9 def vars_for_template(self): return dict( age=Constants.min_age + self.player.round_number - 1 ) def before_next_page(self): self.player.set_ssb() self.player.set_intermediate_balance() self.subsession.payingTask() class SSB(Page): def is_displayed(self): return self.player.is_claimed == 0 and self.player.is_balance_low == 0 and self.player.round_number < 9 def vars_for_template(self): return dict( age=Constants.min_age + self.player.round_number - 1 ) form_model = 'player' form_fields = ['ssb_choice'] def before_next_page(self): self.player.set_ssb() self.player.set_intermediate_balance() self.subsession.payingTask() class ConsumptionChoice(Page): form_model = 'player' form_fields = ['consumption'] def vars_for_template(self): return dict( age=Constants.min_age + self.player.round_number - 1, starting_balance=round(self.player.starting_balance, 2), default_consumption=round(self.player.default_consumption, 2), last_balance=round(self.player.last_balance, 2), intermediate_balance=round(self.player.starting_balance + self.player.ssb, 2), ssb=round(self.player.ssb, 2) ) def before_next_page(self): self.player.set_end_balance() self.player.set_payoffs() self.subsession.payingTask() class Results(Page): def vars_for_template(self): return dict( age=Constants.min_age + self.player.round_number - 1, player_in_all_rounds_rev = reversed(self.player.in_all_rounds()) ) def before_next_page(self): self.player.set_end_balance() self.player.set_payoffs() self.subsession.payingTask() class Task1Final(Page): def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): return dict( age=Constants.min_age + self.player.round_number - 1, starting_balance= self.player.starting_balance, ssb = self.player.ssb, consumption = self.player.consumption, ending_balance = self.player.ending_balance, period_payoff = round((1 - math.exp(-(self.player.consumption - 14887) / 20000)) * 3, 2), cumulative_payoff = round(self.player.cumulative_payoff, 2), player_in_all_rounds_rev = reversed(self.player.in_all_rounds()) ) def before_next_page(self): self.player.set_payoffs() self.participant.vars['Random_Paying_Task'] = self.subsession.paying_task self.participant.vars['Task1_Paying_Round'] = self.subsession.paying_round class trial_table(Page): def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): return dict( subsession_in_all_rounds=(self.subsession.in_all_rounds()), player_in_all_rounds=(self.player.in_all_rounds()), paying_task = self.subsession.paying_task, paying_round = self.subsession.paying_round, currencypayoff1 = round(self.player.task1_payoff, 2) ) def before_next_page(self): self.participant.vars['Task1_Payoff'] = self.player.task1_payoff self.player.set_payoffs() page_sequence = [Instructions, Quiz1, Quiz2, Task1, CarryOver, ssb_claimed, ssb_low, ssb_period9, SSB, ConsumptionChoice, Results, Task1Final, trial_table]