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))
Exemple #3
0
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)