from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import math class Instructions2(Page): def is_displayed(self): return self.player.round_number == 1 class Task2(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 Task2Final(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= 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['Task2_Paying_Round'] = self.subsession.paying_round self.subsession.paying_task = self.participant.vars['Random_Paying_Task'] 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, currencypayoff2 = round(self.player.task2_payoff, 2) ) def before_next_page(self): self.participant.vars['Task2_Payoff'] = self.player.task2_payoff self.player.set_payoffs() page_sequence = [Task2, Instructions2, CarryOver, ssb_claimed, ssb_low, ssb_period9, SSB, ConsumptionChoice, Results, Task2Final, trial_table]