Private
Public Access
1
0
This commit is contained in:
2023-09-20 22:35:34 +02:00
parent e994fd1bf3
commit 7dd62a9776
5 changed files with 3160 additions and 9 deletions

View File

@@ -1,4 +1,6 @@
from django import forms from django import forms
from django.contrib.admin.widgets import AdminDateWidget
import glob
class CsvForm(forms.Form): class CsvForm(forms.Form):
file = forms.FileField(label='CSV File') file = forms.FileField(label='CSV File')
@@ -7,3 +9,24 @@ class CsvForm(forms.Form):
class TimeTeamForm(forms.Form): class TimeTeamForm(forms.Form):
resulturl = forms.URLField() resulturl = forms.URLField()
startorder = forms.IntegerField(initial=1,label='First result to process') startorder = forms.IntegerField(initial=1,label='First result to process')
columns = ['Rank 1','Rank2','Score 1', 'Score 2','Positions Climbed','Score Increase']
choices = [
('Rank1','Rank 1'),
('Rank2','Rank 2'),
('PositionsClimbed','Positions Climbed'),
('ScoreIncrease','Score Increase')
]
filenameslist = glob.glob('media/boatmovers_*.csv')
datechoices = [
(a[17:-4],a[17:-4]) for a in filenameslist
]
class DatesForm(forms.Form):
date1 = forms.ChoiceField(choices=datechoices)
date2 = forms.ChoiceField(choices=datechoices)
sort_by = forms.ChoiceField(choices=choices)
ascending = forms.BooleanField(initial=True,required=False)
limit_to_first = forms.IntegerField(initial=100)
gender = forms.ChoiceField(choices=(('all','all'),('f','f'),('m','m')))

View File

@@ -7,13 +7,15 @@
<html> <html>
<head> <head>
<title>{% block title %}Rowsandall Boatmovers{% endblock %}</title> <title>{% block title %}Rowsandall Boatmovers{% endblock %}</title>
<link rel="stylesheet" href="/static/css/resetnew.css" /> <link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css"/>
<link rel="stylesheet" href="/static/fontawesome/css/fontawesome.min.css"> <link rel="stylesheet" type="text/css" href="/static/admin/css/widgets.css"/>
<link rel="stylesheet" href="/static/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/static/css/resetnew.css" />
<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.12.0/css/all.css" integrity="sha384-ekOryaXPbeCpWQNxMwSWVvQ0+1VrStoPJq54shlYhR8HzQgig1v5fas6YgOqLoKz" crossorigin="anonymous"> <link rel="stylesheet" href="/static/fontawesome/css/fontawesome.min.css">
<link rel="stylesheet" href="/static/css/styles2.css"> <link rel="stylesheet" href="/static/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/static/css/text2.css" /> <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.12.0/css/all.css" integrity="sha384-ekOryaXPbeCpWQNxMwSWVvQ0+1VrStoPJq54shlYhR8HzQgig1v5fas6YgOqLoKz" crossorigin="anonymous">
<link rel="stylesheet" href="/static/css/rowsandall2.css" /> <link rel="stylesheet" href="/static/css/styles2.css">
<link rel="stylesheet" href="/static/css/text2.css" />
<link rel="stylesheet" href="/static/css/rowsandall2.css" />
</head> </head>
<body> <body>
@@ -43,3 +45,17 @@
</html> </html>
{% block scripts %} {% endblock %} {% block scripts %} {% endblock %}
<script defer type="text/javascript" src="/jsi18n/"></script>
<script defer type="text/javascript" src="/static/admin/js/core.js"></script>
<script defer type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
<script defer type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
<script defer type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js">
</script>
<script defer type="text/javascript" src="/static/admin/js/calendar.js"></script>
<script defer type="text/javascript" src="/static/admin/js/urlify.js"></script>
<script defer type="text/javascript" src="/static/admin/js/prepopulate.js"></script>
<script defer type="text/javascript" src="/static/admin/js/vendor/xregexp/xregexp.min.js"></script>
<script defer type="text/javascript" src="/static/admin/js/SelectBox.js"></script>
<script defer type="text/javascript" src="/static/admin/js/SelectFilter2.js"></script>
<script defer type="text/javascript" src="/static/admin/js/admin/DateTimeShortcuts.js"></script>
<script defer type="text/javascript" src="/static/admin/js/inlines.js"></script>

View File

@@ -21,6 +21,7 @@ urlpatterns = [
name='race_delete_results'), name='race_delete_results'),
url(r'crew/(?P<id>\d+)/$',views.crew_view,name='crew_view'), url(r'crew/(?P<id>\d+)/$',views.crew_view,name='crew_view'),
url(r'^$',views.boatmovers_view,name='boatmovers'), url(r'^$',views.boatmovers_view,name='boatmovers'),
url(r'^compare/$',views.boatmovers_compareview,name='boatmovers_compare'),
path(r'faq/', TemplateView.as_view(template_name='faq.html'), name='faq'), path(r'faq/', TemplateView.as_view(template_name='faq.html'), name='faq'),
#url(r'(?P<filter>\b[0-9A-Fa-f]+\b)/$',views.boatmovers_view,name='boatmovers') #url(r'(?P<filter>\b[0-9A-Fa-f]+\b)/$',views.boatmovers_view,name='boatmovers')
] ]

View File

@@ -5,12 +5,13 @@ from django.urls import reverse
from django.contrib import messages from django.contrib import messages
import collections import collections
import pandas as pd
# Create your views here. # Create your views here.
from django.views.generic.edit import CreateView from django.views.generic.edit import CreateView
from boatmovers.models import Athlete, Crew, Race, Result from boatmovers.models import Athlete, Crew, Race, Result
import boatmovers.tasks as tasks import boatmovers.tasks as tasks
from boatmovers.forms import CsvForm, TimeTeamForm from boatmovers.forms import CsvForm, TimeTeamForm, DatesForm
from boatmovers.scrapers import * from boatmovers.scrapers import *
#from rowers.rows import handle_uploaded_file #from rowers.rows import handle_uploaded_file
import django_rq import django_rq
@@ -98,6 +99,60 @@ def boatmovers_view(request):
'new_races': new_races} 'new_races': new_races}
) )
def boatmovers_compareview(request):
form = DatesForm()
df = pd.DataFrame()
if request.method == 'POST':
form = DatesForm(request.POST)
if form.is_valid():
date1 = form.cleaned_data['date1']
date2 = form.cleaned_data['date2']
sort_by = form.cleaned_data['sort_by']
ascending = form.cleaned_data['ascending']
limit_to_first = form.cleaned_data['limit_to_first']
gender = form.cleaned_data['gender']
file1 = "media/boatmovers_"+date1+".csv"
df1 = pd.read_csv(file1)
if gender in ['m','f']:
df1 = df1[df1.gender==gender]
df1.index = df1['id']
df1 = df1.assign(rank=range(len(df1)))
df1['rank'] = df1['rank']+1
df1.rename(columns={'full_name':'Name','trueskill_exposed':'Score1','rank':'Rank1'},inplace=True)
df1 = df1.loc[:, ['Name','club','gender','Score1','Rank1']]
file2 = "media/boatmovers_"+date2+".csv"
df2 = pd.read_csv(file2)
if gender in ['m','f']:
df2 = df2[df2.gender==gender]
df2.index = df2['id']
df2 = df2.assign(rank=range(len(df2)))
df2['rank'] = df2['rank']+1
df2.rename(columns={'trueskill_exposed':'Score2','rank':'Rank2'},inplace=True)
df2 = df2.loc[:, ['Rank2','Score2']]
df = df1.merge(df2,left_on='id',right_on='id')
df['PositionsClimbed'] = df['Rank1']-df['Rank2']
df['ScoreIncrease'] = df['Score2']-df['Score1']
df = df.loc[:, ['Name', 'club', 'gender', 'Rank1', 'Rank2', 'PositionsClimbed',
'Score1', 'Score2',
'ScoreIncrease']]
df.sort_values(by='Rank2',inplace=True)
df = df.head(limit_to_first)
df.sort_values(by=[sort_by],inplace=True,ascending=ascending)
return render(request,
'boatmovers_compare.html',
{
'form':form,
'df':df,
})
def race_view(request,id=0): def race_view(request,id=0):
race = get_object_or_404(Race, pk=id) race = get_object_or_404(Race, pk=id)
results = race.results.all().order_by('order') results = race.results.all().order_by('order')

File diff suppressed because it is too large Load Diff