from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) #from .fields import OtherModelField import random #random.init() import itertools import json treatment_op = ( (0, 'control'), (1, 'public'), (2, 'consumption'), ) subtreatment_op = ( (0, 'control'), (1, 'transfer'), (2, 'outside'), ) class Constants(BaseConstants): name_in_url = "BE_standard_old" players_per_group = 2 tasks = ['1', '2', '3', '4'] num_rounds = len(tasks) new_template = "BE_standard_old/new.html" class Subsession(BaseSubsession): def creating_session(self): for player in self.get_players(): slider_initial_be01a = random.randint(0, 40) player.slider_initial_be01a = slider_initial_be01a player.slider = slider_initial_be01a slider_initial_be01b = random.randint(0, 100) player.slider_initial_be01b = slider_initial_be01b player.slider = slider_initial_be01b slider_initial_be02a = random.randint(0, 40) player.slider_initial_be02a = slider_initial_be02a player.slider = slider_initial_be02a slider_initial_be02b = random.randint(0, 100) player.slider_initial_be02b = slider_initial_be02b player.slider = slider_initial_be02b if self.round_number == 1: for p in self.get_players(): round_numbers = list(range(1, Constants.num_rounds + 1)) random.shuffle(round_numbers) p.participant.vars['task_rounds'] = dict(zip(Constants.tasks, round_numbers)) type = itertools.cycle([1]) for g in self.get_groups(): g.type = next(type) treatment = itertools.cycle([0]) for g in self.get_groups(): g.treatment = next(treatment) subtreatment = itertools.cycle([2]) for g in self.get_groups(): g.subtreatment = next(subtreatment) class Group(BaseGroup): def random_num(): return random.randint(0, 10) ########## UNDERSTANDING QUESTIONS ########## understand_marble = models.IntegerField() understand_plate = models.IntegerField( label="", choices=[ [0, 'The bad plate'], [1, 'The good plate'], ], ) treatment = models.IntegerField( label="", choices=[ [0, 'Control'], [1, 'Consumption'], [2, 'Public'], ] ) subtreatment = models.IntegerField( label="", choices=[ [0, 'Normal'], [1, 'Transfer'], [2, 'Outside Option'], ] ) type = models.IntegerField( label="", choices=[ [1, 'EA'], [2, 'EPC'], [3, 'EPH'], ] ) #################### PUNISHMENT EXPERIMENT #################### riceplate_practice = models.IntegerField( label="", choices=[ [0, 'The bad plate'], [1, 'The good plate'], ], ) be01 = models.IntegerField( label="", choices=[ [0, 'The bad plate'], [1, 'The good plate'], ], ) be02 = models.IntegerField( label="", choices=[ [0, "No sound - শব্দ শুনতে চাই না"], [1, "Sound - শব্দ শুনতে চাই "], ], ) be03 = models.IntegerField( label="", choices=[ [0, "Blue - নীল"], [1, "Red - লাল"], ], ) be03_w = models.IntegerField( label="", choices=[ [0, 'No Food- আমি পুরুষটিকে খাবার দিতে চাই না '], [1, 'Yes Give Food - আমি পুরুষটিকে খাবার দিতে চাই'], ] ) #### FOR SIGNALING TEST ### signaling = models.IntegerField( label="", min=0, max=50, widget=widgets.Slider(attrs={'step': '5'}), default=random_num, ) class Player(BasePlayer): sound_decide_m = models.IntegerField( label="", choices=[ [0, "No sound - শব্দ শুনতে চাই না"], [1, "Sound - শব্দ শুনতে চাই "], ], ) gender = models.StringField( label='', choices=[ ['M', "Man"], ['W', "Woman"], ], ) slider_initial_be01a = models.PositiveIntegerField() slider_initial_be01b = models.PositiveIntegerField() slider_initial_be02a = models.PositiveIntegerField() slider_initial_be02b = models.PositiveIntegerField() slider = models.IntegerField( label="", min=0, max=50, widget=widgets.Slider(attrs={'step': '1'}), ) public_schedule = models.IntegerField( label='', choices=[ [1, 'Punishment Private'], [0, 'Punishment Public'], ], ) # UNDERSTANDING QUESTIONS understand1 = models.IntegerField( label='', choices=[ [1, 'The good bag'], [0, 'The bad bag'], ], ) understand1a = models.IntegerField( label="", choices=[ [0, 'The bad plate - খারাপ বাটি'], [1, 'The good plate - ভাল বাটি'], ], ) understand1b = models.IntegerField( label="", choices=[ [0, 'The bad plate - খারাপ বাটি'], [1, 'The good plate - ভাল বাটি'], ], ) understand1c = models.IntegerField( label="", choices=[ [0, 'The bad plate - খারাপ বাটি'], [1, 'The good plate - ভাল বাটি'], ], ) understand2 = models.IntegerField( label='', choices=[ [1, 'The good bag'], [0, 'The bad bag'], ], ) understand2a = models.IntegerField( label="", choices=[ [0, 'The bad plate - খারাপ বাটি'], [1, 'The good plate - ভাল বাটি'], ], ) understand2b = models.IntegerField( label="", choices=[ [0, 'The bad plate - খারাপ বাটি'], [1, 'The good plate - ভাল বাটি'], ], ) understand2c = models.IntegerField( label="", choices=[ [0, 'The bad plate - খারাপ বাটি'], [1, 'The good plate - ভাল বাটি'], ], ) understand2c_cons = models.IntegerField( label="", choices=[ [0, 'The bad plate - খারাপ বাটি'], [1, 'The good plate - ভাল বাটি'], ], ) plateget = models.IntegerField( label="", choices=[ [0, 'The bad plate'], [1, 'The good plate'], ], ) whyplateget = models.LongStringField() ### Defining questions for counter question1 = models.IntegerField(initial=0, blank=True) question2 = models.IntegerField(initial=0, blank=True) question3 = models.IntegerField(initial=0, blank=True) question4 = models.IntegerField(initial=0, blank=True) question5 = models.IntegerField(initial=0, blank=True) question6 = models.IntegerField(initial=0, blank=True) question7 = models.IntegerField(initial=0, blank=True) question8 = models.IntegerField(initial=0, blank=True) question9 = models.IntegerField(initial=0, blank=True) corr_be01a = models.IntegerField(initial=0, blank=True) corr_be01b = models.IntegerField(initial=0, blank=True) corr_be02a = models.IntegerField(initial=0, blank=True) corr_be02b = models.IntegerField(initial=0, blank=True) def random_num(): return random.randint(0, 10) ######################################################################################################### sound_dislike = models.IntegerField( label="", choices=[ [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], ], widget=widgets.RadioSelectHorizontal(), ) punishment_work = models.IntegerField( label="", choices=[ [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], ], widget=widgets.RadioSelectHorizontal(), ) enumerator_ID = models.StringField( label="Name of enumerator?", choices=[ "Sakib", "Dilshad", "Anne", "Hasib", ], ) practice = models.IntegerField( label="Is this a real game?", choices=[ [1, "Yes"], [0, "No"], ], ) be01a_man = models.IntegerField( label="", min=0, max=40, widget=widgets.Slider(attrs={'step': '1'}, show_value=False), default=random_num, ) checkslider = models.PositiveIntegerField() be01a_man_corr1 = models.IntegerField( label="", min=0, max=40, widget=widgets.Slider(attrs={'step': '1'}, show_value=False), default=random_num, ) be01b_man = models.IntegerField( label="", min=0, max=100, widget=widgets.Slider(attrs={'step': '5'}), ) be01b_man_corr1 = models.IntegerField( label="", min=0, max=100, widget=widgets.Slider(attrs={'step': '5'}), ) be02a_man = models.IntegerField( label="", min=0, max=40, widget=widgets.Slider(attrs={'step': '1'}, show_value=False), ) be02a_man_corr1 = models.IntegerField( label="", min=0, max=40, widget=widgets.Slider(attrs={'step': '1'}, show_value=False), ) be02b_man = models.IntegerField( label="", min=0, max=100, widget=widgets.Slider(attrs={'step': '5'}), ) be02b_man_corr1 = models.IntegerField( label="", min=0, max=100, widget=widgets.Slider(attrs={'step': '5'}), ) HHID = models.IntegerField( label="Household ID", min=0, max=100, ) person_id = models.IntegerField( label="Person ID", min=0, max=100, ) plate = models.IntegerField( label="", choices=[ [0, 'The bad plate'], [1, 'The good plate'], ], ) be01a_stored = models.IntegerField() be01b_stored = models.IntegerField() be02a_stored = models.IntegerField() be02b_stored = models.IntegerField() be01a_stored_m = models.IntegerField() be01b_stored_m = models.IntegerField() be02a_stored_m = models.IntegerField() be02b_stored_m = models.IntegerField() confirmation_be01a = models.IntegerField( choices=[ [1, "No"], [0, "Yes"], ], label="", ) confirmation_be01b = models.IntegerField( choices=[ [1, "No"], [0, "Yes"], ], label="", ) confirmation_be02a = models.IntegerField( choices=[ [1, "No"], [0, "Yes"], ], label="", ) confirmation_be02b = models.IntegerField( choices=[ [1, "No"], [0, "Yes"], ], label="", ) def guess_be01a_man(self): self.participant.vars['be01a_man_st'] = self.be01a_man print('Slider is', self.participant.vars['be01a_man_st'], 'for sound if she keeps good plate') def guess_be01b_man(self): self.participant.vars['be01b_man_st'] = self.be01b_man print('Slider is', self.participant.vars['be01b_man_st'], 'for money if she keeps the good plate') def guess_be02a_man(self): self.participant.vars['be02a_man_st'] = self.be02a_man print('Slider is', self.participant.vars['be02a_man_st'], 'for sound if she keeps the bad plate') def guess_be02b_man(self): self.participant.vars['be02b_man_st'] = self.be02b_man print('Slider is', self.participant.vars['be02b_man_st'], 'for money if she keeps tha bad plate') def other_player(self): return self.get_others_in_group()[0] def vars_for_template(self): if self.group.subtreatment != 1 and self.participant.vars['gender'] == 'W': # What I am doing: set the model field value and return that model field in dict() # I've done it for this and the next condition. self.be01a_stored = self.other_player().participant.vars['be01a_man_st'] self.be02a_stored = self.other_player().participant.vars['be02a_man_st'] return dict( be01a_stored=self.be01a_stored, be02a_stored=self.be02a_stored, ) elif self.group.subtreatment == 1 and self.participant.vars['gender'] == 'W': self.be01a_stored = self.other_player().participant.vars['be01a_man_st'] self.be01b_stored = self.other_player().participant.vars['be01b_man_st'] self.be02a_stored = self.other_player().participant.vars['be02a_man_st'] self.be02b_stored = self.other_player().participant.vars['be02b_man_st'] return dict( be01a_stored=self.be01a_stored, be01b_stored=self.be01b_stored, be02a_stored=self.be02a_stored, be02b_stored=self.be02b_stored, ) elif self.group.subtreatment != 1 and self.participant.vars['gender'] == 'M': self.be01a_stored_m = self.participant.vars['be01a_man_st'] self.be02a_stored_m = self.participant.vars['be02a_man_st'] return dict( be01a_stored_m=self.be01a_stored_m, be02a_stored_m=self.be02a_stored_m, be01a_stored_m_initial=self.be01a_stored_m, be02a_stored_m_initial=self.be02a_stored_m, ) elif self.group.subtreatment == 1 and self.participant.vars['gender'] == 'M': self.be01a_stored_m = self.participant.vars['be01a_man_st'] self.be02a_stored_m = self.participant.vars['be02a_man_st'] self.be01b_stored_m = self.participant.vars['be01b_man_st'] self.be02b_stored_m = self.participant.vars['be02b_man_st'] return dict( be01a_stored_m=self.be01a_stored_m, be01b_stored_m=self.be01b_stored_m, be02a_stored_m=self.be02a_stored_m, be02b_stored_m=self.be02b_stored_m, be01a_stored_m_initial=self.be01a_stored_m, be01b_stored_m_initial=self.be01b_stored_m, be02a_stored_m_initial=self.be02a_stored_m, be02b_stored_m_initial=self.be02b_stored_m, ) ############################################################## # FEEDBACK QUESTIONS feedback1 = models.LongStringField(label="") feedback2 = models.LongStringField(label="") extra_comment = models.LongStringField(label="") nrchildren = models.IntegerField(label="") men1625 = models.IntegerField(label="") men2550 = models.IntegerField(label="") menover50 = models.IntegerField(label="") women1625 = models.IntegerField(label="") women2550 = models.IntegerField(label="") womenover50 = models.IntegerField(label="") ##############################################################