from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class MyPage(Page): pass class Part1_Intro(Page): def is_displayed(self): return self.round_number == 1 def vars_for_template(self): return { 'example_fixed_rate': c(0.15), 'example_piece_rate_l': c(0.1), 'example_piece_rate_h': c(0.2), 'show_up_fee': self.session.config['participation_fee'], 'example_tasks_chosen': 50, 'earnings_fixed': c(0.15)*50, 'total_pay_fixed': c(0.15)*50+self.session.config['participation_fee'], 'earnings_piece_h': c(0.2)*50, 'earnings_piece_l': c(0.1) * 50, 'total_pay_piece_h': c(0.2)*50+self.session.config['participation_fee'], 'total_pay_piece_l': c(0.1) * 50 + self.session.config['participation_fee'], 'low_rate': c(0), 'hi_rate': c(0.4), 'mandatory_tasks': self.session.config['mandatory_rounds'], } class Deterministic_Choices(Page): def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['Det'] form_model = 'player' form_fields = ['tasks_1','checkslider1', 'tasks_2', 'checkslider2', \ 'tasks_3', 'checkslider3', 'tasks_4', 'checkslider4', \ 'tasks_4', 'checkslider5','tasks_6', 'checkslider6', 'tasks_7', 'checkslider7','tasks_8', 'checkslider8', 'tasks_9', 'checkslider9',] def vars_for_template(self): return { 'min_range': Constants.min_tasks, 'max_range': Constants.max_tasks, 'mandatory_tasks': self.session.config['mandatory_rounds'], 'step': 1, 'rate1': self.player.rate_1_wage_l, 'rate2': self.player.rate_2_wage_l, 'rate3': self.player.rate_3_wage_l, 'rate4': self.player.rate_4_wage_l, 'rate5': self.player.rate_5_wage_l, 'rate6': self.player.rate_6_wage_l, 'rate7': self.player.rate_7_wage_l, 'rate8': self.player.rate_8_wage_l, 'rate9': self.player.rate_9_wage_l, } def checkslider1_error_message(self, value): if not value: return 'Please move the slider for Slider 1 before submitting.' def checkslider2_error_message(self, value): if not value: return 'Please move the slider for Slider 2 before submitting.' def checkslider3_error_message(self, value): if not value: return 'Please move the slider for Slider 3 before submitting.' def checkslider4_error_message(self, value): if not value: return 'Please move the slider for Slider 4 before submitting.' def checkslider5_error_message(self, value): if not value: return 'Please move the slider for Slider 5 before submitting.' def checkslider6_error_message(self, value): if not value: return 'Please move the slider for Slider 6 before submitting.' def checkslider7_error_message(self, value): if not value: return 'Please move the slider for Slider 7 before submitting.' def checkslider8_error_message(self, value): if not value: return 'Please move the slider for Slider 8 before submitting.' def checkslider9_error_message(self, value): if not value: return 'Please move the slider for Slider 9 before submitting.' def before_next_page(self): if self.round_number==1: self.player.Listify_List1() if self.round_number == Constants.num_rounds: self.player.Listify_List2() class Stochastic_Choices(Page): def is_displayed(self): return self.round_number == self.participant.vars['task_rounds']['Stoch'] form_model = 'player' form_fields = ['tasks_1','checkslider1', 'tasks_2', 'checkslider2', \ 'tasks_3', 'checkslider3', 'tasks_4', 'checkslider4', \ 'tasks_4', 'checkslider5','tasks_6', 'checkslider6', 'tasks_7', 'checkslider7','tasks_8', 'checkslider8', 'tasks_9', 'checkslider9',] def vars_for_template(self): return { 'min_range': Constants.min_tasks, 'max_range': Constants.max_tasks, 'mandatory_tasks': self.session.config['mandatory_rounds'], 'step': 1, 'rate1_l': self.player.rate_1_wage_l, 'rate2_l': self.player.rate_2_wage_l, 'rate3_l': self.player.rate_3_wage_l, 'rate4_l': self.player.rate_4_wage_l, 'rate5_l': self.player.rate_5_wage_l, 'rate6_l': self.player.rate_6_wage_l, 'rate7_l': self.player.rate_7_wage_l, 'rate8_l': self.player.rate_8_wage_l, 'rate9_l': self.player.rate_9_wage_l, 'rate1_h': self.player.rate_1_wage_h, 'rate2_h': self.player.rate_2_wage_h, 'rate3_h': self.player.rate_3_wage_h, 'rate4_h': self.player.rate_4_wage_h, 'rate5_h': self.player.rate_5_wage_h, 'rate6_h': self.player.rate_6_wage_h, 'rate7_h': self.player.rate_7_wage_h, 'rate8_h': self.player.rate_8_wage_h, 'rate9_h': self.player.rate_9_wage_h, } def checkslider1_error_message(self, value): if not value: return 'Please move the slider for Slider 1 before submitting.' def checkslider2_error_message(self, value): if not value: return 'Please move the slider for Slider 2 before submitting.' def checkslider3_error_message(self, value): if not value: return 'Please move the slider for Slider 3 before submitting.' def checkslider4_error_message(self, value): if not value: return 'Please move the slider for Slider 4 before submitting.' def checkslider5_error_message(self, value): if not value: return 'Please move the slider for Slider 5 before submitting.' def checkslider6_error_message(self, value): if not value: return 'Please move the slider for Slider 6 before submitting.' def checkslider7_error_message(self, value): if not value: return 'Please move the slider for Slider 7 before submitting.' def checkslider8_error_message(self, value): if not value: return 'Please move the slider for Slider 8 before submitting.' def checkslider9_error_message(self, value): if not value: return 'Please move the slider for Slider 9 before submitting.' def before_next_page(self): if self.round_number==1: self.player.Listify_List1() if self.round_number == Constants.num_rounds: self.player.Listify_List2() page_sequence = [ Part1_Intro, Deterministic_Choices, Stochastic_Choices ]