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