from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import math class Introduction(Page): def is_displayed(self): return self.round_number == 1 def before_next_page(self): self.player.get_setting() self.player.get_type() class Instructions(Page): def is_displayed(self): return self.round_number == 1 class IntroductionControl(Page): def is_displayed(self): return self.round_number == 1 class Control1(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['q1_expert', 'q1_customer'] def error_message(self, values): if self.player.q1_counter < 2: if values['q1_expert'] != Constants.q1[1] or values['q1_customer'] != Constants.q1[0]: self.player.q1_counter += 1 return "Bitte überprüfen Sie Ihre Eingaben!" if self.player.q1_counter >= 2: if values['q1_expert'] != Constants.q1[1] or values['q1_customer'] != Constants.q1[0]: self.player.q1_counter += 1 return "Bitte überprüfen Sie Ihre Eingaben! Wenn Sie Hilfe beim Beantworten der Fragen brauchen, bitte " \ "heben Sie Ihre Hand. Ein Experimentleiter wird zu Ihnen kommen und die Fragen mit Ihnen durchgehen!" class Control2(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['q2_expert', 'q2_customer'] def error_message(self, values): if self.player.q2_counter < 2: if values['q2_expert'] != Constants.q2[1] or values['q2_customer'] != Constants.q2[0]: self.player.q2_counter += 1 return "Bitte überprüfen Sie Ihre Eingaben!" if self.player.q2_counter >= 2: if values['q2_expert'] != Constants.q2[1] or values['q2_customer'] != Constants.q2[0]: self.player.q2_counter += 1 return "Bitte überprüfen Sie Ihre Eingaben! Wenn Sie Hilfe beim Beantworten der Fragen brauchen, bitte " \ "heben Sie Ihre Hand. Ein Experimentleiter wird zu Ihnen kommen und die Fragen mit Ihnen durchgehen!" class Control3(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['q3_expert', 'q3_customer'] def error_message(self, values): if self.player.q3_counter < 2: if values['q3_expert'] != Constants.q3[1] or values['q3_customer'] != Constants.q3[0]: self.player.q3_counter += 1 return "Bitte überprüfen Sie Ihre Eingaben!" if self.player.q3_counter >= 2: if values['q3_expert'] != Constants.q3[1] or values['q3_customer'] != Constants.q3[0]: self.player.q3_counter += 1 return "Bitte überprüfen Sie Ihre Eingaben! Wenn Sie Hilfe beim Beantworten der Fragen brauchen, bitte " \ "heben Sie Ihre Hand. Ein Experimentleiter wird zu Ihnen kommen und die Fragen mit Ihnen durchgehen!" class Control4(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['q4_expert', 'q4_customer'] def error_message(self, values): if self.player.q4_counter < 2: if values['q4_expert'] != Constants.q4[1] or values['q4_customer'] != Constants.q4[0]: self.player.q4_counter += 1 return "Bitte überprüfen Sie Ihre Eingaben!" if self.player.q4_counter >= 2: if values['q4_expert'] != Constants.q4[1] or values['q4_customer'] != Constants.q4[0]: self.player.q4_counter += 1 return "Bitte überprüfen Sie Ihre Eingaben! Wenn Sie Hilfe beim Beantworten der Fragen brauchen, bitte " \ "heben Sie Ihre Hand. Ein Experimentleiter wird zu Ihnen kommen und die Fragen mit Ihnen durchgehen!" class AllGroupsWaitPage(WaitPage): def is_displayed(self): return self.round_number == 1 wait_for_all_groups = True class IntroductionMain(Page): def is_displayed(self): return self.round_number == 1 class IntroductionTypes(Page): def is_displayed(self): return self.round_number == 1 class AllGroupsWaitPage2(WaitPage): def is_displayed(self): return self.round_number == 1 wait_for_all_groups = True class Expert1(Page): def is_displayed(self): return self.player.role() in ('A', 'B', 'C', 'D') form_model = 'group' form_fields = ['price_hqt', 'price_lqt'] def error_message(self, values): if values['price_hqt'] < values['price_lqt']: return 'Der Preis für die Behandlung mit hoher Qualität muss höher sein als der Preis für die Behandlung mit niedriger Qualität.' class SimpleWaitPage1(WaitPage): pass class Customer1(Page): def is_displayed(self): return self.player.role() in ('S1', 'S2', 'S3', 'S4') form_model = 'group' form_fields = ['cir'] class SimpleWaitPage2(WaitPage): pass class Expert2(Page): def is_displayed(self): return self.player.role() in ('A', 'B', 'C', 'D') form_model = 'group' form_fields = ['expert_proposed_solution'] class SimpleWaitPage3(WaitPage): pass class Customer2(Page): def is_displayed(self): return self.player.role() in ('S1', 'S2', 'S3', 'S4') form_model = 'group' form_fields = ['enter_market'] class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class Results(Page): pass class AllGroupsWaitPage3(WaitPage): def is_displayed(self): return self.round_number == 5 wait_for_all_groups = True class RiskPreferences(Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = 'player' form_fields = ['risk_invest'] class Survey(Page): def is_displayed(self): return self.round_number == Constants.num_rounds form_model = 'player' form_fields = ['survey_age', 'survey_gender', 'survey_faculty', 'survey_knowledge', 'survey_charity', 'survey_insurance_accident', 'survey_insurance_additional_health', 'survey_insurance_car', 'survey_insurance_electronics_big', 'survey_insurance_electronics_small', 'survey_insurance_travel', 'survey_insurance_life', 'survey_insurance_legal', 'survey_insurance_household', 'survey_insurance_other'] def before_next_page(self): self.player.set_risk_payoffs() class FinalResults(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): payoff_part1 = self.participant.payoff - self.player.risk_payoff + c(80) payoff_sum_ecu = payoff_part1 + self.player.risk_payoff payoff_ceiled = 0.5 * math.ceil(self.participant.payoff_plus_participation_fee()/0.5) return { 'payoff_part1': payoff_part1, 'payoff_sum_ecu': payoff_sum_ecu, 'payoff_ceiled': payoff_ceiled } page_sequence = [ Introduction, Instructions, IntroductionControl, Control1, Control2, Control3, Control4, AllGroupsWaitPage, IntroductionMain, IntroductionTypes, AllGroupsWaitPage2, Expert1, SimpleWaitPage1, Customer1, SimpleWaitPage2, Expert2, SimpleWaitPage3, Customer2, ResultsWaitPage, Results, AllGroupsWaitPage3, RiskPreferences, Survey, FinalResults ]