from otree.api import *
doc = """
Your app description
"""
class C(BaseConstants):
import random
# Change these variables:
TEST_RUN = True
NUM_TEST_ROUNDS = 0 # Number of test rounds played; if more than one, Announcement pages have to be adjusted!
NUM_REAL_ROUNDS = 1 # Number of rounds played after the test round(s)
NUM_EXP_ROUNDS = 1 # Number of real rounds in which expectations of other player's behavior are elicited
# Attention: this number does not count the test rounds!
# Leave these variables
NAME_IN_URL = 'qlm'
PLAYERS_PER_GROUP = 6
NUM_ROUNDS = NUM_TEST_ROUNDS + NUM_REAL_ROUNDS
ENDOWMENT = 25
EXCHANGE_RATE = 0.25
INV_EXCHANGE_RATE = int(1/EXCHANGE_RATE)
OFFER_MAX = 17
PROB_FED_UP = 0.05
S=0.5
C1=12
C2=4
D1=0
D2=6
AH=2
AL=1
NUM_COLOR_FIELDS = 19
BONUS_COUNTING = 5
def creating_session(subsession):
from itertools import cycle
# Definition of colors
subsession.session.colors = ['Red', 'Blue', 'Green', 'Orange', 'Gold', 'HotPink', 'SaddleBrown', 'Purple', 'Aqua', 'Black']
subsession.session.colors_de = ['rot', 'blau', 'grün', 'orange', 'gelb', 'pink', 'beige', 'violett', 'türkis', 'schwarz']
# Assigning half of the groups to both baseline and samecolor treatment
same = cycle([True, False])
for group in subsession.get_groups():
group.samecolor = next(same)
# Color assignment, switch variables for random order of employees on the promotion page, workerids for players
for player in subsession.get_players():
offset = 2
if player.group.samecolor:
if player.id_in_group <= 3:
offset = -1
player.color_id = player.id_in_group + offset
player.color_name = subsession.session.colors[player.color_id]
player.color_de = subsession.session.colors_de[player.color_id]
player.color_html = '{}'.format(player.color_name, player.color_de)
add_e = '' if player.color_de[-1] == 'e' else 'e'
player.color_html_akk = '{}{}{}'.format(player.color_name, player.color_de, add_e, 'n')
player.color_html_fem = '{}{}'.format(player.color_name, player.color_de, add_e)
class Subsession(BaseSubsession):
pass
class Group(BaseGroup):
samecolor = models.BooleanField()
class Player(BasePlayer):
color_id = models.IntegerField(initial = 1)
color_name = models.StringField()
color_de = models.StringField()
color_html = models.StringField()
color_html_akk = models.StringField()
color_html_fem = models.StringField()
picture_count = models.IntegerField()
bonus_counting = models.BooleanField(initial=True)
paypal = models.StringField()
# PAGES
class Welcome(Page):
pass
@staticmethod
def vars_for_template(player: Player):
session = player.session
return dict(inv_exchange_rate = int(1/session.real_world_currency_per_point))
class ColorGroupAssignment(Page):
pass
class Counting(Page):
form_model = 'player'
form_fields = ['picture_count']
class Explanation(Page):
form_model = 'player'
form_fields = ['paypal']
class End(Page):
form_model = 'player'
@staticmethod
def is_displayed(player):
return player.round_number == C.NUM_ROUNDS
page_sequence = [
Welcome, ColorGroupAssignment, Counting, Explanation, End
]
#cd Dropbox\Programming\otree\qlm