from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Welcome(Page): form_model = 'player' form_fields = ['mturk_id', 'female', 'age', 'education', 'employment', 'experience', 'state', 'income', 'ethnicity'] class Attention(Page): form_model = 'player' form_fields = ['attention'] def before_next_page(self): self.player.participant.vars['mturk_id'] = self.player.mturk_id if self.player.attention != 3: self.player.active = False class Introduction(Page): def is_displayed(self): return self.player.active class Intro2(Page): def is_displayed(self): return self.player.active class Intro3(Page): def is_displayed(self): return self.player.active class NumberOne(Page): def is_displayed(self): return self.player.active class SliderOne(Page): form_model = 'player' form_fields = ['historyA1', 'historyB1', 'currentA1', 'currentB1'] def is_displayed(self): return self.player.active class EndOneB(Page): form_model = 'player' form_fields = ['nuclear1'] def vars_for_template(self): return dict( offerA = 100 - self.player.currentA1, offerB = 100- self.player.currentB1 ) def is_displayed(self): return self.player.role() == 'B' and self.player.active class EndOneA(Page): def is_displayed(self): return self.player.role() == 'A' and self.player.active class NumberTwo(Page): def is_displayed(self): return self.player.active timeout_seconds = 25 timer_text = 'Time left before negotiation starts:' def before_next_page(self): import time self.player.arrival = str(int(time.time()*1000)) class SliderTwo(Page): form_model = 'player' form_fields = ['historyA2', 'historyB2', 'currentA2', 'currentB2', 'time_final2', 'final_offer2', ] def is_displayed(self): return self.player.active timeout_seconds = 60 timer_text = 'Negotiation time:' def vars_for_template(self): return dict( arrival=self.player.arrival, ) def before_next_page(self): if self.timeout_happened: self.player.failed2 = True class EndTwoA(Page): def is_displayed(self): return self.player.active and (not self.player.failed2 or self.player.role() == 'A') def vars_for_template(self): return dict( payoffB = 100 - self.player.final_offer2, ) class EndTwoB(Page): form_model = 'player' form_fields = ['nuclear2'] def vars_for_template(self): return dict( offerA = 100 - self.player.currentA2, offerB = 100 - self.player.currentB2 ) def is_displayed(self): return self.player.active and (self.player.role() == 'B' and self.player.failed2) class NumberThree(Page): def is_displayed(self): return self.player.active timeout_seconds = 10 timer_text = 'Time left before negotiation starts:' def before_next_page(self): import time self.player.arrival = str(int(time.time()*1000)) class SliderThree(Page): form_model = 'player' form_fields = ['historyA3', 'historyB3', 'currentA3', 'currentB3', 'time_final3', 'final_offer3'] def is_displayed(self): return self.player.active timeout_seconds = 60 timer_text = 'Negotiation time:' def vars_for_template(self): return dict( arrival=self.player.arrival, ) def before_next_page(self): import time self.player.arrival = str(int(time.time() * 1000)) if self.timeout_happened: self.player.failed3 = True class EndThreeA(Page): def is_displayed(self): return self.player.active and (not self.player.failed3 or self.player.role() == 'A') def vars_for_template(self): return dict( payoffB = 100 - self.player.final_offer3, arrival=self.player.arrival, ) timeout_seconds = 30 class EndThreeB(Page): form_model = 'player' form_fields = ['nuclear3'] def vars_for_template(self): return dict( offerA = 100 - self.player.currentA3, offerB = 100- self.player.currentB3, arrival=self.player.arrival, ) def is_displayed(self): return self.player.active and (self.player.role() == 'B' and self.player.failed3) timeout_seconds = 30 class NumberFour(Page): def is_displayed(self): return self.player.active timeout_seconds = 10 timer_text = 'Time left before negotiation starts:' def before_next_page(self): import time self.player.arrival = str(int(time.time()*1000)) class SliderFour(Page): form_model = 'player' form_fields = ['historyA4', 'historyB4', 'currentA4', 'currentB4', 'time_final4', 'final_offer4'] def is_displayed(self): return self.player.active timeout_seconds = 60 def vars_for_template(self): return dict( arrival=self.player.arrival, ) def before_next_page(self): import time self.player.arrival = str(int(time.time() * 1000)) if self.timeout_happened: self.player.failed4 = True class EndFourA(Page): def is_displayed(self): return self.player.active and (not self.player.failed4 or self.player.role() == 'A') def vars_for_template(self): return dict( payoffB = 100 - self.player.final_offer4, arrival=self.player.arrival, ) timeout_seconds = 30 class EndFourB(Page): form_model = 'player' form_fields = ['nuclear4'] def vars_for_template(self): return dict( offerA = 100 - self.player.currentA4, offerB = 100- self.player.currentB4, arrival=self.player.arrival, ) def is_displayed(self): return self.player.active and (self.player.role() == 'B' and self.player.failed4) timeout_seconds = 30 class NumberFive(Page): def is_displayed(self): return self.player.active timeout_seconds = 10 timer_text = 'Time left before negotiation starts:' def before_next_page(self): import time self.player.arrival = str(int(time.time()*1000)) class SliderFive(Page): form_model = 'player' form_fields = ['historyA5', 'historyB5', 'currentA5', 'currentB5', 'time_final5', 'final_offer5'] def is_displayed(self): return self.player.active timeout_seconds = 60 def vars_for_template(self): return dict( arrival=self.player.arrival, ) def before_next_page(self): import time self.player.arrival = str(int(time.time() * 1000)) if self.timeout_happened: self.player.failed5 = True class EndFiveA(Page): def is_displayed(self): return self.player.active and (not self.player.failed5 or self.player.role() == 'A') def vars_for_template(self): return dict( payoffB = 100 - self.player.final_offer5, arrival=self.player.arrival, ) timeout_seconds = 30 class EndFiveB(Page): form_model = 'player' form_fields = ['nuclear5'] def vars_for_template(self): return dict( offerA = 100 - self.player.currentA5, offerB = 100- self.player.currentB5, arrival=self.player.arrival, ) def is_displayed(self): return self.player.active and (self.player.role() == 'B' and self.player.failed5) timeout_seconds = 30 class Beliefs(Page): form_model = 'player' form_fields = ['belief1', 'belief2', 'belief3', 'belief4', 'belief5', 'belief6', 'belief7', 'belief8', 'belief9', 'belief10', 'belief11'] def is_displayed(self): return self.player.active class Prediction(Page): form_model = 'player' form_fields = ['self_prediction1', 'self_prediction2', 'self_prediction3', 'self_prediction4', 'self_prediction5', 'self_prediction6', 'self_prediction7', 'self_prediction8', 'self_prediction9', 'self_prediction10', 'self_prediction11'] def is_displayed(self): return self.player.active and self.player.role() == 'B' class Control(Page): form_model = 'player' form_fields = ['control1', 'control2', 'control3', 'control4', 'control5', 'control6', ] def is_displayed(self): return self.player.active def before_next_page(self): counter = 0 if self.player.control1 == 4: counter += 1 if self.player.control2 == 1: counter += 1 if self.player.control3 == 5: counter += 1 if self.player.control4 == 2: counter += 1 if self.player.control5 == 3: counter += 1 if self.player.control6 == 3: counter += 1 if counter < 5: self.player.active = False class Out(Page): def before_next_page(self): import time self.participant.vars['wait_page_arrival'] = time.time() page_sequence = [Welcome, Attention, Introduction, Intro2, Intro3, Control, NumberOne, SliderOne, EndOneB, EndOneA, NumberTwo, SliderTwo, EndTwoA, EndTwoB, NumberThree, SliderThree, EndThreeA, EndThreeB, NumberFour, SliderFour, EndFourA, EndFourB, NumberFive, SliderFive, EndFiveA, EndFiveB, Beliefs, Prediction, Out]