from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) import time import random import string class welcome(Page): form_model ='player' form_fields= ['adult', 'willing', "smartphone", 'useto'] def before_next_page(self): #3 days self.participant.vars['expiry'] = time.time() + (3*24*60*60) class informed(Page): form_model = 'player' form_fields = ['expl','vol','haveread','withdraw','informed'] def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def before_next_page(self): if self.timeout_happened: self.player.timeout_happened = True else : self.player.timeout_happened = False class howtouseapp(Page): form_model ='player' def is_displayed(self): return self.participant.vars['treatment'] != "gthree" and not self.player.timeout_happened form_model ='player' def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def before_next_page(self): if self.timeout_happened: self.player.timeout_happened = True else : self.player.timeout_happened = False class howtouseapp3(Page): def is_displayed(self): return self.participant.vars['treatment'] == "gthree" and not self.player.timeout_happened form_model ='player' def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def before_next_page(self): if self.timeout_happened: self.player.timeout_happened = True else : self.player.timeout_happened = False class yourtask1(Page): form_model = 'player' form_fields = ['seemorebutton','truthearning','truthquality','scorecommon'] def is_displayed(self): return self.participant.vars['treatment'] == "gone" and not self.player.timeout_happened def error_message(self, values): if values['truthearning'] != 'increases': return 'Die Antwort zu der ersten Frage ist nicht richtig..' if values['truthquality'] != 'increases': return 'Die Antwort zu der zweiten Frage ist nicht richtig.' if values['scorecommon'] != 'group': return 'Die Antwort zu der dritten Frage ist nicht richtig.' def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def before_next_page(self): if self.timeout_happened: self.player.timeout_happened = True else : self.player.timeout_happened = False class yourtask2(Page): form_model = 'player' form_fields = ['secondquestiongtwo'] def is_displayed(self): return self.participant.vars['treatment'] == "gtwo" and not self.player.timeout_happened def error_message(self, values): if values['secondquestiongtwo'] != 'noimpact': return 'Die Antwort zu der ersten Frage ist nicht richtig.' def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def before_next_page(self): if self.timeout_happened: self.player.timeout_happened = True else : self.player.timeout_happened = False class yourtask3(Page): form_model ="player" form_fields =['secondquestiongthree'] def is_displayed(self): return self.participant.vars['treatment'] == "gthree" and not self.player.timeout_happened def error_message(self, values): if values['secondquestiongthree'] != 'noimpact': return 'Die Antwort zu der ersten Frage ist nicht richtig' def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def before_next_page(self): if self.timeout_happened: self.player.timeout_happened = True else : self.player.timeout_happened = False def RepresentsInt(e): try: int(e) return True except ValueError: return False def check_int(s): spl = s.split(',') if len(spl) == 1: spl = s.split('.') if len(spl) ==2: return RepresentsInt(spl[0]) and RepresentsInt(spl[1]) else : return RepresentsInt(spl[0]) class report1(Page): form_model = 'player' form_fields = ['time','distance','averagepace','fastestpace','ascent','descent','energy','kmormile1','kmormile2','kmormile3','kmormile4','kmormile5','calorjoules'] def error_message(self, values): Walkzeit_split = values['time'].split(':') if len(Walkzeit_split) != 2 or not check_int(Walkzeit_split[0]) or not check_int(Walkzeit_split[1]) : return 'Zulässiges Zeitformat für Walkzeit: 10<= Minuten <=25 , 0<=Sekunden<= 59' minutes_walkzeit = int(Walkzeit_split[0]) seconds_walkzeit = int(Walkzeit_split[1]) if ':' not in values['time'] or minutes_walkzeit <10 or minutes_walkzeit >25 or seconds_walkzeit >59 or seconds_walkzeit <0 : return 'Zulässiges Zeitformat für Walkzeit: 10<= Minuten <=25 , 0<=Sekunden<= 59' averagepace_split = values['averagepace'].split(':') if len(averagepace_split) == 2: if not check_int(averagepace_split[0]) or not check_int(averagepace_split[1]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' minutes_average = int(averagepace_split[0]) seconds_average = int(averagepace_split[1]) if minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if len(averagepace_split) == 3: if not check_int(averagepace_split[0]) or not check_int(averagepace_split[1]) or not check_int(averagepace_split[2]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' hours_average = int(averagepace_split[0]) minutes_average = int(averagepace_split[1]) seconds_average = int(averagepace_split[2]) if hours_average < 0 or hours_average >12 or minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if not (len(averagepace_split) == 3 or len(averagepace_split)== 2) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' fastest_split = values['fastestpace'].split(':') if len(fastest_split) == 2: if not check_int(fastest_split[0]) or not check_int(fastest_split[1]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' minutes_average = int(fastest_split[0]) seconds_average = int(fastest_split[1]) if minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if len(fastest_split) == 3: if not check_int(fastest_split[0]) or not check_int(fastest_split[1]) or not check_int(fastest_split[2]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' hours_average = int(fastest_split[0]) minutes_average = int(fastest_split[1]) seconds_average = int(fastest_split[2]) if hours_average < 0 or hours_average >12 or minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if not (len(fastest_split) == 3 or len(fastest_split)== 2) : return str(len(averagepace_split))+'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if not check_int(values['distance']) or not check_int(values['ascent']) or not check_int(values['descent']) or not check_int(values['energy']) : return 'Nur numerische Werte oder Dezimalzahlen zulässig' def is_displayed(self): return self.participant.vars['treatment'] == "gone" and not self.player.timeout_happened def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def before_next_page(self): if self.timeout_happened: self.player.timeout_happened = True else : self.player.timeout_happened = False class report2(Page): form_model = 'player' form_fields = ['time','distance','averagepace','fastestpace','ascent','descent','energy','kmormile1','kmormile2','kmormile3','kmormile4','kmormile5','calorjoules'] def error_message(self, values): Walkzeit_split = values['time'].split(':') if len(Walkzeit_split) != 2 or not check_int(Walkzeit_split[0]) or not check_int(Walkzeit_split[1]) : return 'Zulässiges Zeitformat für Walkzeit: 10<= Minuten <=25 , 0<=Sekunden<= 59' minutes_walkzeit = int(Walkzeit_split[0]) seconds_walkzeit = int(Walkzeit_split[1]) if ':' not in values['time'] or minutes_walkzeit <10 or minutes_walkzeit >25 or seconds_walkzeit >59 or seconds_walkzeit <0 : return 'Zulässiges Zeitformat für Walkzeit: 10<= Minuten <=25 , 0<=Sekunden<= 59' averagepace_split = values['averagepace'].split(':') if len(averagepace_split) == 2: if not check_int(averagepace_split[0]) or not check_int(averagepace_split[1]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' minutes_average = int(averagepace_split[0]) seconds_average = int(averagepace_split[1]) if minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if len(averagepace_split) == 3: if not check_int(averagepace_split[0]) or not check_int(averagepace_split[1]) or not check_int(averagepace_split[2]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' hours_average = int(averagepace_split[0]) minutes_average = int(averagepace_split[1]) seconds_average = int(averagepace_split[2]) if hours_average < 0 or hours_average >12 or minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if not (len(averagepace_split) == 3 or len(averagepace_split)== 2) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' fastest_split = values['fastestpace'].split(':') if len(fastest_split) == 2: if not check_int(fastest_split[0]) or not check_int(fastest_split[1]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' minutes_average = int(fastest_split[0]) seconds_average = int(fastest_split[1]) if minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if len(fastest_split) == 3: if not check_int(fastest_split[0]) or not check_int(fastest_split[1]) or not check_int(fastest_split[2]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' hours_average = int(fastest_split[0]) minutes_average = int(fastest_split[1]) seconds_average = int(fastest_split[2]) if hours_average < 0 or hours_average >12 or minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if not (len(fastest_split) == 3 or len(fastest_split)== 2) : return str(len(averagepace_split))+'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if not check_int(values['distance']) or not check_int(values['ascent']) or not check_int(values['descent']) or not check_int(values['energy']) : return 'Nur numerische Werte oder Dezimalzahlen zulässig' def is_displayed(self): return self.participant.vars['treatment'] == "gtwo" and not self.player.timeout_happened def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() def before_next_page(self): if self.timeout_happened: self.player.timeout_happened = True else : self.player.timeout_happened = False class report3(Page): form_model = 'player' form_fields = ['image','time','distance','averagepace','fastestpace','ascent','descent','energy','kmormile1','kmormile2','kmormile3','kmormile4','kmormile5','calorjoules'] def error_message(self, values): Walkzeit_split = values['time'].split(':') if len(Walkzeit_split) != 2 or not check_int(Walkzeit_split[0]) or not check_int(Walkzeit_split[1]) : return 'Zulässiges Zeitformat für Walkzeit: 10<= Minuten <=25 , 0<=Sekunden<= 59' minutes_walkzeit = int(Walkzeit_split[0]) seconds_walkzeit = int(Walkzeit_split[1]) if ':' not in values['time'] or minutes_walkzeit <10 or minutes_walkzeit >25 or seconds_walkzeit >59 or seconds_walkzeit <0 : return 'Zulässiges Zeitformat für Walkzeit: 10<= Minuten <=25 , 0<=Sekunden<= 59' averagepace_split = values['averagepace'].split(':') if len(averagepace_split) == 2: if not check_int(averagepace_split[0]) or not check_int(averagepace_split[1]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' minutes_average = int(averagepace_split[0]) seconds_average = int(averagepace_split[1]) if minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if len(averagepace_split) == 3: if not check_int(averagepace_split[0]) or not check_int(averagepace_split[1]) or not check_int(averagepace_split[2]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' hours_average = int(averagepace_split[0]) minutes_average = int(averagepace_split[1]) seconds_average = int(averagepace_split[2]) if hours_average < 0 or hours_average >12 or minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if not (len(averagepace_split) == 3 or len(averagepace_split)== 2) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' fastest_split = values['fastestpace'].split(':') if len(fastest_split) == 2: if not check_int(fastest_split[0]) or not check_int(fastest_split[1]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' minutes_average = int(fastest_split[0]) seconds_average = int(fastest_split[1]) if minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if len(fastest_split) == 3: if not check_int(fastest_split[0]) or not check_int(fastest_split[1]) or not check_int(fastest_split[2]) : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' hours_average = int(fastest_split[0]) minutes_average = int(fastest_split[1]) seconds_average = int(fastest_split[2]) if hours_average < 0 or hours_average >12 or minutes_average >59 or minutes_average <0 or seconds_average >59 or seconds_average <0 : return 'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if not (len(fastest_split) == 3 or len(fastest_split)== 2) : return str(len(averagepace_split))+'Zulässiges Zeitformat für Tempo: 0<=Stunden<=12, 0<=Minuten<=59, 0<=Sekunden<=59' if not check_int(values['distance']) or not check_int(values['ascent']) or not check_int(values['descent']) or not check_int(values['energy']) : return 'Nur numerische Werte oder Dezimalzahlen zulässig' def before_next_page(self): if self.timeout_happened: self.player.timeout_happened = True else : self.player.timeout_happened = False def is_displayed(self): return self.participant.vars['treatment'] == "gthree" and not self.player.timeout_happened def get_timeout_seconds(self): return self.participant.vars['expiry'] - time.time() class TimerRanOut(Page): form_model = 'player' def is_displayed(self): return self.player.timeout_happened class demographics(Page): form_model = 'player' form_fields = ['gender','age','corona','phonebrand','exactphone','otherphone','paidversion','steplengthinfo','tragbaresfitnessgerät','risktaker','weight','height'] def error_message(self, values): if int(values['weight']) <30 or int(values['weight']) >300 : return 'Please enter your weight in kg' if int(values['height']) <90 or int(values['height'])>230 : return 'Please enter your height in cm' def is_displayed(self): return not self.player.timeout_happened class earnings(Page): form_model = 'player' form_fields =['wahrheitsgetreu1','gewinnchance','wahrheitsgetreu2','ermöglicht','Datenerfassung','personalisierte','fairbewerten','gesamtheit','Zusammenhang'] def is_displayed(self): return self.participant.vars['treatment'] == "gone" and not self.player.timeout_happened class earnings2(Page): form_model = 'player' form_fields =['wahrheitsgetreu1','wahrheitsgetreu2_23','ermöglicht23','Datenerfassung23','personalisierte23','Zusammenhang23'] def is_displayed(self): return self.participant.vars['treatment'] != "gone" and not self.player.timeout_happened ##### class end(Page): form_model ='player' class badend(Page): form_model= 'player' def is_displayed(self): if self.player.adult =='False' or self.player.willing =='False' or self.player.smartphone =='False' or self.player.useto =='False': return True else: return False page_sequence = [welcome, badend, informed, howtouseapp, howtouseapp3,yourtask1,yourtask2,yourtask3, report1,report2, report3 , TimerRanOut,demographics,earnings,earnings2,end]