from otree.api import * import random DEBUG = False ### todo: Set to False for real experiment & controlstages working / True doc = """ "Environmental Experiment". """ class C(BaseConstants): NAME_IN_URL = 'Environmental_Manager' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 DSGVO_PAGE = __name__ + '/Datenschutz.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): player_Type = models.IntegerField() user_Role = models.StringField() correct_answer = models.IntegerField(initial=0) User_input = models.IntegerField(blank=True) total_correct = models.IntegerField() amount = models.IntegerField() numberInput = models.IntegerField() counter = models.IntegerField(initial=0) solution = models.IntegerField() einwilligung1 = models.BooleanField( label="Ich willige in die Teilnahme an der oben beschriebenen Studie ein.", choices=[ [1, "Ja"], [0, "Nein"], ], widget=widgets.RadioSelect, ) einwilligung2 = models.BooleanField( label = "Ich willige hiermit ein (Art. 6 Abs. 1 lit. a DSGVO), dass meine übermittelten persönlichen Daten gespeichert und verarbeitet werden dürfen. Ich versichere, dass ich über 16 Jahre alt bin bzw. die Zustimmung der / des Sorgeberechtigten zur Nutzung des Kontaktes und Weitergabe der Daten vorliegt. Die Datenschutzerklärung zum Formular habe ich gelesen. Das Recht des Widerrufs ist mir bekannt.", choices=[ [1, "Ja"], [0, "Nein"], ], widget=widgets.RadioSelect, ) control_man1 = models.IntegerField( label="", choices=[ [1, "Arbeitnehmer"], [2, "Manager"], ], widget=widgets.RadioSelect, ) control_man2 = models.IntegerField( label="Mein Bonus beträgt _____ Taler", min=0, ) ios = models.IntegerField( label="", min=1, max=7, ) prolificID = models.StringField( label="Bitte tragen Sie hier Ihre Prolific ID ein:" ) profit = models.IntegerField( label="Bitte geben Sie im folgenden Feld an wie viele Taler Sie zur Gewinnerzielung im Unternehmen behalten wollen:", min=0, max=999 ) donation = models.IntegerField() def prolificID_error_message(player, value): if len(value) != 24: return "Ihre Prolific ID muss 24 Zeichen (Buchstaben & Zahlen) lang sein." class Welcome(Page): form_model = 'player' form_fields = ['einwilligung1', 'einwilligung2'] class Instructions(Page): pass class ProlificID(Page): form_model = 'player' form_fields = ['prolificID'] class ComprehensionChecks(Page): form_model = 'player' form_fields = ['control_man1', 'control_man2'] @staticmethod def error_message(player, values): if not DEBUG: if values['control_man1'] != 2 or values['control_man2'] != 75: return 'Mindestens eine Ihrer Antworten war nicht korrekt. Bitte beachten Sie:' \ '' \ 'Ihr Bonus wird nach folgender Formel berechnet: Bonus = 0.5 * X, wobei X die Menge der Ressourcen darstellt, die Sie zur Gewinnerzielung verwenden.' class Moor(Page): form_model = 'player' class Decision(Page): form_model = 'player' form_fields = ['profit'] def before_next_page(player): player.donation = player.income - player.profit class Split(Page): form_model = 'player' @staticmethod def vars_for_template(player: Player): return dict(bonus=player.profit*0.5) page_sequence = [Welcome, ProlificID, Instructions, ComprehensionChecks, Moor, Decision, Split, ]