Example #1
0
def trackdetail(request, track_id):
    """
    This view is the initial page once a track has been selected.
    """
    supported_track = get_object_or_404(SupportedTrackName, pk=track_id)
    
    rankedclasses_tuple = get_ranked_classes_by_track(supported_track.trackkey.id)
    # Format the classes and retrieve the names to display.
    formated_rankedclasses = []
    for rankedclass_id, top_racers in rankedclasses_tuple:
        rankedclass_obj = RankedClass.objects.get(pk=rankedclass_id)
        formated_rankedclasses.append({'class': rankedclass_obj,
                                       'top3':top_racers})
    
    # This is done so we can easily display a message indicating there are not rankings.
    if (formated_rankedclasses == []):
        formated_rankedclasses = None

    # Get all of the past race dates to display in the datatable
    raw_race_dates = _get_Recent_Race_Dates(supported_track)
    
    race_dates = []
    # Need to keep in mind there may be less races than expected for special events.
    for racedate, racecount in raw_race_dates:
        # TODO - clean up the copy or find a better way to get them to click on the row
        display_string = "{0} Race Results from: {1} - Click Here".format(racecount, _display_Date_User(racedate))
        click_url = '/trackdata/' + str(supported_track.id) + '/results-by-day/' + racedate.strftime('%Y-%m-%d')
        race_dates.append([display_string, click_url])
    raceday_jsdata = simplejson.dumps(race_dates)

    ctx = Context({'trackname':supported_track.trackkey.trackname,
                   'raceday_jsdata':raceday_jsdata,
                   'formated_rankedclasses':formated_rankedclasses})
    return render_to_response('trackdatadetail.html', ctx, context_instance=RequestContext(request))
 def test_multipleraces_upload(self):
     #=====================================================
     # Validate Race Details
     #=====================================================
     # Validate the race details have been uploaded.
     raceobj1 = SingleRaceDetails.objects.get(trackkey=self.trackname_obj,
                                              racedata="RankingTestClass",
                                              racenumber=1,
                                              roundnumber=1,
                                              racelength=6,
                                              winninglapcount=12,
                                              mainevent=2)
     raceobj2 = SingleRaceDetails.objects.get(trackkey=self.trackname_obj,
                                              racedata="RankingTestClass",
                                              racenumber=2,
                                              roundnumber=1,
                                              racelength=6,
                                              winninglapcount=12,
                                              mainevent=1,
                                              maineventroundnum=1)
     raceobj3 = SingleRaceDetails.objects.get(trackkey=self.trackname_obj,
                                              racedata="RankingTestClass",
                                              racenumber=1,
                                              roundnumber=2,
                                              racelength=6,
                                              winninglapcount=12,
                                              mainevent=1,
                                              maineventroundnum=2)
     
     #=====================================================
     # Validate Ranking
     #=====================================================
     
     # Create a RankedClass
     rnk_class = RankedClass(trackkey = self.trackname_obj,
                             raceclass = "RankingTestClass",
                             startdate = '2010-01-01 01:01:01',
                             lastdate = '2010-01-01 01:01:01',
                             experation = 10,
                             requiredraces = 1) 
     rnk_class.save()
     
     # Run ranking for that class
     process_ranking(rnk_class)
     
     rnk_event1 = RankEvent.objects.get(rankedclasskey=rnk_class.id, eventcount=1)
     rnk_event2 = RankEvent.objects.get(rankedclasskey=rnk_class.id, eventcount=2)
     
     racer4 = Ranking.objects.get(raceridkey = RacerId.objects.get(racerpreferredname='RankedRacer Four').id,
                                  racecount=1,
                                  rankeventkey=rnk_event2)
     
     # Validate racer five's rank does not change after the first event.
     racer5 = Ranking.objects.get(raceridkey = RacerId.objects.get(racerpreferredname='RankedRacer Five').id,
                                  racecount=1,
                                  rankeventkey=rnk_event1)
     self.assertAlmostEqual(racer5.displayrank, -3.03089030448, places=4)
     
     racer5 = Ranking.objects.get(raceridkey = RacerId.objects.get(racerpreferredname='RankedRacer Five').id,
                                  racecount=1,
                                  rankeventkey=rnk_event2)
     self.assertAlmostEqual(racer5.displayrank, -3.03089030448, places=4)
     
     
     # Validate racer one's rank before A2 main
     racer1 = Ranking.objects.get(raceridkey = RacerId.objects.get(racerpreferredname='RankedRacer One').id,
                                  racecount=1,
                                  rankeventkey=rnk_event1)
     self.assertAlmostEqual(racer1.displayrank, 15.910124731, places=4)
     
     
     # Validate racer one and three after A2 main.
     racer1 = Ranking.objects.get(raceridkey = RacerId.objects.get(racerpreferredname='RankedRacer One').id,
                                  racecount=2,
                                  rankeventkey=rnk_event2)
     self.assertAlmostEqual(racer1.displayrank, 21.1014540971, places=4)
     
     racer3 = Ranking.objects.get(raceridkey = RacerId.objects.get(racerpreferredname='RankedRacer Three').id,
                                  racecount=2,
                                  rankeventkey=rnk_event2)        
     
     
     classes = get_ranked_classes_by_track(self.trackname_obj.id)
     # There should only be one class, we will take it and the top racer
     ranked_class_id, top_racers = classes[0]
     
     self.assertEqual(ranked_class_id, rnk_class.id)
     self.assertAlmostEqual(top_racers[0].displayrank, 21.1014540971, places=4)
     self.assertAlmostEqual(top_racers[2].displayrank, 7.91634267877, places=4)