from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) from django_countries.fields import CountryField from django.db import models as django_models import random from s3direct.fields import S3DirectField from datetime import datetime import string import uuid def truefalse(lab,f ='Nein',t= 'Ja', bl=False): return models.StringField(label =lab,choices=[['False',f],['True',t]],blank =bl, widget= widgets.RadioSelectHorizontal) def agree(lab ="",t ='Genau'): return models.BooleanField(label =lab,choices=[[True,t]], widget= widgets.RadioSelectHorizontal) class Constants(BaseConstants): name_in_url = 'gthree' players_per_group = None num_rounds = 1 instructions_1_template = 'gthree/instructions_1.html' inst_inf = 'gthree/instruction_informed.html' instruction_howtouseapp = 'gthree/instruction_howtouseapp.html' instruction_howtouseapp3 = 'gthree/instruction_howtouseapp3.html' instruction_ihreaufgabe1= 'gthree/instruction_ihreaufgabe1.html' instruction_ihreaufgabe2 = 'gthree/instructions_ihreaufgabe2.html' instruction_ihreaufgabe3 = 'gthree/instruction_ihreaufgabe3.html' instruction_task2= 'gthree/instruction_task2.html' instruction_earnings= 'gthree/instruction_earnings.html' instruction_earnings2= 'gthree/instruction_earnings2.html' class Subsession(BaseSubsession): def creating_session(self): for player in self.get_players(): rnd = random.choice(['gone', 'gtwo','gthree']) player.treatment ='gthree' player.participant.vars['treatment'] = 'gthree' def id_generator(size=8, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) #3 days player.random_id = id_generator() player.participant.vars['random_id'] = player.random_id class Group(BaseGroup): pass def id_generator(size=8, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) def user_directory_path(instance, filename): # file will be uploaded to MEDIA_ROOT / user_/ return 'screenshots/{0}'.format(instance.random_id) class Player(BasePlayer): #which group treatment = models.StringField() timeout_happened =models.BooleanField() random_id = models.StringField() #WELCOME adult = truefalse("Sind Sie älter als 18 Jahre alt?") smartphone = truefalse("Haben Sie ein Smartphone?") useto= truefalse("Sind Sie üblicherweise physisch aktiv im Freien (outdoor), z.B. Gehen, Laufen, Joggen? Dies kann auch Teil Ihres täglichen Pendelns sein?") willing = truefalse("Sind Sie bereit, die kostenlose Version der Walkmeter App von Abvio herunterzuladen und zu nutzen gemäß den Nutzungsbedingungen der App?") # CONSENT expl = agree(t="Ich stimme zu, dass die oben beschriebene Studie zur Erfassung von Fitnessdaten zu meiner Zufriedenheit erklärt wurde.") vol = agree(t="Ich stimme zu, bei dieser Studie freiwillig teilzunehmen.") withdraw = agree(t='''Ich verstehe, falls ich nicht mehr an dieser Studie teilnehmen möchte, meine Teilnahme jederzeit ohne Angabe von Gründen widerrufen kann.''') haveread= agree(t='Ich habe die Informationen in dieser informierten Einwilligung gelesen oder gehört und verstanden.') informed =agree(t='''Ich verstehe, dass alle Daten streng vertraulich erfasst und sicher gespeichert werden, und in anonymer Form analysiert werden.''') #TASK UNDERSTANDING ###GROUP ONE seemorebutton = models.StringField(blank =True) truthearning = models.StringField(label='Wahrheitsgetreue und genaue Einträge',choices=[['noimpact','haben keinen Einfluss auf die individuelle Gewinnchance.'],['decreases','vermindern die individuelle Gewinnchance.'],['increases','erhöhen die individuelle Gewinnchance.']],widget = widgets.RadioSelect) truthquality = models.StringField(label ='Wahrheitsgetreue und genaue Einträge', choices = [['noimpact','haben keinen Einfluss auf die Qualität der automatisierten Gruppierung.'],['decreases','vermindern die Qualität der automatisierten Gruppierung.'],['increases','verbessern die Qualität der automatisierten Gruppierung.']],widget = widgets.RadioSelect) scorecommon = models.StringField(label = 'Meine Einträge erhalten eine höhere Bewertung, wenn diese häufiger vorkommen:', choices =[['group','in meiner Gruppe als in der Gesamtheit.'],['overall','in der Gesamtheit als in meiner Gruppe.']],widget = widgets.RadioSelect) ##missdays common to all groups ###GROUP TWO secondquestiongtwo =models.StringField(label ='Die Inhalte der Fitnessdaten-Einträge', choices=[['noimpact','haben keinen Einfluss auf die Gewinnchance.'],['decreases','vermindern die Gewinnchance.'],['increases',' erhöhen die Gewinnchance.']],widget = widgets.RadioSelect) ## GROUP THREE secondquestiongthree =models.StringField(label ='Die Inhalte der Fitnessdaten-Einträge', choices=[['noimpact','haben keinen Einfluss auf die Gewinnchance.'],['decreases','vermindern die Gewinnchance.'],['increases',' erhöhen die Gewinnchance.']],widget = widgets.RadioSelect) # REPORT time = models.StringField(label ='') distance = models.StringField(label='', error_messages={'invalid':"you custom error message"}) kmormile1 = models.StringField() averagepace = models.StringField(label = ' Average pace : (please make your answer in the format " Minutes : Seconds"') kmormile2 = models.StringField() fastestpace = models.StringField(label ='') kmormile3 = models.StringField() ascent = models.StringField(label= "Ascent") kmormile4 = models.StringField() descent = models.StringField(label= "Descent") kmormile5 = models.StringField() energy = models.StringField(label= "Energy burn") calorjoules= models.StringField() ###only for third group image = django_models.ImageField(upload_to =user_directory_path) #image = S3DirectField(dest='primary_destination', blank=sTrue) #Demographic gender = models.StringField( choices=[['Female', 'Weiblich'],['Male', 'Männlich'], ['Nonbinary','Divers']], label='*Bitte geben Sie Ihr Geschlecht an:', widget=widgets.RadioSelect, ) corona = models.StringField()#label ='Haben Corona-Maßnahmen Ihr übliches Fitnessverhalten während der Studie beeinflusst',choices = [['aktiver','Ja, ich bin physisch aktiver als vorher.'],['weniger','Ja, ich bin physisch weniger aktiv als vorher.'],['Nein','Nein, ich bin genauso physisch aktiv als vorher.']] ,widget=widgets.RadioSelect) weight =models.StringField() height = models.StringField() age = models.StringField(label ='*Bitte geben Sie Ihr Alter an:',choices = [['18','18-25'],['26','26-30'],['31','31-40'],['41','41-50'],['51','51-60'],['61','61-70'],['above70','über 70']] ,widget=widgets.RadioSelect) phonebrand = models.StringField(label ='*Bitte geben Sie den Typ Ihres Smartphones an, dass Sie für diese Studie genutzt haben:',choices=[['Samsung','Samsung'],['Huawei','Huawei'],['Apple iPhone','Apple iPhone',],['OnePlus','OnePlus'],['Google Pixel','Google Pixel'],['Other','Anderer Typ']] ) exactphone = models.StringField(label ='', choices=[['galaxy',' Galaxy Note 2O/ Galaxy S20/S20 Ultra'],['P20', 'P20/P30/P40/P40 Pro'],['iphone',' XR/XS Max/XS/X/11/11 Pro/11 Pro Max'],['8pro','8 / 8 Pro '],[' 3XL',' 3 XL/3/3A XL/3A']], blank =True) otherphone = models.StringField(label= 'Anderer Typ:', blank = True) paidversion = truefalse("*Haben Sie für die Studie die bezahlte Version der Walkmeter App genutzt?") steplengthinfo =models.StringField(label ='*Haben Sie für die Studie in der App Schrittlänge (“Step Length”) angegeben?',choices =[['yes','Ja'],['no','Nein'],['idk','Weiß ich nicht']],widget =widgets.RadioSelectHorizontal ,blank =True) tragbaresfitnessgerät = models.StringField(label ='*Haben Sie für die Studie mit der App zusätzlich ein tragbares Fitnessgerät genutzt?',choices =[['yes','Ja'],['no','Nein'],['idk','Weiß ich nicht']],widget =widgets.RadioSelectHorizontal ,blank =True) risktaker = models.IntegerField(label ='*Wie schätzen Sie sich persönlich ein: Wie risikobereit sind Sie im Allgemeinen?',choices =[[1,'(gar nicht risikobereit) '],[2,''],[3,''],[4,''],[5,''],[6,''],[7,'(sehr risikobereit) ']],widget = widgets.RadioSelectHorizontal) ### Earnings ####group one fairbewerten = models.StringField(label ='Was denken Sie, wird die neue Methode in dieser Studie Sie fair bewerten?',choices =[['yes','Ja'],['no','Nein'],['idk','Weiss ich nicht']],widget = widgets.RadioSelect) gesamtheit = models.StringField(label ='Was denken Sie, wird die neue Methode in dieser Studie die Gesamtheit der Teilnehmer fair bewerten?',choices =[['yes','Ja'],['no','Nein'],['idk','Weiss ich nicht']],widget = widgets.RadioSelect) ### gewinnchance = models.IntegerField() ##### wahrheitsgetreu1 =truefalse('Glauben Sie, dass wahrheitsgetreu und genau berichten die beste Strategie in dieser Studie war?') wahrheitsgetreu2 = truefalse('Denken Sie, dass die in dieser Studie genutzte neue Methode eine nützliche Methode ist, um wahrheitsgetreue und genaue Einträge über persönliche Daten zu erfassen, wie z.B. Fitness- und Gesundheitsdaten?') wahrheitsgetreu2_23 = truefalse('Denken Sie, dass die in dieser Studie genutzte Methode eine nützliche Methode ist, um wahrheitsgetreue und genaue Einträge über persönliche Daten zu erfassen, wie z.B. Fitness- und Gesundheitsdaten?') ermöglicht= models.StringField( label = "Die in dieser Studie genutzte neue Methode ermöglicht das Erfassen von persönlichen Daten in hoher Qualität, ohne dabei die Anonymität der Befragten aufgeben zu müssen und ohne automatisiertes Verfolgen (\"Tracking\") der Befragten durch Apps und tragbare Geräte. Aus der Sicht des Anwenders, was würden Sie bevorzugen?", choices = [['neue','Ich bevorzuge die neue Methode.'],['automatisiertes','Ich bevorzuge automatisiertes Verfolgen und Erfassen von Daten.'],['egal','Ist mir egal.']],widget = widgets.RadioSelect) ermöglicht23= models.StringField( label = "Die in dieser Studie genutzte Methode ermöglicht das Erfassen von persönlichen Daten, ohne dabei die Anonymität der Befragten aufgeben zu müssen und ohne automatisiertes Verfolgen (\"Tracking\") der Befragten durch Apps und tragbare Geräte. Aus der Sicht des Anwenders, was würden Sie bevorzugen?", choices = [['neue','Ich bevorzuge die Studien-Methode.'],['automatisiertes','Ich bevorzuge automatisiertes Verfolgen und Erfassen von Daten.'],['egal','Ist mir egal.']],widget = widgets.RadioSelect) Datenerfassung = models.StringField(label ='Im Vergleich zur automatisierten Datenerfassung, was denken Sie über die neue Methode?',choices =[['1','Weniger Leute würden ihre Daten erfassen lassen und die Qualität der Daten wäre schlechter.'],['2','Weniger Leute würden ihre Daten erfassen lassen und die Qualität der Daten wäre besser. '],['3','Mehr Leute würden ihre Daten erfassen lassen und die Qualität der Daten wäre schlechter. '],['4','Mehr Leute würden ihre Daten erfassen lassen und die Qualität der Daten wäre besser. ']],widget = widgets.RadioSelect) Datenerfassung23 = models.StringField(label ='Im Vergleich zur automatisierten Datenerfassung, was denken Sie über die Studien-Methode?',choices = [['1','Weniger Leute würden ihre Daten erfassen lassen und die Qualität der Daten wäre schlechter.'],['2','Weniger Leute würden ihre Daten erfassen lassen und die Qualität der Daten wäre besser.'],['3','Mehr Leute würden ihre Daten erfassen lassen und die Qualität der Daten wäre schlechter.'],['4','Mehr Leute würden ihre Daten erfassen lassen und die Qualität der Daten wäre besser.']],widget = widgets.RadioSelect) personalisierte = truefalse('Immer mehr Smartphone Apps bieten personalisierte Dienste an, welche auf automatisierter Datenerfassung basieren. Welcher Datenquelle würden Sie mehr vertrauen?',t= 'Ich würde den Daten mehr vertrauen, die durch die neue Methode erfasst wurden.',f='Ich würde den Daten mehr vertrauen, die automatisiert erfasst wurden.') personalisierte23 = truefalse('Immer mehr Smartphone Apps bieten personalisierte Dienste an, welche auf automatisierter Datenerfassung basieren. Welcher Datenquelle würden Sie mehr vertrauen?',t ='Ich würde den Daten mehr vertrauen, die durch die Studien-Methode erfasst wurden.',f='Ich würde den Daten mehr vertrauen, die automatisiert erfasst wurden.') Zusammenhang = models.StringField(label ='Wie haben Sie sich im Zusammenhang mit der Darstellung und Erklärung der neuen Methode gefühlt? Bitte markieren Sie die Aussage, die am meisten auf Sie zutrifft.',choices=[['1','Ich fühlte mich angemessen informiert und in Kenntnis gesetzt. '],['2','Ich fühlte mich verwirrt.'],['3','Ich fühlte mich überfordert und überhäuft. '],['4','Ich fühlte mich irgendwie eingeschüchtert.']],widget = widgets.RadioSelect) Zusammenhang23 = models.StringField(label ='Wie haben Sie sich im Zusammenhang mit der Darstellung und Erklärung der Studien-Methode gefühlt? Bitte markieren Sie die Aussage, die am meisten auf Sie zutrifft.',choices=[['1','Ich fühlte mich angemessen informiert und in Kenntnis gesetzt. '],['2','Ich fühlte mich verwirrt.'],['3','Ich fühlte mich überfordert und überhäuft. '],['4','Ich fühlte mich irgendwie eingeschüchtert.']],widget = widgets.RadioSelect) ###group two and three ###group two and three