from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random doc = """ This page instructs participants how to get paid. """ class Constants(BaseConstants): name_in_url = 'my_pay' players_per_group = None # pays = ['Game 1', 'Game 2', 'Game 3', 'Game 4', 'Game 5'] # treatments = ['Game 1', 'Game 2', 'Game 5'] num_rounds = 2 fixedfee = 0 class Subsession(BaseSubsession): pass # pl_game = models.IntegerField() # participant_vars_dump = models.StringField() # def creating_session(self): # if self.round_number == 1: # for p in self.get_players(): # self.session.vars['pl_game'] = random.randint(1, 5) # pl_game = self.session.vars['pl_game'] # print('set player.game to', pl_game) # fin_pay = models.CurrencyField() # game = models.IntegerField() # fin_payoff = models.CurrencyField() # random_pay = models.CurrencyField() # fin_choice_to_pay = models.IntegerField() # dump_treatment_seq = models.StringField() # treatment = models.StringField # def creating_session(self): # print('in creating_session') # if self.round_number == 1: # self.session.vars['game'] = random.randint(1, Constants.num_rounds) # game = self.session.vars['game'] # print('set paying game to', game) #def vars_for_admin_report(self): # game = self.session.vars['game'] # fin_payoff = sorted([p.payoff for p in self.player.in_all_rounds()]) # print('vars for admin', fin_payoff) # return { # 'game': game, # 'fin_pay': fin_payoff # } class Group(BaseGroup): pass # def creating_payoffs(self): # self.player.participant_vars_dump = str(self.participant.vars) # game = models.IntegerField() # tot_payoff = models.CurrencyField() # def set_payoff(self): # print('in set_payoffs') # p.participant.vars['fin_payoff'] = p.participant.payoff # def set_payoff(self): # print('in set_payoffs') # for p in self.get_players(): # if self.session.game == random.randint(1, 5): # p.payoff = self.player_in_all_rounds.payoff # print('p.payoff', p.payoff) # self.participant.vars['fin_payoff'] = self.player_in_round(paying_game).payoff # fin_payoff = self.participant.vars['fin_payoff'] class Player(BasePlayer): # fin_pay = models.CurrencyField() # fr_payoff = models.CurrencyField() # game = models.IntegerField() # tot_payoff = models.CurrencyField() # random_pay = models.CurrencyField() fin_choice_to_pay = models.IntegerField() # game1_payoff = models.CurrencyField() # game2_payoff = models.CurrencyField() # game3_payoff = models.CurrencyField() # game4_payoff = models.CurrencyField() # game5_payoff = models.CurrencyField() # def set_payoff(self): # print('in get_payoffs') # self.participant.vars['fin_choice_to_pay'] = random.randint(1, Constants.num_rounds) # fin_choice_to_pay = self.participant.vars['fin_choice_to_pay'] # print('fin_choice_to_pay', fin_choice_to_pay) # self.participant.vars['payoffs'] = self.in_round(fin_choice_to_pay).payoff # random_pay = self.participant.vars['payoffs'] # print('ran pay', random_pay) def getpay(self): if self.round_number == 1: self.participant.vars['fin_choice_to_pay'] = random.randint(1, Constants.num_rounds) fin_choice_to_pay = self.participant.vars['fin_choice_to_pay'] print('fin_choice_to_pay', fin_choice_to_pay) game1_payoff = self.participant.vars['game1_payoff'] # print('game1_payoff', game1_payoff) game2_payoff = self.participant.vars['game2_payoff'] print('game2_payoff', game2_payoff) # game3_payoff = self.participant.vars['game3_payoff'] # game4_payoff = self.participant.vars['game4_payoff'] # game5_payoff = self.participant.vars['icl_payoff'] if self.round_number == 1: if self.participant.vars['fin_choice_to_pay'] == 1: self.payoff = self.participant.vars.get('game1_payoff') if self.participant.vars['fin_choice_to_pay'] == 2: self.payoff = self.participant.vars.get('game2_payoff') if self.participant.vars['fin_choice_to_pay'] == 3: self.payoff = self.participant.vars.get('game3_payoff')*10 # if self.participant.vars['fin_choice_to_pay'] == 4: # self.payoff = self.participant.vars.get('game4_payoff')*10 # if self.participant.vars['fin_choice_to_pay'] == 5: # self.payoff = self.participant.vars.get('icl_payoff') #else: # self.payoff = 0 self.participant.vars['kr_payoffs'] = self.payoff kr_payoffs = self.participant.vars['kr_payoffs'] print('kr payoffs', kr_payoffs) # def creating_payoffs(self): # appseqs = [i.lower() for i in self.session.config['app_sequence']] # for p in self.get_players(): # for i in appseqs: # player_app_name = '{}_player'.format(i) # payoff = sum([j.payoff for j in getattr(p,player_app_name ).all()]) # print('Payoff in app {} for the participant {}:: {}'.format(i, p.code, payoff)) # self.participant.vars['payoffs'] = self.in_round(fin_choice_to_pay).payoff # self.participant.vars['payoffs'] = random.choice([p.payoff for p in self.player.in_all_rounds()]) # random_pay = self.participant.vars['payoffs'] # print('fin pay', random_pay) # self.participant.vars['fin_choice_to_pay'] = random.randint(1, Constants.num_rounds) # self.participant.vars['payoffs'] = [] # for p in self.in_all_rounds(): # if p.session.vars['game'] == 1: # p.participant.payoff = p.participant.vars['game1_payoff'] # if p.session.vars['game'] == 2: # p.participant.payoff = p.participant.vars['game2_payoff'] # if p.session.vars['game'] == 3: # p.participant.payoff = p.participant.vars['game3_payoff'] # if p.session.vars['game'] == 4: # p.participant.payoff = p.participant.vars['game4_payoff'] # if p.session.vars['game'] == 5: # p.participant.payoff = p.participant.vars['icl_payoff'] # if self.subsession.round_number == self.session.vars['game']: # random_payment = random.choice([p.payoff for p in self.in_all_rounds()]) # self.participant.vars['fr_payoff'] = random_payment # print('fin round payoff', random_payment) for p in self.participant.get_players(): # p.payoff_backup = p.payoff p.payoff = 0 self.payoff = Constants.fixedfee + kr_payoffs self.participant.vars['finx_payoff'] = self.payoff print('finx pay', self.participant.vars['finx_payoff'])