from random import randrange from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer ) author = 'Your name here' doc = """ Your app description SIF Beneficiary con Finanziatore: software per il pagamento dei beneficiari """ # trattamenti # 1 Fixed #2 = Quantity #3= Quality #4 = Threshold #6 = senza finanziatore endowment 20 #7 = senza finanziatore endowment 30 class Constants(BaseConstants): name_in_url = 'sif_B_F' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): def creating_session(self): #self.vettore=self.session.config['vector'].split # self.session.vars['L_list']=[1,2,5,4,5] #vettori scelte L, scelte F e payoff self.session.vars['L_choice']=self.session.config['L_choice'].split() self.session.vars['F_choice']=self.session.config['F_choice'].split() class Group(BaseGroup): pass class Player(BasePlayer): #questionario Errors=models.IntegerField(initial=0) q1 = models.IntegerField( choices=[[1, 'The same cost'], [2, 'The same earning']], widget=widgets.RadioSelect) q2 = models.IntegerField( choices=[[1, 'True'], [2, 'False']], widget=widgets.RadioSelect) q3 = models.IntegerField( choices=[[1, '0.1 point for TYPE 1 and 1 point for TYPE 2 produced'], [2, '1 point for TYPE 1 and 1 point for TYPE 2 produced']], widget=widgets.RadioSelect) q4 = models.IntegerField( choices=[[1, 'True'], [2, 'False']], widget=widgets.RadioSelect) # Prol= models.StringField(label=False) #prolific ID # controls and beliefs stop = models.IntegerField( choices=[[1, 'I want to stop here.'], [0, 'I want to go on.']], widget=widgets.RadioSelect ) # dummy: 1 si ferma, 2 va avanti L = models.IntegerField(initial=-99) #scelte di L L_1 = models.IntegerField(initial=-99) # scelta di L beni di tipo 1 P_L = models.FloatField() #payoff lavoratore P_F = models.FloatField() #payoff finanziatore F= models.IntegerField(initial=-99) #scelte di F P=models.FloatField() #payoff B Belief_L = models.IntegerField(initial=0) #belieSf sul lavoratore Pay_belief_L =models.FloatField(initial=0) # pagamento per belief sul lavoratore Belief_F = models.IntegerField(initial=-1, choices=[[1, 'Financed'], [0, 'Not financed']] ) Pay_belief_F =models.FloatField(initial=-99) # pagamento per belief sul finanziatore right_L=models.IntegerField(initial=0) #check belief L = 1 se corretto right_F=models.IntegerField(initial=0) #check belief F = 1 se corretto pay_pound= models.FloatField(initial=-99) #scelte di F final_payoff=models.FloatField() #scelte di F # vettori def leggi_dati(self): self.L=int(self.session.vars['L_choice'][(self.participant.id_in_session-1)]) self.F=int(self.session.vars['F_choice'][(self.participant.id_in_session-1)]) self.L_1=20-2*self.L self.P_L= self.L + self.L_1 if self.session.config['treatment'] == 1: #fixed self.P_F=12 elif self.session.config['treatment'] == 2: #quantity self.P_F= 0.8* (self.L_1 + self.L) elif self.session.config['treatment'] == 3: #quantity self.P_F= 0.2*(self.L_1)+2*(self.L) elif self.session.config['treatment'] == 4: if self.L<3: self.P_F=5.6 else: self.P_F=14.4 elif self.session.config['treatment'] > 5: self.P_F=0 def set_payoff(self): #va avanti if self.stop == 0: self.P=self.L+self.L_1*0.1 #payoff beneficiario = 0.2 per beni 2 prodotti if self.Belief_L == self.L: self.Pay_belief_L=5 self.right_L=1 else: self.Pay_belief_L=0 if self.session.config['treatment'] < 5: if self.Belief_F == self.F: self.Pay_belief_F=5 self.right_F=1 else: self.Pay_belief_F=0 else: self.Pay_belief_F=0 self.final_payoff=self.P + self.Pay_belief_L + self.Pay_belief_F self.pay_pound = self.final_payoff*0.10 #si ferma elif self.stop == 1: self.P=self.L+self.L_1*0.1 self.pay_pound = self.P*0.10 print("lavoratore tipo 2 " , self.L) print("lavoratore tipo 1 " , self.L_1) print("finanziatore",self.F) print("belief lavoratore" ,self.Belief_L) print("belief finanziatore" , self.Belief_F) print(self.final_payoff) print(self.pay_pound)