Merge pull request #1 from bernis/master

- add: Beer plot over time
This commit is contained in:
ulrichknecht
2016-02-15 20:35:47 +01:00
13 changed files with 88 additions and 3 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

77
app/plot.py Normal file
View File

@@ -0,0 +1,77 @@
from matplotlib import pyplot as plt
from matplotlib.dates import WeekdayLocator, DayLocator, HourLocator, DateFormatter, drange, MONDAY
import numpy as np
from user import User
from database import *
def plot_total(user = None):
today = datetime.date.today()
delta = datetime.timedelta(days=1)
begin = datetime.date.today() - datetime.timedelta(weeks=4)
dates = drange(begin, today, delta)
# all_consumptions = list(10)
# for consumptions in all_consumptions: #todo fix
consumptions = np.zeros(len(dates))
#print consumptions
consumed = get_consumed()
for consumption in consumed:
if consumption.prodnr == 1:
if user == None or consumption.consumer == user.id:
if consumption.time.date() > begin:
consumptions[(consumption.time.date() - begin).days - 1] += 1
plt.xkcd()
fig, ax = plt.subplots()
ax.plot(dates, consumptions, linestyle='-', marker='')
# ax.axes.margins = 1 # x margin. See `axes.Axes.margins`
# ax.axes.ymargin = 1 # y margin See `axes.Axes.margins`
plt.xticks(rotation='vertical')
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
plt.tick_params(which='minor', length=4)
plt.tick_params(which='major', length=5)
#ax.xaxis.set_major_locator(WeekdayLocator(MONDAY))
#ax.xaxis.set_major_locator(DayLocator())
ax.xaxis.set_major_formatter(DateFormatter('%d.%m'))
#ax.xaxis.set_minor_formatter(DateFormatter('%d.%m'))
#ax.fmt_xdata = DateFormatter('%d.%m')
fig.autofmt_xdate()
plt.annotate(
'THE DAY I REALIZED\nI COULD COOK BACON\nWHENEVER I WANTED',
xy=(30, 1), arrowprops=dict(arrowstyle='->'), xytext=(15, -10))
plt.xlabel('Datum')
plt.ylabel('Halbe')
if user == None:
tit = "Bierkonsum FET"
fils = "app/static/total.png"
fill = "app/static/total_big.png"
else:
tit = "Bierkonsum %s" % user.name
fils = "app/static/total%03d.png" % user.id
fill = "app/static/total%03d_big.png" % user.id
plt.title(tit)
#480x320
fig.set_size_inches(4.8, 3.2)
plt.savefig(fils, dpi=100)
fig.set_size_inches(4.8, 3.2)
plt.savefig(fill, dpi=400)

Binary file not shown.

View File

@@ -29,9 +29,8 @@
{% endif %} {% endif %}
</ul> </ul>
{% if user %} {% if user %}
Du bist eingeloggt als {{user.longname}}. Du bist eingeloggt als {{user.longname}}
{% endif %} {% endif %}
{% block content %}{% endblock %} {% block content %}{% endblock %}
</body> </body>

View File

@@ -4,6 +4,12 @@
<h3>TODO: </h3> <h3>TODO: </h3>
<ul> <ul>
<li> graphical beer list</li> <li> graphical beer list</li>
<img src="{{ url_for('static', filename='total.png') }}">
{% if user %}
{% set fils = "total%03d.png" % user.id %}
<img src="{{ url_for('static', filename=fils) }}">
{% endif %}
</ul> </ul>
<h1> Bierliste </h1> <h1> Bierliste </h1>
<table> <table>

Binary file not shown.

View File

@@ -2,6 +2,7 @@ from check_rights import *
from flask import render_template, request, redirect, session, send_from_directory from flask import render_template, request, redirect, session, send_from_directory
from app import app from app import app
from database import * from database import *
from plot import *
from user import User from user import User
from product import Product from product import Product
from consumption import Consumption from consumption import Consumption
@@ -17,6 +18,7 @@ def static_proxy(path):
@app.route('/index') @app.route('/index')
def index(): def index():
consumed = get_consumed() consumed = get_consumed()
plot_total()
return render_template("index.html", consumed=consumed, user=get_user_by_name(session.get('name'))) return render_template("index.html", consumed=consumed, user=get_user_by_name(session.get('name')))
@@ -206,9 +208,10 @@ def consume():
username = session.get('name') username = session.get('name')
add_consume(username, prod.id) add_consume(username, prod.id)
message = "Du hast gerade ein %s konsumiert." % prod.name message = "Du hast gerade ein %s konsumiert." % prod.name
plot_total(get_user_by_name(session.get('name')))
plot_total()
return render_template('consume.html', products=products, message=message, user=get_user_by_name(session.get('name'))) return render_template('consume.html', products=products, message=message, user=get_user_by_name(session.get('name')))
@app.route('/billing') @app.route('/billing')
@requires_baron @requires_baron
def billing(): def billing():

Binary file not shown.

Binary file not shown.