from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import math class Intructions(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_benefits() self.player.set_balances() 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_benefits() self.player.set_balances() self.player.set_ssb() 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 form_model = 'player' form_fields = ['ssb_choice'] def vars_for_template(self): return dict( age=Constants.min_age + self.player.round_number - 1, task=Constants.task, ssb_benefits_period9=Constants.ssb_benefits_period9, ssb_benefits_low_balance=self.player.ssb_benefits_low_balance, ssb_benefits_chosen = self.player.ssb_chosen, starting_balance = round(self.player.starting_balance, 2) ) def before_next_page(self): self.player.set_intermediate_balance() self.player.set_ssb() 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, task=Constants.task, ssb_benefits_period9=Constants.ssb_benefits_period9, ssb_benefits_low_balance=self.player.ssb_benefits_low_balance, ssb_benefits_chosen = self.player.ssb_chosen, starting_balance = round(self.player.starting_balance, 2) ) def before_next_page(self): self.player.set_intermediate_balance() self.player.set_ssb() 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, task=Constants.task, ssb_benefits_period9=Constants.ssb_benefits_period9, ssb_benefits_low_balance=self.player.ssb_benefits_low_balance, ssb_benefits_chosen=self.player.ssb_chosen, starting_balance = round(self.player.starting_balance, 2) ) def before_next_page(self): self.player.set_intermediate_balance() self.player.set_ssb() 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, task=Constants.task, ssb_benefits_period9=Constants.ssb_benefits_period9, ssb_benefits_low_balance=self.player.ssb_benefits_low_balance, ssb_benefits_chosen=self.player.ssb_chosen, starting_balance= round(self.player.starting_balance, 2) ) def before_next_page(self): self.player.set_intermediate_balance() self.player.set_ssb() 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, task=Constants.task, 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() class Results(Page): def vars_for_template(self): return dict( age=Constants.min_age + self.player.round_number - 1, task=Constants.task, starting_balance= round(self.player.starting_balance, 2), ssb = self.player.ssb, consumption = round(self.player.consumption, 2), ending_balance = round(self.player.starting_balance + self.player.ssb - self.player.consumption, 2), period_payoff= self.player.period_payoff, cumulative_payoff = round(self.player.cumulative_payoff, 2), player_in_all_rounds_rev = reversed(self.player.in_all_rounds()) ) 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, task=Constants.task, starting_balance= round(self.player.starting_balance, 2), ssb = self.player.ssb, consumption = round(self.player.consumption, 2), ending_balance = round(self.player.ending_balance, 2), 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 Choose(Page): timeout_seconds = 0.0001 def is_displayed(self): return self.player.round_number > 1 def before_next_page(self): self.player.set_intermediate_balance() self.player.set_ssb() self.player.set_claim() self.player.set_ssb_benefits() self.player.set_balances() self.subsession.payingTask() 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 page_sequence = [Intructions, Quiz1, Quiz2, Task1, CarryOver, ssb_claimed, ssb_low, ssb_period9, SSB, Choose, ConsumptionChoice, Results, Task1Final, trial_table ]