import random import os import requests import qrcode from PIL import Image from PIL import ImageDraw import time from otree.api import * import cv2 from twilio.rest import Client class Constants(BaseConstants): name_in_url = 'voucher' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass def creating_session(subsession): for p in subsession.get_players(): p.first_usage = False p.second_usage = False class Group(BaseGroup): pass class Player(BasePlayer): # Time track voucher_input_time = models.FloatField() voucher_input_time_readable = models.StringField() voucher1_usage_time = models.FloatField() voucher1_usage_time_readable = models.StringField() voucher2_usage_time = models.FloatField() voucher2_usage_time_readable = models.StringField() # Voucher voucher_code_input = models.StringField(label='') voucher_display = models.StringField() # Check box for first voucher first_usage = models.BooleanField(blank=True) # first_compensation = models.BooleanField(blank=True) # Check box for second voucher second_usage = models.BooleanField(blank=True) # second_compensation = models.BooleanField(blank=True) # Pages class VC(Page): form_model = 'player' form_fields = ['voucher_code_input'] @staticmethod def before_next_page(player: Player, timeout_happened): player.voucher_display = 'https://stat.hanken.fi/static/vcodesearch/'+str(player.voucher_code_input)+'.png' from datetime import datetime, timedelta t = datetime.now() + timedelta(weeks=0) player.voucher_input_time = t.timestamp() player.voucher_input_time_readable = t.strftime('%Y-%m-%d %H:%M:%S') @staticmethod def error_message(player: Player, values): if (os.path.exists("./_static/vcodesearch/"+str(values['voucher_code_input'])+'.png')): pass else: return "Sorry! Your voucher code is invalid. Please check your code or if you have any questions, contact management@helsinkilabbet.fi" repeated_voucher = False # 标记当前用户是否重复的变量 for p in player.subsession.get_players(): if values['voucher_code_input'][0] == 'F': if p.first_usage: if p.voucher_code_input == values['voucher_code_input']: repeated_voucher = True if repeated_voucher: return "Sorry! This voucher code has already been used! Please check your code or contact management@helsinkilabbet.fi " \ "Thanks for understanding." else: pass else: pass else: pass else: pass if values['voucher_code_input'][0] == 'S': if p.second_usage: if p.voucher_code_input == values['voucher_code_input']: repeated_voucher = True if repeated_voucher: return "Sorry! This voucher code has already been used! Please check your code, or contact management@helsinkilabbet.fi" \ "Thanks for understanding!" else: pass else: pass else: pass else: pass class FVT(Page): @staticmethod def is_displayed(player: Player): return player.voucher_code_input[0] == 'F' form_model = 'player' form_fields = ['first_usage'] @staticmethod def before_next_page(player: Player, timeout_happened): # player.first_usage = True from datetime import datetime, timedelta t = datetime.now() + timedelta(weeks=0) player.voucher1_usage_time = t.timestamp() player.voucher1_usage_time_readable = t.strftime('%Y-%m-%d %H:%M:%S') class SVT(Page): @staticmethod def is_displayed(player: Player): return player.voucher_code_input[0] == 'S' form_model = 'player' form_fields = ['second_usage'] @staticmethod def before_next_page(player: Player, timeout_happened): # player.second_usage = True from datetime import datetime, timedelta t = datetime.now() + timedelta(weeks=0) player.voucher2_usage_time = t.timestamp() player.voucher2_usage_time_readable = t.strftime('%Y-%m-%d %H:%M:%S') class Thank(Page): pass page_sequence = [ VC, FVT, SVT, Thank ]