from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random import itertools import json import decimal author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'seatsurvey' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: for p in self.get_players(): p.distance_1 = round(float(decimal.Decimal(random.randrange(75, 550))/100),1) p.time_1 = random.choice(['Daytime', 'Red-eye']) p.price_1 = round((p.distance_1/.0019)*(0.1032+float(decimal.Decimal(random.randrange(-7, 7))/200)),0) p.price_1b = c(random.choice([0, random.randrange(1, 5)])) p.price_1a = c(p.price_1b+random.randrange(1, 20)) p.legroom_1a = random.randrange(0, 2) p.legroom_1b = p.legroom_1a+random.randrange(0,2) p.distance_2 = round(float(decimal.Decimal(random.randrange(75, 550))/100),1) p.time_2 = random.choice(['Daytime', 'Red-eye']) p.price_2 = round((p.distance_2/.0019)*(0.1032+float(decimal.Decimal(random.randrange(-7, 7))/200)),0) p.price_2a = c(random.randrange(1, 5)) p.price_2b = c(p.price_2a+random.randrange(1, 5)) p.legroom_2a = random.randrange(0, 2) p.legroom_2b = p.legroom_2a p.distance_3 = round(float(decimal.Decimal(random.randrange(75, 550))/100),1) p.time_3 = random.choice(['Daytime', 'Red-eye']) p.price_3 = round((p.distance_3/.0019)*(0.1032+float(decimal.Decimal(random.randrange(-7, 7))/200)),0) p.price_3a = c(random.randrange(0, 5)) p.price_3b = c(p.price_3a+random.randrange(0, 5)) p.legroom_3a = random.randrange(0, 2) p.legroom_3b = p.legroom_3a p.distance_4 = round(float(decimal.Decimal(random.randrange(75, 550))/100),1) p.time_4 = random.choice(['Daytime', 'Red-eye']) p.price_4 = round((p.distance_4/.0019)*(0.1332+float(decimal.Decimal(random.randrange(-7, 7))/200)),0) p.price_4a = c(random.randrange(10, 20)) p.price_4b = c(p.price_4a+random.randrange(5, 30)) p.legroom_4a = random.randrange(2, 4) p.legroom_4b = p.legroom_4a + random.randrange(0, 2) p.distance_5 = round(float(decimal.Decimal(random.randrange(75, 550))/100),1) p.time_5 = random.choice(['Daytime', 'Red-eye']) p.price_5 = round((p.distance_5/.0019)*(0.1332+float(decimal.Decimal(random.randrange(-7, 7))/200)),0) p.price_5b = c(random.choice([0, random.randrange(1, 10)])) p.price_5a = c(p.price_5b + random.randrange(0, 40)) p.legroom_5b = random.randrange(0, 2) p.legroom_5a = p.legroom_5b + random.randrange(2, 4) p.distance_6 = round(float(decimal.Decimal(random.randrange(75, 550))/100),1) p.time_6 = random.choice(['Daytime', 'Red-eye']) p.price_6 = round((p.distance_6/.0019)*(0.1332+float(decimal.Decimal(random.randrange(-7, 7))/200)),0) p.price_6b = c(random.choice([0, random.randrange(1, 5)])) p.price_6a = c(p.price_6b + random.randrange(0, 15)) p.legroom_6b = random.randrange(0, 2) p.legroom_6a = p.legroom_6b + random.randrange(0, 2) from .pages import initial_page_sequence ini = [i.__name__ for i in initial_page_sequence] for p in self.get_players(): pb = ini.copy() random.shuffle(pb) p.page_sequence = json.dumps(pb) class Group(BaseGroup): pass class Player(BasePlayer): page_sequence = models.StringField() choice1 = models.StringField(choices=['Seat A','Seat B'], widget=widgets.RadioSelectHorizontal) choice2 = models.StringField(choices=['Seat A','Seat B'], widget=widgets.RadioSelectHorizontal) distance_1 = models.FloatField() time_1 = models.StringField() price_1 = models.CurrencyField() row_1a = models.IntegerField(initial=13) row_1b = models.IntegerField(initial=27) col_1a = models.StringField(initial='E') col_1b = models.StringField(initial='E') price_1a = models.CurrencyField() price_1b = models.CurrencyField() legroom_1a = models.IntegerField() legroom_1b = models.IntegerField() distance_2 = models.FloatField() time_2 = models.StringField() price_2 = models.CurrencyField() row_2a = models.IntegerField(initial=10) row_2b = models.IntegerField(initial=10) col_2a = models.StringField(initial='E') col_2b = models.StringField(initial='F') price_2a = models.CurrencyField() price_2b = models.CurrencyField() legroom_2a = models.IntegerField() legroom_2b = models.IntegerField() distance_3 = models.FloatField() time_3 = models.StringField() price_3 = models.CurrencyField() row_3a = models.IntegerField(initial=13) row_3b = models.IntegerField(initial=13) col_3a = models.StringField(initial='A') col_3b = models.StringField(initial='C') price_3a = models.CurrencyField() price_3b = models.CurrencyField() legroom_3a = models.IntegerField() legroom_3b = models.IntegerField() choice3 = models.StringField(choices=['Seat A','Seat B'], widget=widgets.RadioSelectHorizontal) distance_4 = models.FloatField() time_4 = models.StringField() price_4 = models.CurrencyField() row_4a = models.IntegerField(initial=14) row_4b = models.IntegerField(initial=8) col_4a = models.StringField(initial='F') col_4b = models.StringField(initial='E') price_4a = models.CurrencyField() price_4b = models.CurrencyField() legroom_4a = models.IntegerField() legroom_4b = models.IntegerField() choice4 = models.StringField(choices=['Seat A','Seat B'], widget=widgets.RadioSelectHorizontal) distance_5 = models.FloatField() time_5 = models.StringField() price_5 = models.CurrencyField() row_5a = models.IntegerField(initial=5) row_5b = models.IntegerField(initial=21) col_5a = models.StringField(initial='F') col_5b = models.StringField(initial='C') price_5a = models.CurrencyField() price_5b = models.CurrencyField() legroom_5a = models.IntegerField() legroom_5b = models.IntegerField() choice_5 = models.StringField(choices=['Seat A','Seat B'], widget=widgets.RadioSelectHorizontal) distance_6 = models.FloatField() time_6 = models.StringField() price_6 = models.CurrencyField() row_6a = models.IntegerField(initial=12) row_6b = models.IntegerField(initial=27) col_6a = models.StringField(initial='B') col_6b = models.StringField(initial='D') price_6a = models.CurrencyField() price_6b = models.CurrencyField() legroom_6a = models.IntegerField() legroom_6b = models.IntegerField() choice_6 = models.StringField(choices=['Seat A','Seat B'], widget=widgets.RadioSelectHorizontal)