from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Valuation1(Page): def is_displayed(self): return self.round_number == 1 # form model # ---------------------------------------------------------------------------------------------------------------- form_model = 'player' # form fields # ---------------------------------------------------------------------------------------------------------------- def get_form_fields(self): # unzip list of form_fields from list form_fields = [list(t) for t in zip(*self.participant.vars['val1_choices'])][1] # provide form field associated with pagination or full list return form_fields def vars_for_template(self): return { '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'], 'choices': self.player.participant.vars['val1_choices'] } # set payoff, determine consistency, and set switching row # ---------------------------------------------------------------------------------------------------------------- def before_next_page(self): # unzip indices and form fields from list round_number = self.subsession.round_number form_fields = [list(t) for t in zip(*self.participant.vars['val1_choices'])][1] indices = [list(t) for t in zip(*self.participant.vars['val1_choices'])][0] index = indices[round_number - 1] for j, choice in zip(indices, form_fields): choice_i = getattr(self.player, choice) self.participant.vars['val1_choices_made'][j - 1] = choice_i # determine consistency self.player.set_val1consistency() # set switching row self.player.set_val1switching_row() class Valuation2(Page): def is_displayed(self): return self.round_number == 1 # form model # ---------------------------------------------------------------------------------------------------------------- form_model = 'player' # form fields # ---------------------------------------------------------------------------------------------------------------- def get_form_fields(self): # unzip list of form_fields from list form_fields2 = [list(t) for t in zip(*self.participant.vars['val2_choices'])][1] # provide form field associated with pagination or full list return form_fields2 def vars_for_template(self): return { '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'], 'choices': self.player.participant.vars['val2_choices'] } # set payoff, determine consistency, and set switching row # ---------------------------------------------------------------------------------------------------------------- def before_next_page(self): # unzip indices and form fields from list round_number = self.subsession.round_number form_fields2 = [list(t) for t in zip(*self.participant.vars['val2_choices'])][1] indices = [list(t) for t in zip(*self.participant.vars['val2_choices'])][0] index = indices[round_number - 1] for j, choice in zip(indices, form_fields2): choice_i = getattr(self.player, choice) self.participant.vars['val2_choices_made'][j - 1] = choice_i # determine consistency self.player.set_val2consistency() # set switching row self.player.set_val2switching_row() class Valuation3(Page): def is_displayed(self): return self.round_number == 1 # form model # ---------------------------------------------------------------------------------------------------------------- form_model = 'player' # form fields # ---------------------------------------------------------------------------------------------------------------- def get_form_fields(self): # unzip list of form_fields from list form_fields3 = [list(t) for t in zip(*self.participant.vars['val3_choices'])][1] # provide form field associated with pagination or full list return form_fields3 def vars_for_template(self): return { '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'], 'choices': self.player.participant.vars['val3_choices'] } # set payoff, determine consistency, and set switching row # ---------------------------------------------------------------------------------------------------------------- def before_next_page(self): # unzip indices and form fields from list round_number = self.subsession.round_number form_fields3 = [list(t) for t in zip(*self.participant.vars['val3_choices'])][1] indices = [list(t) for t in zip(*self.participant.vars['val3_choices'])][0] index = indices[round_number - 1] for j, choice in zip(indices, form_fields3): choice_i = getattr(self.player, choice) self.participant.vars['val3_choices_made'][j - 1] = choice_i # determine consistency self.player.set_val3consistency() # set switching row self.player.set_val3switching_row() class Valuation4(Page): def is_displayed(self): return self.round_number == 1 # form model # ---------------------------------------------------------------------------------------------------------------- form_model = 'player' # form fields # ---------------------------------------------------------------------------------------------------------------- def get_form_fields(self): # unzip list of form_fields from list form_fields4 = [list(t) for t in zip(*self.participant.vars['val4_choices'])][1] # provide form field associated with pagination or full list return form_fields4 def vars_for_template(self): return { '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'], 'choices': self.player.participant.vars['val4_choices'] } # set payoff, determine consistency, and set switching row # ---------------------------------------------------------------------------------------------------------------- def before_next_page(self): # unzip indices and form fields from list round_number = self.subsession.round_number form_fields4 = [list(t) for t in zip(*self.participant.vars['val4_choices'])][1] indices = [list(t) for t in zip(*self.participant.vars['val4_choices'])][0] index = indices[round_number - 1] for j, choice in zip(indices, form_fields4): choice_i = getattr(self.player, choice) self.participant.vars['val4_choices_made'][j - 1] = choice_i # determine consistency self.player.set_val4consistency() # set switching row self.player.set_val4switching_row() class PreValuation(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'], '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 DetailTimeline(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'], '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 RecapQuiz(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'], '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 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 Expectations(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['exp_date2', 'exp_failure'] def error_message(self, values): if values['exp_date2'] + 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 = [PreValuation, Valuation1, Valuation2, Valuation3, Valuation4, ChooseReward1, ChooseReward2, Expectations, ThankYou ]