from otree.api import * import datetime doc = """ A simple application that takes a unique Qualtrics code and returns an Amazon gift voucher (or a series of Amazon gift vouchers). The Qualtrics code will be presented to participants during the discrimination survey. Qualtrics codes are generated according to a special formula combining 11 secret herbs and spices. There are two distinct types-- 'immediate' and 'delayed' Qualtrics-Amazon codes are pre-loaded in a file called `amazon_vouchers.csv` """ DATE = datetime.datetime.now() CUTOFF_DATE = datetime.datetime(2022, 12, 9, 14, 4) print(CUTOFF_DATE) contact_info_text = ( "If you think that you are seeing this page in error, " "please contact the Principal Investigator Joseph Gomes " "at joseph.gomes@uclouvain.be") class C(BaseConstants): NAME_IN_URL = 'payment' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 PAYMENT_URL = "http://localhost:8000/room/TwitterProject" CONTACT_INFO = contact_info_text class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): pass # qualtricscode = models.StringField( # label = ("Please enter the unique code you wrote down " # "during the survey") # ) # confirm_code = models.BooleanField( # choices = [[True, "Yes"], # [False, "No"]], # label = ("Is this correct?") # ) ## Read in the vouchers class Vouchers(ExtraModel): qualtrics = models.StringField() early_or_late = models.StringField() amazon_immediate = models.StringField() amazon_delayed = models.StringField() transcription_earnings = models.StringField() VOUCHERS_DICTIONARY = dict() rows = read_csv('payment/amazon_vouchers.csv', Vouchers) for row in rows: qualtrics = row['qualtrics'] amazon_immediate = row['amazon_immediate'] amazon_delayed = row['amazon_delayed'] transcription = row['transcription_earnings'] time_dic = {"early": amazon_immediate, "late": amazon_delayed, "transcription": transcription} VOUCHERS_DICTIONARY.update({qualtrics: time_dic}) print(VOUCHERS_DICTIONARY) ## Functions for the Pages def sum_first_digits(qualtrics_string): qstr = qualtrics_string digit_sum = (int(qstr[0]) + int(qstr[1]) + int(qstr[2]) + int(qstr[3])) ##print(digit_sum) return digit_sum def code_is_early(qualtrics_code): qstr = str(qualtrics_code) return sum_first_digits(qstr) == 15 def code_is_late(qualtrics_code): qstr = str(qualtrics_code) return sum_first_digits(qstr) == 20 def check_code_status(qualtrics_code): if code_is_early(qualtrics_code) or code_is_late(qualtrics_code): code_status = "correct_early" else: code_status = "invalid" if code_is_late(qualtrics_code) and (DATE <= CUTOFF_DATE): code_status = "too_early" if code_is_late(qualtrics_code) and (DATE >= CUTOFF_DATE): code_status = "correct_late" return code_status def get_early_voucher(qualtrics_code): voucher_dic = VOUCHERS_DICTIONARY[qualtrics_code] voucher = voucher_dic["early"] return voucher def get_late_vouchers(qualtrics_code): voucher_dic = VOUCHERS_DICTIONARY[qualtrics_code] voucher_early = voucher_dic["early"] voucher_late = voucher_dic["late"] transcription = voucher_dic["transcription"] return (voucher_early, voucher_late, transcription) # PAGES class AmazonPage(Page): #form_model = 'player' #form_fields = ['qualtricscode'] def vars_for_template(player: Player): participant = player.participant qualtricscode = str(player.participant.label) code_status = check_code_status(qualtricscode) voucher = "" voucher1 = "" voucher2 = "" transcription = "" if (code_status == "correct_early") and (DATE < CUTOFF_DATE): voucher = get_early_voucher(qualtricscode) if (code_status == "correct_early") and (DATE >= CUTOFF_DATE): voucher = get_early_voucher(qualtricscode) if (code_status == "correct_late") and (DATE >= CUTOFF_DATE): late_tuple = get_late_vouchers(qualtricscode) voucher1, voucher2, transcription = late_tuple return { "voucher": voucher, "voucher1": voucher1, "voucher2": voucher2, "transcription": transcription, "code_status": code_status} class FinalPage(Page): pass page_sequence = [AmazonPage, FinalPage]