from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class Instructions(Page): pass def is_displayed(player): return player.round_number == 1 class control_100(Page): def is_displayed(self): return self.player.id_in_group == 1 class control_0(Page): def is_displayed(self): return self.player.id_in_group == 2 class control_minus100(Page): def is_displayed(self): return self.player.id_in_group == 3 class treatment_100(Page): def is_displayed(self): return self.player.id_in_group == 4 class treatment_0(Page): def is_displayed(self): return self.player.id_in_group == 5 class treatment_minus100(Page): def is_displayed(self): return self.player.id_in_group == 6 class AddNumbers(Page): def is_displayed(self): return self.player.tran == 1 timeout_seconds = 30 form_model = "player" form_fields = ["number_entered"] def vars_for_template(self): number_1 = random.randint(1, 10) number_2 = random.randint(1, 10) self.player.sum_of_of_numbers = number_1 + number_2 return { "number_1": number_1, "number_2": number_2, } def before_next_page(self): if self.player.id_in_group == 1 or self.player.id_in_group == 2 or self.player.id_in_group == 3: if self.player.sum_of_of_numbers == self.player.number_entered: self.player.payoff = Constants.payment_per_correct_answer else: self.player.sum_of_of_numbers != self.player.number_entered self.player.payoff = Constants.payment_round_control else: if self.player.sum_of_of_numbers == self.player.number_entered: self.player.payoff = Constants.payment_per_correct_answer + Constants.payment_round_treatment else: if self.player.sum_of_of_numbers != self.player.number_entered: self.player.payoff = Constants.payment_round_treatment class Results(Page): pass class CombinedResults(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): if self.player.id_in_group == 1 or self.player.id_in_group == 4: all_players = self.player.in_all_rounds() combined_payoff = Constants.endowment_1 for player in all_players: combined_payoff += player.payoff return { "combined_payoff": combined_payoff } if self.player.id_in_group == 2 or self.player.id_in_group == 5: all_players = self.player.in_all_rounds() combined_payoff = Constants.endowment_2 for player in all_players: combined_payoff += player.payoff return { "combined_payoff": combined_payoff } if self.player.id_in_group == 3 or self.player.id_in_group == 6: all_players = self.player.in_all_rounds() combined_payoff = Constants.endowment_3 for player in all_players: combined_payoff += player.payoff return { "combined_payoff": combined_payoff } page_sequence = [Instructions, control_100, control_0, control_minus100, treatment_100, treatment_0, treatment_minus100, AddNumbers, CombinedResults]