from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class Decision(Page): form_model = 'player' form_fields = ['Q'] live_method = "live_yield" def is_displayed(self): if self.round_number==1: self.player.num_order = 1 self.player.num_block = 0 else: self.player.num_order = self.player.in_round(self.round_number -1).num_order + 1 self.player.num_block = self.player.in_round(self.round_number -1).num_block if self.player.num_order > Constants.max_order: # Block is finished if self.player.num_block >= Constants.max_block: # Treatment is finished return False else: # Initialize new block self.player.num_order = 1 self.player.num_block = self.player.num_block + 1 self.player.num_treatment = self.player.participant.vars['num_treatment'] self.player.O =Constants.Ovarage_Cost[self.player.num_treatment][self.player.num_block] self.player.U =Constants.Underage_Cost[self.player.num_treatment][self.player.num_block] return True # Block is ongoing def vars_for_template(self): return dict(Block=str(self.player.num_block + 1) + "/" + str(Constants.max_block + 1), Runde=str(self.player.num_order) + "/" + str(Constants.max_order), Demand = Constants.Demand_Initial, Overage_unit=c(self.player.O), Underage_unit=c(self.player.U), New_Block=(self.player.num_block>0) and (self.player.num_order==1), Begin_Exp = (self.player.num_block==0) and (self.player.num_order==1) ) def before_next_page(self): self.player.Y = random.randint(0,self.player.Q) class Feedback(Page): def is_displayed(self): if self.player.num_order > Constants.max_order and self.player.num_block >= Constants.max_block: self.player.participant.vars['result_table']=self.player.buildResultTable() return False else: return True def vars_for_template(self): self.player.participant.vars['Q_' + str(self.player.num_block) + '_' + str(self.player.num_order)]=self.player.Q self.player.participant.vars['Y_' + str(self.player.num_block) + '_' + str(self.player.num_order)]=self.player.Y self.player.participant.vars['O_Cost_' + str(self.player.num_block) + '_' + str(self.player.num_order)]=c(self.player.O*max(0,self.player.Y-Constants.Demand_Initial)) self.player.participant.vars['U_Cost_' + str(self.player.num_block) + '_' + str(self.player.num_order)]=c(self.player.U*max(0,Constants.Demand_Initial-self.player.Y)) return dict(Block=str(self.player.num_block + 1) + "/" + str(Constants.max_block + 1), Runde=str(self.player.num_order) + "/" + str(Constants.max_order), Yield = self.player.Y, Over_Production = max(0,self.player.Y-Constants.Demand_Initial), Under_Production =max(0,Constants.Demand_Initial-self.player.Y), Overage_unit=c(self.player.O*max(0,self.player.Y-Constants.Demand_Initial)), Underage_unit=c(self.player.U*max(0,Constants.Demand_Initial-self.player.Y))) page_sequence = [Decision, Feedback]