from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class Intro(Page): def is_displayed(self): return (self.round_number == 1) class AttnCheck(Page): form_model = 'player' form_fields = ['ballPossibleColors'] def before_next_page(self): self.player.attn_check = self.player.attn_check and (self.player.ballPossibleColors == 2) self.player.payoff = c(0) class ShowDraws(Page): def is_displayed(self): return self.player.attn_check def vars_for_template(self): numGreen = Constants.draws_from_bag - self.player.numOrangeDraws return {'numGreen': numGreen} class elicitBeliefs1(Page): def is_displayed(self): return self.player.attn_check form_model = 'player' form_fields = ['repeatNumOrange','probReservation_first','majorityColor'] def before_next_page(self): self.player.attn_check = self.player.attn_check and (self.player.repeatNumOrange == self.player.numOrangeDraws) class elicitWTP(Page): def is_displayed(self): return self.player.attn_check form_model = 'player' form_fields = ['reservation_cost'] class elicitBeliefs2(Page): def is_displayed(self): return self.player.attn_check form_model = 'player' form_fields = ['probReservation_second','majorityColor_second'] def vars_for_template(self): return {'Cost':self.player.cost_to_view,'willingToPay':self.player.cost_to_view<=self.player.reservation_cost,'numGreen':Constants.draws_from_bag - self.player.numOrangeDraws,'numGreenAgain':self.player.add_draws-self.player.addNumOrange} def before_next_page(self): if self.player.attn_check: if self.player.reimburseRound == 0: if (self.player.bag_contents >= 50 and self.player.majorityColor==1) or (self.player.bag_contents <= 50 and self.player.majorityColor==2): self.player.payoff = self.player.payoff + c(Constants.reward_for_majority) if self.player.bag_contents == self.player.probReservation_first: self.player.payoff = self.player.payoff + c(Constants.reward_for_number) else: if (self.player.bag_contents >= 50 and self.player.majorityColor_second == 1) or ( self.player.bag_contents <= 50 and self.player.majorityColor_second == 2): self.player.payoff = self.player.payoff + c(Constants.reward_for_majority) if self.player.bag_contents == self.player.probReservation_second: self.player.payoff = self.player.payoff + c(Constants.reward_for_number) if self.player.cost_to_view<=self.player.reservation_cost: self.player.payoff = self.player.payoff - c(self.player.cost_to_view) else: self.player.payoff = -50 class Results(Page): form_model = 'player' def vars_for_template(self): if self.player.reimburseRound == 0: numOrangeGuess = self.player.probReservation_first if self.player.majorityColor ==1: majBagGuess = "Orange" else: majBagGuess = "Green" else: numOrangeGuess = self.player.probReservation_second if self.player.majorityColor_second ==1: majBagGuess = "Orange" else: majBagGuess = "Green" if not self.player.attn_check: self.player.reservation_cost = 0 return {'Cost':self.player.cost_to_view,'willingToPay':self.player.cost_to_view<=self.player.reservation_cost,'reimburseRoundFirst':self.player.reimburseRound==0,'notAttnCheck':not self.player.attn_check,'OrangeInBag':self.player.bag_contents,'numOrangeGuess':numOrangeGuess,'majBagGuess':majBagGuess,'payout':Constants.participation_reward+self.player.payoff} page_sequence = [ Intro, AttnCheck, ShowDraws, elicitBeliefs1, elicitWTP, elicitBeliefs2, Results ]