def firefox_family_get_ticket(request): periods = ('10:00', '10:30', '11:00', '11:30', '12:00', '12:30', '13:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30') weights = (4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) day_mapping = { '1': '11/22', '2': '11/23', } data = {'result': 'failed'} if request.user.is_active: currentCampaign = Campaign.objects.get(slug=tenYearsCampaignSlug) existing = Award.objects.filter(name=u'早鳥票', activity=currentCampaign, winner=request.user) ticketExists = existing.exists() if currentCampaign.status == 'end': data['result'] = 'ended' elif not ticketExists and 'day' in request.GET: day = day_mapping[request.GET['day']] suggested_period = weighted_sample(periods, weights)[0] #save award session = '%s %s' % (day, suggested_period) while True: verification_code = generate_claim_code() if not Award.objects.filter(name=u'早鳥票', activity=currentCampaign, note=verification_code).exists(): break ticket = Award(name=u'早鳥票', activity=currentCampaign, note=verification_code, winner=request.user, winner_extra=session) ticket.save() data['session'] = session data['code'] = verification_code data['result'] = 'success' data['existing'] = False generate_10years_ticket(data['session'], data['code']) elif ticketExists: data['result'] = 'success' data['session'] = existing[0].winner_extra data['code'] = existing[0].note data['existing'] = True else: data['message'] = 'invalid request' else: data['message'] = 'unauthorized' response = json.dumps(data) return HttpResponse(response, mimetype='application/x-javascript')
def firefox_family_lottery(request): prices_levels = (('sorry', 'notebook', 'totebag', 'carsticker', 'nbsticker'), ('mug', 'taipeipass', 'backpack', 'fxosphone')) data = {'result': 'failed'} if request.user.is_active: currentCampaign = Campaign.objects.get(slug=tenYearsCampaignSlug) existing = Award.objects.filter(name=u'幸運轉輪', activity=currentCampaign, winner=request.user) if currentCampaign.status == 'end': data['result'] = 'ended' elif not existing.exists() and 'level' in request.GET: level = int(request.GET['level']) price_keys = prices_levels[0] if level == 0 else prices_levels[0] + prices_levels[1] prices = Price.objects.filter(name__in=price_keys) weights = [] for price in prices: if price.name == 'sorry': weights += [1000, ] else: weights += [price.quantity, ] winning_price = weighted_sample(prices, weights)[0] #save award, decrease price quantity if winning_price.name != 'sorry': winning_price.quantity -= 1 winning_price.save() lottery_award = Award(name=u'幸運轉輪', activity=currentCampaign, winner=request.user, price=winning_price) lottery_award.save() data['slug'] = winning_price.name data['name'] = winning_price.description data['result'] = 'success' data['existing'] = False elif existing.exists(): data['result'] = 'success' data['slug'] = existing[0].price.name data['name'] = existing[0].price.description data['existing'] = True else: data['message'] = 'invalid request' else: data['message'] = 'unauthorized' response = json.dumps(data) return HttpResponse(response, mimetype='application/x-javascript')
def review2014_award(request): data = {'result': 'failed'} if request.user.is_active: currentCampaign = Campaign.objects.get(slug=review2014CampaignSlug) existing = Award.objects.filter(name=u'贈獎', activity=currentCampaign, winner=request.user) if currentCampaign.status == 'end': data['result'] = 'ended' elif not existing.exists() and 'score' in request.GET: price = Price.objects.get(name='redenvelope') # check total quota and daily quota quotaToday = REVIEW2014_DAILY_QUOTA - Award.objects.filter( name=u'贈獎', activity=currentCampaign, price=price, create_time__range=get_1day_range(datetime.now())).count() quota = min(price.quantity, quotaToday) if quota > 0: # save award, decrease price quantity price.quantity -= 1 price.save() award = Award(name=u'贈獎', activity=currentCampaign, winner=request.user, price=price) award.save() data['slug'] = price.name data['name'] = price.description data['result'] = 'success' data['existing'] = False else: data['inventory'] = 'normal' if price.quantity > 0 else 'out-of-stock' data['message'] = 'quota exceeded' elif existing.exists(): data['result'] = 'success' data['slug'] = existing[0].price.name data['name'] = existing[0].price.description data['existing'] = True else: data['message'] = 'invalid request' else: data['message'] = 'unauthorized' response = json.dumps(data) return HttpResponse(response, mimetype='application/x-javascript')