from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Hinweise(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout def is_displayed(self): return not self.player.is_redundant class Aufgabe1(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout def vars_for_template(self): num_players = len(self.subsession.get_players()) ppg = self.session.config['ppg'] return dict( num_players=int(num_players - (num_players % ppg)) ) def is_displayed(self): return not self.player.is_redundant class EntscheidungA(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout def is_displayed(self): return self.player.id_in_group == 1 and not self.player.is_redundant class EntscheidungB(Page): timer_text = Constants.timertext_hard timeout_seconds = Constants.timeout form_model = 'group' def get_form_fields(self): if self.session.config['name'] == 'human2': return ['takeb'] else: return ['takeb1', 'takeb2', 'takeb3', 'takeb4', 'takeb5', 'takeb6', 'takeb7', 'takeb8', 'takeb9', 'takeb10'] def vars_for_template(self): temp = dict() if self.session.config['name'] == 'human1': temp['treatment'] = 1 else: temp['treatment'] = 2 return temp def before_next_page(self): if self.timeout_happened: g = self.group self.player.isDropout = True g.hasDropout = True g.takeb10 = None g.takeb9 = None g.takeb8 = None g.takeb7 = None g.takeb6 = None g.takeb5 = None g.takeb4 = None g.takeb3 = None g.takeb2 = None g.takeb1 = None g.takeb = None def is_displayed(self): return self.player.id_in_group == 2 and not self.player.is_redundant class EntscheidungC(Page): timer_text = Constants.timertext_hard timeout_seconds = Constants.timeout form_model = 'group' form_fields = ['takemax'] def before_next_page(self): if self.timeout_happened: self.player.isDropout = True self.group.hasDropout = True self.group.takemax = None def is_displayed(self): return self.player.id_in_group == 3 and not self.player.is_redundant class EntscheidungWait(WaitPage): after_all_players_arrive = 'set_payoff1' def is_displayed(self): return not self.player.is_redundant and not self.group.hasDropout class Aufgabe2(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout def vars_for_template(self): temp = dict( role=self.player.id_in_group ) if self.session.config['name'] == 'human1': temp['treatment'] = 1 else: temp['treatment'] = 2 return temp def is_displayed(self): return not self.player.is_redundant and (self.group.hasDropout is not True) class Schaetzung(Page): timer_text = Constants.timertext_hard timeout_seconds = Constants.timeout form_model = 'player' form_fields = ['guess'] def vars_for_template(self): temp = dict( role=self.player.id_in_group ) if self.session.config['name'] == 'human1': temp['treatment'] = 1 else: temp['treatment'] = 2 return temp def before_next_page(self): if self.timeout_happened: self.player.isDropout = True self.group.hasDropout = True self.player.guess = None else: self.player.guess = round(self.player.guess, 1) def is_displayed(self): return not self.player.is_redundant and not self.group.hasDropout class SchaetzungWait(WaitPage): wait_for_all_groups = True after_all_players_arrive = 'set_payoff2' def is_displayed(self): return not self.player.is_redundant and not self.group.hasDropout class Fragen(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout def is_displayed(self): return not self.player.is_redundant and not self.group.hasDropout class Fragen0(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout form_model = 'player' form_fields = ['birthyear', 'gender', 'isStudent'] def is_displayed(self): return not self.group.hasDropout and not self.player.is_redundant class Fragen1(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout form_model = 'player' def get_form_fields(self): if self.player.isStudent: return ['school', 'enrolled'] else: return ['job'] def is_displayed(self): return not self.player.is_redundant and not self.group.hasDropout class Fragen2(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout form_model = 'player' form_fields = ['test'] def vars_for_template(self): temp = dict() if self.session.config['name'] == 'human1': temp['treatment'] = 1 else: temp['treatment'] = 2 return temp def is_displayed(self): return not self.player.is_redundant and not self.group.hasDropout class Anmerkungen(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout form_model = 'player' form_fields = ['comment'] def is_displayed(self): return not self.player.is_redundant and not self.group.hasDropout class Ueberfluessige(Page): def is_displayed(self): return self.player.is_redundant def before_next_page(self): self.player.payoff = 4 class Abbrecher(Page): def is_displayed(self): return self.player.isDropout def before_next_page(self): self.player.payoff = 2.4 class Opfer(Page): def is_displayed(self): return not self.player.isDropout and self.group.hasDropout def before_next_page(self): self.player.payoff = 4 class Verguetung(Page): timer_text = Constants.timertext_soft timeout_seconds = Constants.timeout def vars_for_template(self): p = self.player p.ecu_total = p.ecu0 + p.ecu1 + p.ecu2 def before_next_page(self): p = self.player p.payoff = p.ecu_total * 1.2 def is_displayed(self): return not self.player.is_redundant and not self.group.hasDropout class Code(Page): form_model = 'player' form_fields = ['confirmation'] def vars_for_template(self): p = self.player if not (self.player.is_redundant or self.group.hasDropout): ecu = p.ecu_total euros = self.player.payoff else: ecu = None euros = self.player.payoff return dict( ecu=ecu, euros=euros ) def confirmation_error_message(self, value): if value is not True: return "Notieren Sie sich bitte den Code, bevor Sie fortfahren." class Dank(Page): pass page_sequence = [Hinweise, Aufgabe1, EntscheidungA, EntscheidungB, EntscheidungC, EntscheidungWait, Aufgabe2, Schaetzung, SchaetzungWait, Fragen, Fragen0, Fragen1, Fragen2, Anmerkungen, Ueberfluessige, Abbrecher, Opfer, Verguetung, Code, Dank]