from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .models import Constants class Introduction(Page): def is_displayed(self): return self.round_number == 1 class Bid(Page): form_model = 'player' form_fields = ['bid_amount'] def is_displayed(self): return self.player.id_in_group > 1 def vars_for_template(self): self.player.valuation = self.player.generate_valuation() def get_timeout_seconds(self): if self.participant.vars.get('is_dropout'): return 1 # instant timeout, 1 second else: return 20 def before_next_page(self): import numpy as np self.player.total=self.player.init_player_total() self.player.wins=self.player.init_player_wins() if self.timeout_happened: self.participant.vars['is_dropout'] = True val=np.min([np.ceil((Constants.max_allowable_bid-self.player.valuation)/2),Constants.max_allowable_bid]) self.player.bid_amount = c(val) class SetWinnerWaitPage(WaitPage): title_text = "Odota, että myyjät tekevät tarjouksensa." def is_displayed(self): return self.player.id_in_group == 1 pass class SetWinner(Page): form_model = 'group' form_fields = ['winner_label'] def is_displayed(self): return self.player.id_in_group == 1 def vars_for_template(self): for p in self.group.get_players(): if p.id_in_group==2: amountA=p.bid_amount elif p.id_in_group==3: amountB=p.bid_amount [retA,retB],[winsA,winsB] = self.group.get_group_totals() return dict(amountA=amountA,amountB=amountB,retA=retA,retB=retB,winsA=winsA,winsB=winsB,) def before_next_page(self): self.group.winner_id = self.group.set_winner() class ResultsWaitPage(WaitPage): title_text = "Odota, että ostaja valitsee voittajan." def is_displayed(self): return self.player.id_in_group > 1 class Results(Page): def is_displayed(self): return self.player.id_in_group > 1 def vars_for_template(self): return dict(is_greedy=self.player.bid_amount - self.player.valuation < 0) def before_next_page(self): self.player.update_player_total() self.player.update_player_wins() self.player.swap_role() page_sequence = [Introduction, Bid, SetWinnerWaitPage,SetWinner,ResultsWaitPage, Results]