from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import time from leavable_wait_page.pages import LeavableWaitPage, SkippablePage #class MatchingWaitPage(WaitPage): # group_by_arrival_time = True # # def is_displayed(self): # return self.round_number == 1 class RoundWaitPage(LeavableWaitPage): #template_name = 'channelsmin/RoundWaitPage.html' group_by_arrival_time = True allow_leaving_after = 600 def is_displayed(self): return self.player.active class Instruction(SkippablePage): def is_displayed(self): return self.player.active timeout_seconds = 10 timer_text = 'Time left before negotiation starts:' def vars_for_template(self): matching_group = self.group.get_player_by_id(1).matching_group return dict( endowB=Constants.endowmentsB[matching_group - 1][self.round_number - 1], endowA=Constants.endowmentsA[matching_group - 1][self.round_number - 1], ) def before_next_page(self): matching_group = self.group.get_player_by_id(1).matching_group self.group.endowA = Constants.endowmentsA[matching_group - 1][self.round_number-1] self.group.endowB = Constants.endowmentsB[matching_group - 1][self.round_number-1] class MyWaitPage(WaitPage): title_text = "Please wait for the other person." body_text = "Once you have both seen the disagreement payoffs, negotiation will start." def is_displayed(self): return self.player.active after_all_players_arrive = 'set_time' class Slider(SkippablePage): timeout_seconds = 63 #timer_text = "Negotiation time:" def is_displayed(self): return self.player.active def vars_for_template(self): return dict( arrival=int(self.group.arrival), ) def before_next_page(self): self.group.arrival = str(int(time.time() * 1000)) if self.timeout_happened: self.group.failed = True class Nuclear(SkippablePage): form_model = 'group' form_fields = ['nuclear'] def is_displayed(self): return self.player.active and (self.player.role() == 'B' and self.group.failed) timeout_seconds = 33 def vars_for_template(self): return dict( offerA = 100 - self.group.currentA, offerB = 100- self.group.currentB, arrival=int(self.group.arrival), ) def before_next_page(self): self.group.set_payoffs() import time self.participant.vars['wait_page_arrival'] = time.time() if self.timeout_happened: self.participant.vars['active'] = False self.participant.vars['drop_out'] = True class RoundEnd(SkippablePage): def is_displayed(self): return self.player.active and (not self.group.failed or self.player.role() == 'A') timeout_seconds = 33 def vars_for_template(self): return dict( payoffB = 100 - self.group.final_offer, arrival=int(self.group.arrival), ) def before_next_page(self): self.group.set_payoffs() #import time self.participant.vars['wait_page_arrival'] = time.time() if self.timeout_happened: self.participant.vars['active'] = False self.participant.vars['drop_out'] = True class Out(SkippablePage): def is_displayed(self): return self.round_number == Constants.num_rounds and not self.player.active and not self.player.participant.vars['first_out'] class Final(SkippablePage): def is_displayed(self): return self.round_number == Constants.num_rounds and self.player.active def vars_for_template(self): pay_player = self.player.in_round(self.player.paying_round) #player_all = self.player.in_all_rounds() return dict( pay_round = pay_player.round_number, pay_payoff = float(pay_player.payoff)/10, pay_failed = pay_player.group.failed, pay_nuclear = pay_player.group.nuclear ) page_sequence = [ #MatchingWaitPage, RoundWaitPage, Instruction, MyWaitPage, Slider, Nuclear, RoundEnd, #Final, Out, ]