from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'economic_decisionmaking' players_per_group = 2 num_rounds = 15 #payoff if penalty is applied rentD = c(225) rentG=c(100) profitD = c(100) #payoff if no penalty is applied profitG = c(150) discount = c(100) disrentD = c(225) disprofitD = c(100) show_up = 5 class Subsession(BaseSubsession): pass class Group(BaseGroup): owner_contract = models.BooleanField( choices=[[True, 'Fixed Rent'], [False, 'Fixed Rent with Discount']], label="What type of contract would you like to offer ?", widget=widgets.RadioSelectHorizontal) owner_penalty = models.BooleanField(choices=[[True, 'Yes'], [False, 'No']], label="Would you like to impose a penalty?",widget=widgets.RadioSelectHorizontal) renter_action = models.BooleanField(choices=[[True, 'ACTION D'], [False, 'ACTION G']], label="What action would you like to choose?",widget=widgets.RadioSelectHorizontal) owner_discount = models.CurrencyField(choices=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100],min=10,max=100, label="Please indicate how much discount you would like to offer the renter") owner_discount_rent = models.CurrencyField() renter_discount_profit = models.CurrencyField() round_payoff=models.CurrencyField() def Numbers(self): self.owner_discount_rent = Constants.disrentD - self.owner_discount def Numbers2(self): self.renter_discount_profit = Constants.disprofitD + self.owner_discount def set_payoffs(self): p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) if self.owner_contract == True: if self.owner_penalty == True: if self.renter_action == True: p1.payoff = Constants.rentD p2.payoff = Constants.profitD else: p1.payoff = Constants.rentG p2.payoff = Constants.profitD else: if self.renter_action == True: p1.payoff = Constants.rentD p2.payoff = Constants.profitD else: p1.payoff = Constants.rentG p2.payoff = Constants.profitG else: if self.renter_action == True: p1.payoff = self.owner_discount_rent p2.payoff = self.renter_discount_profit else: p1.payoff = Constants.rentG p2.payoff = Constants.profitG class Player(BasePlayer): def role(self): return {1: 'Owner', 2:'Renter'}[self.id_in_group]