from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants from captcha.fields import ReCaptchaField class General(Page): _allow_custom_attributes = True form_model = 'player' form_fields = [] # captcha does not get in here def get_form(self, data=None, files=None, **kwargs): frm = super().get_form(data, files, **kwargs) frm.fields['captcha'] = ReCaptchaField() return frm class Portfolios1(Page): form_model = 'player' form_fields = ['check_portfolios_1'] def vars_for_template(self): return { 'N_examples': Constants.N_examples, 'N_firms': 5, 'N_firms_pay': 3, 'rows': range(1, 7), 'columns': range(1, 11) } def check_portfolios_1_error_message(self, value): if value != 'Yes': self.player.incorrect_portfolios_1 += 1 return 'Incorrect answer' class Portfolios2(Page): form_model = 'player' form_fields = ['check_portfolios_2'] def vars_for_template(self): return { 'N_examples': Constants.N_examples, 'N_firms': 5, 'N_firms_pay': 3, 'rows': range(1, 7), 'columns': range(1, 11) } def check_portfolios_2_error_message(self, value): if value != 'No': self.player.incorrect_portfolios_2 += 1 return 'Incorrect answer' class Portfolios3(Page): form_model = 'player' form_fields = ['check_portfolios_3'] def vars_for_template(self): return { 'N_examples': Constants.N_examples, 'N_firms': 3, 'N_firms_pay': 2, 'rows': range(1, 7), 'columns': range(1, 11) } def check_portfolios_3_error_message(self, value): if value != 'Yes': self.player.incorrect_portfolios_3 += 1 return 'Incorrect answer' class Portfolios4(Page): form_model = 'player' form_fields = ['check_portfolios_4'] def vars_for_template(self): return { 'N_examples': Constants.N_examples, 'N_firms': 6, 'N_firms_pay': 4, 'rows': range(1, 7), 'columns': range(1, 11) } def check_portfolios_4_error_message(self, value): if value != 'No': self.player.incorrect_portfolios_4 += 1 return 'Incorrect answer' class Industries1(Page): form_model = 'player' form_fields = ['check_industries_1', 'check_payoff_1'] def vars_for_template(self): return { 'N_examples': Constants.N_examples, 'N_firms': 4, 'N_firms_pay': 3, 'rows': range(1, 4), 'columns': range(1, 11) } def check_industries_1_error_message(self, value): if value != 3: self.player.incorrect_industries_1 += 1 return 'Incorrect answer' def check_payoff_1_error_message(self, value): if value != 'No': self.player.incorrect_payoff_1 += 1 return 'Incorrect answer' class Industries2(Page): form_model = 'player' form_fields = ['check_industries_2', 'check_payoff_2'] def vars_for_template(self): return { 'N_examples': Constants.N_examples, 'N_firms': 5, 'N_firms_pay': 2, 'rows': range(1, 4), 'columns': range(1, 11) } def check_industries_2_error_message(self, value): if value != 2: self.player.incorrect_industries_2 += 1 return 'Incorrect answer' def check_payoff_2_error_message(self, value): if value != 'No': self.player.incorrect_payoff_2 += 1 return 'Incorrect answer' class Industries3(Page): form_model = 'player' form_fields = ['check_industries_3', 'check_payoff_3'] def vars_for_template(self): return { 'N_examples': Constants.N_examples, 'N_firms': 6, 'N_firms_pay': 3, 'rows': range(1, 4), 'columns': range(1, 11) } def check_industries_3_error_message(self, value): if value != 1: self.player.incorrect_industries_3 += 1 return 'Incorrect answer' def check_payoff_3_error_message(self, value): if value != 'Yes': self.player.incorrect_payoff_3 += 1 return 'Incorrect answer' class StartMain(Page): def vars_for_template(self): return { 'bonus': c(self.session.vars['bonus']['elicit']) } page_sequence = [ General, Portfolios1, Portfolios2, Portfolios3, Portfolios4, Industries1, Industries2, Industries3, StartMain ]