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 { 'date_4': self.session.config['day4'], 'date_5': self.session.config['day5'], 'date_8': self.session.config['day8'], 'completion_fee': self.session.config['participation_fee'], '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_5', 'checkslider5','tasks_6', 'checkslider6', 'tasks_7', 'checkslider7','tasks_8', 'checkslider8', 'tasks_9', 'checkslider9','tasks_10', 'checkslider10'] def vars_for_template(self): return { 'date_4': self.session.config['day4'], 'date_5': self.session.config['day5'], 'date_8': self.session.config['day8'], '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, 'rate10': self.player.rate_10_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 checkslider10_error_message(self, value): if not value: return 'Please move the slider for Slider 9 before submitting.' def before_next_page(self): self.player.Listify_Det() 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_5', 'checkslider5','tasks_6', 'checkslider6', 'tasks_7', 'checkslider7','tasks_8', 'checkslider8', 'tasks_9', 'checkslider9','tasks_10','checkslider10', \ 'tasks_11','checkslider11','tasks_12', 'checkslider12', \ 'tasks_13', 'checkslider13', 'tasks_14', 'checkslider14', \ 'tasks_15', 'checkslider15','tasks_16', 'checkslider16', 'tasks_17', 'checkslider17','tasks_18', 'checkslider18', 'tasks_19', 'checkslider19', 'tasks_20', 'checkslider20'] 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, 'rate10_l': self.player.rate_10_wage_l, 'rate11_l': self.player.rate_11_wage_l, 'rate12_l': self.player.rate_12_wage_l, 'rate13_l': self.player.rate_13_wage_l, 'rate14_l': self.player.rate_14_wage_l, 'rate15_l': self.player.rate_15_wage_l, 'rate16_l': self.player.rate_16_wage_l, 'rate17_l': self.player.rate_17_wage_l, 'rate18_l': self.player.rate_18_wage_l, 'rate19_l': self.player.rate_19_wage_l, 'rate20_l': self.player.rate_20_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, 'rate10_h': self.player.rate_10_wage_h, 'rate11_h': self.player.rate_11_wage_h, 'rate12_h': self.player.rate_12_wage_h, 'rate13_h': self.player.rate_13_wage_h, 'rate14_h': self.player.rate_14_wage_h, 'rate15_h': self.player.rate_15_wage_h, 'rate16_h': self.player.rate_16_wage_h, 'rate17_h': self.player.rate_17_wage_h, 'rate18_h': self.player.rate_18_wage_h, 'rate19_h': self.player.rate_19_wage_h, 'rate20_h': self.player.rate_20_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 checkslider10_error_message(self, value): if not value: return 'Please move the slider for Slider 1 before submitting.' def checkslider11_error_message(self, value): if not value: return 'Please move the slider for Slider 1 before submitting.' def checkslider12_error_message(self, value): if not value: return 'Please move the slider for Slider 2 before submitting.' def checkslider13_error_message(self, value): if not value: return 'Please move the slider for Slider 3 before submitting.' def checkslider14_error_message(self, value): if not value: return 'Please move the slider for Slider 4 before submitting.' def checkslider15_error_message(self, value): if not value: return 'Please move the slider for Slider 5 before submitting.' def checkslider16_error_message(self, value): if not value: return 'Please move the slider for Slider 6 before submitting.' def checkslider17_error_message(self, value): if not value: return 'Please move the slider for Slider 7 before submitting.' def checkslider18_error_message(self, value): if not value: return 'Please move the slider for Slider 8 before submitting.' def checkslider19_error_message(self, value): if not value: return 'Please move the slider for Slider 9 before submitting.' def checkslider20_error_message(self, value): if not value: return 'Please move the slider for Slider 9 before submitting.' def before_next_page(self): self.player.Listify_Stoch() class ChooseReward1(Page): def is_displayed(self): return self.round_number == 1 def vars_for_template(self): return { 'completion_fee': self.session.config['participation_fee'], 'failure_fee': c(self.session.config['incomplete_fee']), 'mandatory_tasks': self.session.config['mandatory_rounds'], 'reward_tasks': self.session.config['workreward_tasks'], } class ChooseReward2(Page): def is_displayed(self): return self.round_number == 1 def vars_for_template(self): return { 'reward': self.player.rewardchosen, 'completion_fee': self.session.config['participation_fee'], 'reward_tasks': self.session.config['workreward_tasks'], 'failure_fee': c(self.session.config['incomplete_fee']), 'mandatory_tasks': self.session.config['mandatory_rounds'], 'date_1': self.session.config['day1'], 'date_2': self.session.config['day2'], 'date_3': self.session.config['day3'], 'date_4': self.session.config['day4'], 'date_5': self.session.config['day5'], 'date_6': self.session.config['day6'], 'date_7': self.session.config['day7'], 'date_8': self.session.config['day8'] } class AdditionalTasks(Page): def is_displayed(self): return self.round_number == 1 def vars_for_template(self): return { 'image_path': self.player.taskdistchosen, 'reward': self.player.rewardchosen, 'completion_fee': self.session.config['participation_fee'], 'failure_fee': c(self.session.config['incomplete_fee']), 'mandatory_tasks': self.session.config['mandatory_rounds'], 'date_1': self.session.config['day1'], 'date_2': self.session.config['day2'], 'date_3': self.session.config['day3'], 'date_4': self.session.config['day4'], 'date_5': self.session.config['day5'], 'date_6': self.session.config['day6'], 'date_7': self.session.config['day7'], 'date_8': self.session.config['day8'] } class Expectations(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['exp_date2', 'exp_date3', 'exp_failure'] def error_message(self, values): if values['exp_date2'] + values['exp_date3'] + values['exp_failure'] != 100: return 'Your entries must add up to 100' def vars_for_template(self): return { 'image_path': self.player.taskdistchosen, 'reward': self.player.rewardchosen, 'completion_fee': self.session.config['participation_fee'], 'reward_tasks': self.session.config['workreward_tasks'], 'failure_fee': c(self.session.config['incomplete_fee']), 'mandatory_tasks': self.session.config['mandatory_rounds'], 'date_1': self.session.config['day1'], 'date_2': self.session.config['day2'], 'date_3': self.session.config['day3'], 'date_4': self.session.config['day4'], 'date_5': self.session.config['day5'], 'date_6': self.session.config['day6'], 'date_7': self.session.config['day7'], 'date_8': self.session.config['day8'] } class ThankYou(Page): def is_displayed(self): return self.round_number == 1 def vars_for_template(self): return { 'date_2': self.session.config['day2'] } page_sequence = [ Part1_Intro, Deterministic_Choices, ChooseReward1, ChooseReward2, Expectations, ThankYou ]