from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class ConsentPage(Page): form_model = 'player' form_fields = ['consentWant'] def before_next_page(self): match_info = self.subsession.simulate_get_matched_info() self.player.player_role = match_info[1] self.player.match_id = match_info[0] def error_message(self, values): if values['consentWant'] == False: return 'You are not elegible for this study. Please talk to your teacher to receive an alternate assignment.' class IntroductionPage(Page): form_model = 'player' form_fields = ['sonaId', 'huskyId', 'full_name'] def before_next_page(self): match_info = self.subsession.get_matched_info() self.player.player_role = match_info[1] self.player.match_id = match_info[0] if self.player.is_estimator(): self.player.disclosure = self.player.matched_advisor().disclosure elif self.player.is_judge(): self.player.disclosure = self.player.matched_estimator().disclosure else: self.player.disclosure = self.subsession.get_next_disclosure() def error_message(self, values): if len(values["sonaId"]) < 4: return 'Please enter a valid Sona ID.' class OverviewPage(Page): form_model = 'player' def vars_for_template(self): return dict() class InstructionPage(Page): form_model = 'player' class AdvPaymentSchemePage(Page): form_model = 'player' form_fields = ['manip_adv_adviser_payment_question', 'manip_adv_estimator_payment_question'] def is_displayed(self): return self.player.is_advisor() def error_message(self, values): if values["manip_adv_adviser_payment_question"]: return 'Not the right choice. Please read the instructions carefully.' if not values["manip_adv_estimator_payment_question"]: return 'Not the right choice. Please read the instructions carefully.' class DisclosureInfoPage(Page): form_model = 'player' def get_form_fields(self): if self.player.disclosure: return ['manip_adv_payment_scheme_disclosed'] else: return ['manip_adv_payment_scheme_not_disclosed'] def is_displayed(self): return self.player.is_advisor() def error_message(self, values): if self.player.disclosure: if not values['manip_adv_payment_scheme_disclosed']: return 'Not the right choice. Please read the instructions carefully.' else: if not values['manip_adv_payment_scheme_not_disclosed']: return 'Not the right choice. Please read the instructions carefully.' class AdvAdvicePage(Page): form_model = 'player' form_fields = ['recommendation'] def is_displayed(self): return self.player.is_advisor() class EstPaymentSchemePage(Page): form_model = 'player' form_fields = ['manip_est_estimator_payment_question'] def is_displayed(self): return self.player.is_estimator() def error_message(self, values): if values['manip_est_estimator_payment_question'] == False: return 'Not the right choice. Please read the instructions carefully' class EstEstimatePage(Page): form_model = 'player' form_fields = ['estimate'] def is_displayed(self): return self.player.is_estimator() def before_next_page(self): self.player.set_number_off() class EstRevealPreamblePage(Page): form_model = 'player' def is_displayed(self): return self.player.is_estimator() class EstRevealPage(Page): form_model = 'player' def is_displayed(self): return self.player.is_estimator() class EstAppealPage(Page): form_model = 'player' form_fields = ['appealed'] def is_displayed(self): return self.player.is_estimator() class EstPostAppealPage(Page): form_model = 'player' def is_displayed(self): return self.player.is_estimator() class JudgeExamplePage(Page): form_model = 'player' form_fields = ['manip_judge_est_payment_question', 'manip_judge_adv_payment_question'] def is_displayed(self): return self.player.is_judge() def error_message(self, values): if values['manip_judge_est_payment_question'] == False: return 'Not the right choice. Please read the instructions carefully.' if values['manip_judge_adv_payment_question'] == True: return 'Not the right choice. Please read the instructions carefully.' class JudgeCaseAndJudgement(Page): form_model = 'player' form_fields = ['manip_judge_disclosed_case_question', 'manip_judge_est_case_question', 'manip_judge_adv_case_question'] def is_displayed(self): return self.player.is_judge() def error_message(self, values): if values['manip_judge_est_case_question'] == False: return 'Not the right choice. Please read the instructions carefully' if values['manip_judge_adv_case_question'] == True: return 'Not the right choice. Please read the instructions carefully' class JudgeJudgement(Page): form_model = 'player' def is_displayed(self): return self.player.is_judge() class JudgeJudgementSummary(Page): form_model = 'player' form_fields = ['appeal_granted'] def is_displayed(self): return self.player.is_judge() class BlamePage(Page): form_model = 'player' def get_form_fields(self): if self.player.is_estimator(): return ['blame_EST_I_blame_myself_for_my_guess', 'blame_EST_I_blame_the_adviser_for_my_guess', 'blame_EST_I_have_a_legitimate_grievance_against_the_adviser', 'blame_EST_I_have_a_strong_case_if_I_choose_to_pursue_an_appeal', 'blame_EST_I_believe_that_others_would_rule_in_my_favor', 'blame_EST_The_adviser_treated_me_fairly', 'blame_EST_I_was_mistreated_by_the_adviser', 'blame_EST_I_deserve_to_receive_the_full_bonus' ] elif self.player.is_judge(): return ['blame_JUDGE_I_blame_the_estimator_for_their_guess', 'blame_JUDGE_I_blame_the_adviser_for_the_estimators_guess', 'blame_JUDGE_estimator_has_legitimate_grievance_against_adviser', 'blame_JUDGE_estimator_has_a_strong_case_to_pursue_an_appeal', 'blame_JUDGE_I_believe_others_would_rule_in_estimators_favor', 'blame_JUDGE_The_adviser_treated_the_estimator_fairly', 'blame_JUDGE_The_estimator_was_mistreated_by_the_adviser', 'blame_JUDGE_The_estimator_deserves_to_receive_the_full_bonus' ] def is_displayed(self): return self.player.is_estimator() or self.player.is_judge() class PostQuestionsPage(Page): form_model = 'player' form_fields = ['manip_final_adviser_payment_question', 'manip_final_estimator_payment_question', 'manip_final_conflict_disclosed_or_not'] def before_next_page(self): if self.player.is_advisor() or self.player.is_estimator(): if self.player.manip_final_estimator_payment_question == False: self.player.all_comprehension_correct = False elif self.player.manip_final_adviser_payment_question == True: self.player.all_comprehension_correct = False elif self.player.manip_final_conflict_disclosed_or_not == False: self.player.all_comprehension_correct = False else: self.player.all_comprehension_correct = True if self.player.is_estimator() and self.player.all_comprehension_correct == False: #release advisor self.player.matched_advisor().matched = False self.player.match_id = -1 class ClarificationQuestionsPage(Page): form_model = 'player' form_fields = ['appeal_question_clarify'] def is_displayed(self): return not self.player.is_advisor() class Demographics1(Page): form_model = 'player' class Demographics2(Page): form_model = 'player' form_fields = ['gender', 'age', 'race'] class Comments(Page): form_model = 'player' form_fields = ['comment'] def before_next_page(self): self.player.survey_complete = True class FinishPage(Page): form_model = 'player' page_sequence = [ConsentPage, IntroductionPage, OverviewPage, InstructionPage, AdvPaymentSchemePage, DisclosureInfoPage, AdvAdvicePage, EstPaymentSchemePage, EstEstimatePage, EstRevealPreamblePage, EstRevealPage, EstAppealPage, EstPostAppealPage, JudgeExamplePage, JudgeCaseAndJudgement, JudgeJudgement, JudgeJudgementSummary, BlamePage, PostQuestionsPage, ClarificationQuestionsPage, Demographics1, Demographics2, Comments, FinishPage]