Added excel export
This commit is contained in:
parent
016d529941
commit
8e9d185293
4 changed files with 35 additions and 1 deletions
|
@ -4,6 +4,11 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1 class="center">Counts</h1>
|
<h1 class="center">Counts</h1>
|
||||||
|
<p class="center">
|
||||||
|
<a class="btn waves-effect waves-light" href="{% url "count_export" %}" style="margin-bottom: 3em">
|
||||||
|
Excel Data (CSV) <i class="material-icons right">file_download</i>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
{% include 'pagination.html' %}
|
{% include 'pagination.html' %}
|
||||||
<table class="centered">
|
<table class="centered">
|
||||||
<thead>
|
<thead>
|
||||||
|
|
|
@ -4,7 +4,13 @@
|
||||||
{% block title %}Home{% endblock %}
|
{% block title %}Home{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1 class="center">Arrow counter</h1>
|
<h1 class="center">Arrow counter</h1>
|
||||||
<h5 class="center" style="margin-bottom: 3rem">A simple online arrow counter</h5>
|
<h5 class="center">A simple online arrow counter</h5>
|
||||||
|
<p class="center" style="margin-bottom: 3rem">
|
||||||
|
<a class="btn waves-effect waves-light" href="{% url "count_export" %}">
|
||||||
|
Excel Data (CSV) <i class="material-icons right">file_download</i>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<div class="card-panel grey lighten-2">
|
<div class="card-panel grey lighten-2">
|
||||||
<h5 class="center">Arrows shot this year:</h5>
|
<h5 class="center">Arrows shot this year:</h5>
|
||||||
|
|
|
@ -5,6 +5,7 @@ from . import views
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.index, name='index'),
|
path('', views.index, name='index'),
|
||||||
path('stats', views.count_stats, name='stats'),
|
path('stats', views.count_stats, name='stats'),
|
||||||
|
path('count/export', views.arrow_count_export, name='count_export'),
|
||||||
path('count/list', views.arrow_count_list, name='count_list'),
|
path('count/list', views.arrow_count_list, name='count_list'),
|
||||||
path('count/new', login_required(views.NewArrowCount.as_view()),
|
path('count/new', login_required(views.NewArrowCount.as_view()),
|
||||||
name='count_new'),
|
name='count_new'),
|
||||||
|
|
|
@ -16,6 +16,8 @@ from django.db.models import Sum
|
||||||
from datetime import datetime, timedelta, date
|
from datetime import datetime, timedelta, date
|
||||||
import json
|
import json
|
||||||
from django.core.serializers.json import DjangoJSONEncoder
|
from django.core.serializers.json import DjangoJSONEncoder
|
||||||
|
import csv
|
||||||
|
from django.utils.encoding import smart_str
|
||||||
|
|
||||||
# https://stackoverflow.com/questions/5882405
|
# https://stackoverflow.com/questions/5882405
|
||||||
def tofirstdayinisoweek(year, week):
|
def tofirstdayinisoweek(year, week):
|
||||||
|
@ -51,6 +53,7 @@ def index(request):
|
||||||
else:
|
else:
|
||||||
return HttpResponse(template.render({}), request)
|
return HttpResponse(template.render({}), request)
|
||||||
|
|
||||||
|
@login_required
|
||||||
def count_stats(request):
|
def count_stats(request):
|
||||||
template = loader.get_template('stats.html')
|
template = loader.get_template('stats.html')
|
||||||
|
|
||||||
|
@ -71,6 +74,25 @@ def count_stats(request):
|
||||||
'weeklyArrows': json.dumps(list(weeklyArrows), cls=DjangoJSONEncoder)
|
'weeklyArrows': json.dumps(list(weeklyArrows), cls=DjangoJSONEncoder)
|
||||||
}, request))
|
}, request))
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def arrow_count_export(request):
|
||||||
|
counts = ArrowCount.objects.filter(user=request.user).order_by('-date').all()
|
||||||
|
response = HttpResponse(content_type='text/csv')
|
||||||
|
response['Content-Disposition'] = 'attachment; filename=counts-' \
|
||||||
|
+ datetime.today().strftime('%Y-%m-%d') + '.csv'
|
||||||
|
writer = csv.writer(response, csv.excel, delimiter=';')
|
||||||
|
response.write(u'\ufeff'.encode('utf8'))
|
||||||
|
writer.writerow([
|
||||||
|
smart_str(u"Date"),
|
||||||
|
smart_str(u"Count")
|
||||||
|
])
|
||||||
|
for row in counts:
|
||||||
|
writer.writerow([
|
||||||
|
smart_str(row.date.strftime('%Y-%m-%d')),
|
||||||
|
smart_str(row.count)
|
||||||
|
])
|
||||||
|
return response
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def arrow_count_list(request):
|
def arrow_count_list(request):
|
||||||
page = request.GET.get('page')
|
page = request.GET.get('page')
|
||||||
|
|
Loading…
Reference in a new issue