def get(self): ''' The class serving the page for the earnings ''' selectable=[j[0] for j in TopJobs] selectable.sort(key=lambda x: x.lower()) # Get the selected selected_jobs selected_jobs = self.request.get_all("job") selected_jobs = [j for j in selected_jobs if j in selectable] log.info("Earnings for selected jobs: " + str(selected_jobs)) if len(selected_jobs)>0: # Read patterns from database earnings_db = Earnings.all() earnings1, earnings2 = earnings_db.fetch(2) earnings1.expand() earnings2.expand() else: # Read patterns from database earnings_db = Earnings.all() earnings1 = earnings_db.get() earnings1.expand() #Build top ten top_paid=[(int(count), jobs.split(';')) for count, jobs in earnings1.data_expanded[:10]] #Build the list of matching patterns matching=None searched=False if len(selected_jobs)>0: searched=True # Find out matching patterns matching_temp=[] for data in earnings1.data_expanded: valid=True for j in selected_jobs: if not j in data[1]: valid=False; break; if valid: matching_temp.append(data) #Split and prepare the matching elements if len(matching_temp)>0: matching=[(int(count), jobs.split(';')) for count, jobs in matching_temp] log.info("Found %d matches: %s" %(len(matching),str(matching))) else: log.info("No matches found...") #Generate the page template_values = { 'selectable': selectable, 'selected_jobs':selected_jobs, 'matching':matching, 'searched':searched,'top_paid':top_paid} template = jinja_environment.get_template('templates/earnings.html') self.response.out.write(template.render(template_values))
def get(self): ''' The class serving the page for the earnings ''' selectable = [j[0] for j in TopJobs] selectable.sort(key=lambda x: x.lower()) # Get the selected selected_jobs selected_jobs = self.request.get_all("job") selected_jobs = [j for j in selected_jobs if j in selectable] log.info("Earnings for selected jobs: " + str(selected_jobs)) if len(selected_jobs) > 0: # Read patterns from database earnings_db = Earnings.all() earnings1, earnings2 = earnings_db.fetch(2) earnings1.expand() earnings2.expand() else: # Read patterns from database earnings_db = Earnings.all() earnings1 = earnings_db.get() earnings1.expand() #Build top ten top_paid = [(int(count), jobs.split(';')) for count, jobs in earnings1.data_expanded[:10]] #Build the list of matching patterns matching = None searched = False if len(selected_jobs) > 0: searched = True # Find out matching patterns matching_temp = [] for data in earnings1.data_expanded: valid = True for j in selected_jobs: if not j in data[1]: valid = False break if valid: matching_temp.append(data) #Split and prepare the matching elements if len(matching_temp) > 0: matching = [(int(count), jobs.split(';')) for count, jobs in matching_temp] log.info("Found %d matches: %s" % (len(matching), str(matching))) else: log.info("No matches found...") #Generate the page template_values = { 'selectable': selectable, 'selected_jobs': selected_jobs, 'matching': matching, 'searched': searched, 'top_paid': top_paid } template = jinja_environment.get_template('templates/earnings.html') self.response.out.write(template.render(template_values))
def events(request, event_id=None): # Redirect to proper URL if there's a ?goto=... present if 'goto' in request.GET: return redirect('/results/events/' + request.GET['goto']) base = base_ctx('Results', 'By Event', request) base.update(csrf(request)) try: event = Event.objects.get(id=int(event_id)) except: # This is executed for invalid event IDs or the root table ind_bigs = collect(Event.objects.filter(parent__isnull=True, big=True, category='individual').\ select_related('event').order_by('lft'), 2) ind_smalls = Event.objects.filter(parent__isnull=True, big=False, category='individual').\ select_related('event').order_by('name') team_bigs = collect(Event.objects.filter(parent__isnull=True, big=True, category='team').\ select_related('event').order_by('lft'), 2) team_smalls = Event.objects.filter(parent__isnull=True, big=False, category='team').\ select_related('event').order_by('name') freq_bigs = collect(Event.objects.filter(parent__isnull=True, big=True, category='frequent').\ select_related('event').order_by('lft'), 2) freq_smalls = Event.objects.filter(parent__isnull=True, big=False, category='frequent').\ select_related('event').order_by('name') base.update({'ind_bigs': ind_bigs, 'ind_smalls': ind_smalls,\ 'team_bigs': team_bigs, 'team_smalls': team_smalls,\ 'freq_bigs': freq_bigs, 'freq_smalls': freq_smalls}) return render_to_response('events.html', base) # Number of matches (set event to big if too large) matches = Match.objects.filter(eventobj__lft__gte=event.lft, eventobj__rgt__lte=event.rgt) if matches.count() > 200 and not event.big: event.big = True event.save() # Get parent, ancestors and siblings if event.parent != None: siblings = event.parent.event_set.exclude(id=event.id).order_by('lft') else: siblings = None # Make modifications if neccessary if base['adm'] == True: if 'op' in request.POST and request.POST['op'] == 'Modify': if request.POST['type'] != 'nochange': event.change_type(request.POST['type']) if 'siblings' in request.POST.keys() and siblings is not None: for sibling in siblings: sibling.change_type(request.POST['type']) if request.POST['name'] != '' and request.POST['name'] != event.name: event.name = request.POST['name'] event.update_name() event.save() for e in event.get_children(): e.update_name() if request.POST['date'].strip() != 'No change': matches.update(date=request.POST['date']) base['message'] = 'Modified all matches.' if request.POST['offline'] != 'nochange': matches.update(offline=(request.POST['offline'] == 'offline')) base['message'] = 'Modified all matches.' if request.POST['game'] != 'nochange': matches.update(game=request.POST['game']) base['message'] = 'Modified all matches.' if request.POST['homepage'] != event.get_homepage(): event.set_homepage(request.POST['homepage']) if request.POST['tlpd_in_id'] != event.get_tlpd_in_id(): event.set_tlpd_in_id(request.POST['tlpd_in_id']) if request.POST['tlpd_kr_id'] != event.get_tlpd_kr_id(): event.set_tlpd_kr_id(request.POST['tlpd_kr_id']) if request.POST['tl_thread'] != event.get_tl_thread(): event.set_tl_thread(request.POST['tl_thread']) if request.POST['lp_name'] != event.get_lp_name(): event.set_lp_name(request.POST['lp_name']) elif 'add' in request.POST and request.POST['add'] == 'Add': parent = event for q in request.POST['subevent'].strip().split(','): type = request.POST['type'] parent.add_child(q.strip(), type, 'noprint' in request.POST, 'closed' in request.POST) elif 'move' in request.POST and request.POST['move'] == 'Move': eventid = request.POST['moveevent'] newparent = Event.objects.get(id=eventid) if event.lft > newparent.rgt: diff = newparent.rgt - event.lft else: diff = newparent.rgt - event.rgt - 1 event_shift(event, diff) event.set_parent(newparent) event.update_name() for e in event.get_children(): e.update_name() elif 'earnings' in request.POST and request.POST['earnings'] == 'Add': amount = int(request.POST['amount']) currency = request.POST['currency'] players = [] amounts = [] placements = [] for i in range(0, amount): player = request.POST['player-' + str(i)] player = Player.objects.get(id=player) amount = request.POST['amount-' + str(i)] amount = amount.replace(',', '').replace('.', '').replace(' ', '') players.append(player) amounts.append(amount) placements.append(i) success = Earnings.set_earnings(event, players, amounts, currency, placements) if success: base['message'] = 'Updated tournament prizepool.' else: base['message'] = 'There was an error updating the tournament prizepool.' base['event'] = event base['path'] = Event.objects.filter(lft__lte=event.lft, rgt__gte=event.rgt).order_by('lft') base['children'] = Event.objects.filter(parent=event).order_by('lft') if event.parent != None: base['siblings'] = event.parent.event_set.exclude(id=event.id).order_by('lft') # Used for moving events base['surroundingevents'] = event.get_parent(1).get_children().exclude(lft__gte=event.lft, rgt__lte=event.rgt) # Determine WoL/HotS and Online/Offline and event type if matches.values("game").distinct().count() == 1: base['game'] = matches[0].game if base['game'] == 'WoL': base['game'] = 'Wings of Liberty' elif base['game'] == 'HotS': base['game'] = 'Heart of the Swarm' #elif base['game'] = 'LotV': #base['game'] = 'Legacy of the Void' # Get list of players and earnings for prizepools base['players'] = Player.objects.filter(Q(id__in=matches.values('pla')) | Q(id__in=matches.values('plb'))) earnings = Earnings.objects.filter(event=event).order_by('placement') base['earnings'] = earnings base['prizepool'] = earnings.aggregate(Sum('earnings'))['earnings__sum'] base['prizepoolorig'] = earnings.aggregate(Sum('origearnings'))['origearnings__sum'] try: base['prizepoolcur'] = earnings.values('currency')[0]['currency'] except: base['prizepoolcur'] = "USD" # Get list of currencies currencies = [] sortedcurrencies = sorted(ccy.currencydb(), key=operator.itemgetter(0)) for currency in sortedcurrencies: dict = {} dict["name"] = ccy.currency(currency).name dict["code"] = ccy.currency(currency).code currencies.append(dict) base['currencies'] = currencies base['offline'] = None if matches.values("offline").distinct().count() == 1: base['offline'] = matches[0].offline # Statistics base['nmatches'] = matches.count() if base['nmatches'] > 0: qset = matches.aggregate(Sum('sca'), Sum('scb')) base['ngames'] = qset['sca__sum'] + qset['scb__sum'] else: base['ngames'] = 0 # Matchup wins and losses nti = lambda x: 0 if x is None else x qseta = matches.filter(rca='P', rcb='T').aggregate(Sum('sca'), Sum('scb')) qsetb = matches.filter(rcb='P', rca='T').aggregate(Sum('sca'), Sum('scb')) base['pvt_wins'] = nti(qseta['sca__sum']) + nti(qsetb['scb__sum']) base['pvt_loss'] = nti(qsetb['sca__sum']) + nti(qseta['scb__sum']) qseta = matches.filter(rca='P', rcb='Z').aggregate(Sum('sca'), Sum('scb')) qsetb = matches.filter(rcb='P', rca='Z').aggregate(Sum('sca'), Sum('scb')) base['pvz_wins'] = nti(qseta['sca__sum']) + nti(qsetb['scb__sum']) base['pvz_loss'] = nti(qsetb['sca__sum']) + nti(qseta['scb__sum']) qseta = matches.filter(rca='T', rcb='Z').aggregate(Sum('sca'), Sum('scb')) qsetb = matches.filter(rcb='T', rca='Z').aggregate(Sum('sca'), Sum('scb')) base['tvz_wins'] = nti(qseta['sca__sum']) + nti(qsetb['scb__sum']) base['tvz_loss'] = nti(qsetb['sca__sum']) + nti(qseta['scb__sum']) # Dates base['earliest'] = event.get_earliest() base['latest'] = event.get_latest() matches = matches.order_by('-date', '-eventobj__lft', '-id')[0:200] base['matches'] = display_matches(matches) return render_to_response('eventres.html', base)