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 = 'PracticeSession' players_per_group = 2 num_rounds = 2 discount = c(10) rentandpenalty_D=21 rentandpenaltyG=10 rentnopenaltyD=21 rentnopenaltyG=10 rentandpenalty_D_R=10 rentandpenalty_G_R=10 rentnopenalty_D_R=10 rentnopenalty_G_R=15 class Subsession(BaseSubsession): pass class Group(BaseGroup): owner_contract = models.LongStringField( choices=[['Fixed Rent', 'Fixed Rent'], ['Fixed Rent with Discount', 'Fixed Rent with Discount']], label="What type of contract would you like to offer ?") owner_penalty = models.StringField(choices=[['Yes', 'Yes'], ['No', 'No']], label="Would you like to impose a penalty?") renter_action = models.StringField(choices=[['ACTION D', 'ACTION D'], ['ACTION G', 'ACTION G']], label="What action would you like to choose?") owner_discount = models.IntegerField(choices=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], label="Please indicate how much discount you would like to offer the renter") individual_discount_a=models.CurrencyField(min=11,max=20) individual_discount_b=models.CurrencyField(min=11,max=20) def Numbers(self): self.individual_discount_a=Constants.rentnopenaltyD-self.owner_discount def Numbers2(self): self.individual_discount_b=Constants.rentnopenalty_D_R+self.owner_discount def set_payoffs(self): if self.owner_contract=='Fixed Rent'and self.owner_penalty=='No': if self.renter_action=='ACTION D': self.get_player_by_id(1).payoff= Constants.rentnopenaltyD self.get_player_by_id(2).payoff= Constants.rentnopenalty_D_R else: if self.renter_action=='Action G': self.get_player_by_id(1).payoff= Constants.rentnopenaltyG self.get_player_by_id(2).payoff= Constants.rentnopenalty_G_R elif self.owner_penalty=='Yes': if self.renter_action=='ACTION D': self.get_player_by_id(1).payoff=Constants.rentandpenalty_D self.get_player_by_id(2).payoff=Constants.rentandpenalty_D_R else: self.get_player_by_id(1).payoff=Constants.rentandpenaltyG self.get_player_by_id(2).payoff=Constants.rentandpenalty_G_R else: if self.renter_action=='ACTION D': self.get_player_by_id(1).payoff=self.individual_discount_a self.get_player_by_id(2).payoff=self.individual_discount_b else: self.get_player_by_id(1).payoff=Constants.rentnopenaltyG self.get_player_by_id(2).payoff=Constants.rentnopenalty_G_R class Player(BasePlayer): pass