import json from collections import namedtuple from otree.api import (BaseConstants, BaseGroup, BasePlayer, BaseSubsession, models, widgets) author = 'Robert zur Bonsen' doc = """ """ RideInfo = namedtuple('RideInfo', ['time', 'cost']) class Constants(BaseConstants): name_in_url = 'intro' players_per_group = None num_rounds = 1 data_file = "./start/data.csv" correct_answer = 1 ACTIVE = 1 INACTIVE = 0 FAILED = -1 class Subsession(BaseSubsession): def creating_session(self): trip_pics = json.load(open('trips.json')) self.session.vars['trip_pics'] = trip_pics class Group(BaseGroup): pass QUESTIONS = { 'q_indiv': { 'choices': [ [Constants.correct_answer + 1, "0,50 € und 14 Minuten"], [Constants.correct_answer + 2, "2,50 € und 20 Minuten"], [Constants.correct_answer + 3, "0 € und 0 Minuten"], [Constants.correct_answer, "2 € und 6 Minuten"], ], 'widget': widgets.RadioSelect }, 'q_shared': { 'choices': [ [Constants.correct_answer + 1, "10 € und 4 Minuten"], [Constants.correct_answer + 2, "12 € und 5 Minuten"], [Constants.correct_answer, "20 € und 7 Minuten"], [Constants.correct_answer + 3, "19 € und 8 Minuten"], ], 'widget': widgets.RadioSelect }, 'q_cost_diff': { 'choices': [[Constants.correct_answer + 3, "Ja"], [Constants.correct_answer + 1, "Nein"], [Constants.correct_answer, "Nicht bekannt"]], 'widget': widgets.RadioSelect }, 'q_time_diff': { 'choices': [ [Constants.correct_answer + 1, "Für Sie"], [Constants.correct_answer + 2, "Für Den anderen Teilnehmer"], [Constants.correct_answer, "Nicht bekannt"], ], 'widget': widgets.RadioSelect }, } class Player(BasePlayer): attempts = models.IntegerField(default=2) legend_clicks_1 = models.IntegerField(default=0) legend_clicks_2 = models.IntegerField(default=0) q_indiv_fails = models.IntegerField(default=0) q_shared_fails = models.IntegerField(default=0) q_cost_diff_fails = models.IntegerField(default=0) q_time_diff_fails = models.IntegerField(default=0) q_indiv = models.IntegerField(**QUESTIONS['q_indiv']) q_time_diff = models.IntegerField(**QUESTIONS['q_time_diff']) q_shared = models.IntegerField(**QUESTIONS['q_shared']) q_cost_diff = models.IntegerField(**QUESTIONS['q_cost_diff']) info_level = models.BooleanField(default=False) client_number = models.IntegerField( label='Bitte geben Sie Ihre Rechnernummer ein, damit wir Ihre Auszahlung zuordnen können.', ) def client_number_error_message(self, value): if 1 <= value <= 32: return None elif value == -999: return None else: return "Bitte geben Sie eine Nummer zwischen 1 und 32 ein"