from . import models from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .models import Constants import random class instructions_condition1(Page): def is_displayed(self): return self.group.treatment == 1 def before_next_page(self): p1 = self.group.get_player_by_id(1) p2 = self.group.get_player_by_id(2) p3 = self.group.get_player_by_id(3) p4 = self.group.get_player_by_id(4) p1.rr_resource = p2.rr_resource = p3.rr_resource = p4.rr_resource = Constants.rr_certainty if self.round_number == 1: p1.t0_resource_size = p2.t0_resource_size = p3.t0_resource_size = p4.t0_resource_size = Constants.r1_resource_size if self.round_number > 1: p1.t0_resource_size = p2.t0_resource_size = p3.t0_resource_size = p4.t0_resource_size = \ p1.in_round(self.round_number - 1).t1_resource_size * p1.in_round(self.round_number - 1).rr_resource if p1.t0_resource_size < c(0): p1.t0_resource_size = p2.t0_resource_size = p3.t0_resource_size = p4.t0_resource_size = c(0) class instructions_condition2(Page): def is_displayed(self): return self.group.treatment == 2 def before_next_page(self): p1 = self.group.get_player_by_id(1) p2 = self.group.get_player_by_id(2) p3 = self.group.get_player_by_id(3) p4 = self.group.get_player_by_id(4) p1.rr_resource = p2.rr_resource = p3.rr_resource = p4.rr_resource = \ (random.randint(100 * Constants.min_rr_uncertainty, 100 * Constants.max_rr_uncertainty)) / 100 if self.round_number == 1: p1.t0_resource_size = p2.t0_resource_size = p3.t0_resource_size = p4.t0_resource_size = Constants.r1_resource_size if self.round_number > 1: p1.t0_resource_size = p2.t0_resource_size = p3.t0_resource_size = p4.t0_resource_size = \ p1.in_round(self.round_number - 1).t1_resource_size * p1.in_round(self.round_number - 1).rr_resource if p1.t0_resource_size < c(0): p1.t0_resource_size = p2.t0_resource_size = p3.t0_resource_size = p4.t0_resource_size = c(0) class quiz(Page): def is_displayed(self): return self.round_number == 1 form_model = models.Player form_fields = ['quiz_1', 'quiz_2', 'quiz_3', 'quiz_4'] def quiz_1_error_message(self, value): if not (value == "4 participants"): return 'That is an incorrect answer. Please try again.' def quiz_2_error_message(self, value): if not (value == "10 rounds"): return 'That is an incorrect answer. Please try again.' def quiz_3_error_message(self, value): if not (value == "I will earn the number of points I took then"): return 'That is an incorrect answer. Please try again.' def quiz_4_error_message(self, value): if not (value == "I will earn zero points then"): return 'That is an incorrect answer. Please try again.' class harvest_round1(Page): def is_displayed(self): return self.round_number == 1 form_model = models.Player form_fields = ['harvest'] def vars_for_template(self): t0_resource_size = self.player.t0_resource_size return {'t0_resource_size': t0_resource_size} class harvest(Page): def is_displayed(self): return self.round_number > 1 form_model = models.Player form_fields = ['harvest'] def vars_for_template(self): t1_resource_size_previous = self.player.in_round(self.round_number - 1).t1_resource_size rr_resource = self.player.in_round(self.round_number - 1).rr_resource t0_resource_size = self.player.t0_resource_size return {'t1_resource_size_previous': t1_resource_size_previous, 'rr_resource': rr_resource, 't0_resource_size': t0_resource_size} class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class results(Page): def vars_for_template(self): t0_resource_size = self.player.t0_resource_size total_harvest = self.player.total_harvest t1_resource_size = self.player.t1_resource_size return {'t1_resource_size': t1_resource_size, 'total_harvest': total_harvest, 't0_resource_size': t0_resource_size} page_sequence = [ instructions_condition1, instructions_condition2, quiz, harvest_round1, harvest, ResultsWaitPage, results ]