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 def truefalse(lab,f ='Nein',t= 'Ja', bl=False): return models.BooleanField(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 = 'gtwo' players_per_group = None num_rounds = 9 instructions_1_template = 'gtwo/instructions_1.html' inst_inf = 'gtwo/instruction_informed.html' instruction_howtouseapp = 'gtwo/instruction_howtouseapp.html' instruction_yourtask1= 'gtwo/instruction_yourtask1.html' instruction_yourtask2 = 'gtwo/instruction_yourtask2.html' instruction_yourtask3 = 'gtwo/instruction_yourtask3.html' instruction_task2= 'gtwo/instruction_task2.html' instruction_earnings= 'gtwo/instruction_earnings.html' instruction_earnings2= 'gtwo/instruction_earnings2.html' class Subsession(BaseSubsession): def creating_session(self): for player in self.get_players(): rnd = random.choice(['gone', 'gtwo','gthree']) player.treatment ='gtwo' player.participant.vars['treatment'] = 'gtwo' class Group(BaseGroup): pass class Player(BasePlayer): #which group treatment = 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. laufen oder rennen Sie, was Teil Ihres Pendelns sein kann?") 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, dass ich meine Teilnahme jederzeit widerrufen kann, wenn ich nicht mehr in dieser Studie teilnehmen möchte, und zwar ohne Angabe einer Begründung.''') 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 Anzahl meiner Lose.'],['decreases','vermindern die Anzahl meiner Lose.'],['increases','erhöhen die Anzahl meiner Lose.']],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 = 'Ihre Einträge werden höher bewertet, wenn diese häufiger vorkommen', choices =[['group','in Ihrer Gruppe als in der Gesamtheit.'],['overall','in der Gesamtheit als in Ihrer Gruppe.']],widget = widgets.RadioSelect) ##missdays common to all groups ###GROUP TWO allattr =models.StringField(label ='Vollständige Fitnessdaten-Einträge', choices=[['noimpact','haben keinen Einfluss auf die Anzahl meiner Lose.'],['decreases','vermindern die Anzahl meiner Lose.'],['increases',' erhöhen die Anzahl meiner Lose.']],widget = widgets.RadioSelect) secondquestiongtwo =models.StringField(label ='Die Inhalte der Fitnessdaten-Einträge', choices=[['noimpact','haben keinen Einfluss auf die Anzahl meiner Lose.'],['decreases','vermindern die Anzahl meiner Lose.'],['increases',' erhöhen die Anzahl meiner Lose.']],widget = widgets.RadioSelect) ## GROUP THREE allattrgthree =models.StringField(label ='Vollständige Fitnessdaten-Einträge (inkl. Bildschirmfoto)', choices=[['noimpact','haben keinen Einfluss auf die Anzahl meiner Lose.'],['decreases','vermindern die Anzahl meiner Lose.'],['increases',' erhöhen die Anzahl meiner Lose.']],widget = widgets.RadioSelect) secondquestiongthree =models.StringField(label ='Die Inhalte der Fitnessdaten-Einträge', choices=[['noimpact','haben keinen Einfluss auf die Anzahl meiner Lose.'],['decreases','vermindern die Anzahl meiner Lose.'],['increases',' erhöhen die Anzahl meiner Lose.']],widget = widgets.RadioSelect) # REPORT time = models.StringField(label ='') distance = models.StringField(label='') 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="images",default ='') #Demographic gender = models.StringField( choices=[['Male', 'Männlich'], ['Female', 'Weiblich'],['Non-binary','Divers']], label='Bitte geben Sie Ihr Geschlecht an:', widget=widgets.RadioSelect, ) corona = truefalse('Haben Corona-Maßnahmen Ihr übliches Fitnessverhalten während der Studie beeinflusst?') weight =models.StringField() weightunit = models.StringField() height = models.StringField() heightunit = 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','Others, please specify']] ) exactphone = models.StringField(label ='', choices=[['galaxy',' Galaxy Note 10/10 Plus/9/Galaxy S10/S10 Plus'],['30p','30P Pro'],['iphone',' XR/XS Max/XS/X/11/11 Pro/11 Pro Max'],['7pro','7 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 = truefalse("Haben Sie für die Studie in der App Schrittlänge (“Step Length”) angeben?",bl= True) tragbaresfitnessgerät = truefalse("Haben Sie für die Studie mit der App zusätzlich ein tragbares Fitnessgerät genutzt?",bl =True) risktaker = models.IntegerField(label ='Wie schätzen Sie sich persönlich ein: Wie risikobereit sind Sie im Allgemeinen?',choices =[[1,'(gar nicht risikobereit) 1'],[2,'2'],[3,'3'],[4,'4'],[5,'5'],[6,'6'],[7,'(sehr risikobereit) 7']],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']]) ##### 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 Berichte zu erfassen über persönliche Daten, wie z.B. Fitness- und Gesundheitsdaten?') ermöglicht= truefalse("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?",t = 'Ich bevorzuge die neue Methode.',f='Ich bevorzuge automatisiertes Verfolgen und Erfassen von Daten.') 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. ']]) 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.') Zusammenhang = models.StringField(label ='Wie haben Sie sich gefühlt im Zusammenhang mit der Darstellung und Erklärung der neuen Methode? 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.']]) ###group two and three