Resolves #21
This commit is contained in:
Aaron Kimbre
2022-03-13 22:10:07 -05:00
parent 6606f1558e
commit 24e98190fe
5 changed files with 218 additions and 28 deletions

View File

@@ -1,9 +1,12 @@
from flask import render_template, Blueprint, current_app
from flask_user import login_required
from app.models import CharacterInfo, Account, CharacterXML, Reports
from app.luclient import get_lot_name
from app import gm_level, scheduler
from sqlalchemy.orm import load_only
import datetime
import xmltodict
import random
reports_blueprint = Blueprint('reports', __name__)
@@ -12,8 +15,30 @@ reports_blueprint = Blueprint('reports', __name__)
@login_required
@gm_level(3)
def index():
reports = Reports.query.distinct(Reports.date).group_by(Reports.date).all()
return render_template('reports/index.html.j2', reports=reports)
reports_items = Reports.query.distinct(
Reports.date
).filter(
Reports.report_type == "items"
).group_by(Reports.date).options(load_only(Reports.date)).all()
reports_currency = Reports.query.distinct(
Reports.date
).filter(
Reports.report_type == "currency"
).group_by(Reports.date).options(load_only(Reports.date)).all()
reports_uscore = Reports.query.distinct(
Reports.date
).filter(
Reports.report_type == "uscore"
).group_by(Reports.date).options(load_only(Reports.date)).all()
return render_template(
'reports/index.html.j2',
reports_items=reports_items,
reports_currency=reports_currency,
reports_uscore=reports_uscore,
)
@reports_blueprint.route('/items/by_date/<date>', methods=['GET', 'POST'])
@@ -24,6 +49,46 @@ def items_by_date(date):
return render_template('reports/items/by_date.html.j2', data=data, date=date)
@reports_blueprint.route('/items/graph', methods=['GET', 'POST'])
@login_required
@gm_level(3)
def items_graph():
thirty_days_ago = datetime.date.today() - datetime.timedelta(days=30)
entries = Reports.query.filter(
Reports.report_type == "items"
).filter(Reports.date >= thirty_days_ago).all()
# transform data for chartjs
labels = []
items = dict()
datasets = []
# get stuff ready
for entry in entries:
labels.append(entry.date.strftime("%m/%d/%Y"))
for key in entry.data:
items[key] = get_lot_name(key)
# make it
for key, value in items.items():
data = []
for entry in entries:
if key in entry.data.keys():
data.append(entry.data[key])
else:
data.append(0)
color = "#" + ''.join([random.choice('ABCDEF0123456789') for i in range(6)])
datasets.append({
"label": value,
"data": data,
"backgroundColor": color,
"borderColor": color
})
return render_template(
'reports/graph.html.j2',
labels=labels,
datasets=datasets,
name="Item"
)
@reports_blueprint.route('/currency/by_date/<date>', methods=['GET', 'POST'])
@login_required
@gm_level(3)
@@ -32,6 +97,42 @@ def currency_by_date(date):
return render_template('reports/currency/by_date.html.j2', data=data, date=date)
@reports_blueprint.route('/currency/graph', methods=['GET', 'POST'])
@login_required
@gm_level(3)
def currency_graph():
thirty_days_ago = datetime.date.today() - datetime.timedelta(days=30)
entries = Reports.query.filter(
Reports.report_type == "currency"
).filter(Reports.date >= thirty_days_ago).all()
characters = CharacterInfo.query.options(load_only(CharacterInfo.name)).all()
labels = []
datasets = []
# get stuff ready
for entry in entries:
labels.append(entry.date.strftime("%m/%d/%Y"))
for character in characters:
data = []
for entry in entries:
if character.name in entry.data.keys():
data.append(entry.data[character.name])
else:
data.append(0)
color = "#" + ''.join([random.choice('ABCDEF0123456789') for i in range(6)])
datasets.append({
"label": character.name,
"data": data,
"backgroundColor": color,
"borderColor": color
})
return render_template(
'reports/graph.html.j2',
labels=labels,
datasets=datasets,
name="Currency"
)
@reports_blueprint.route('/uscore/by_date/<date>', methods=['GET', 'POST'])
@login_required
@gm_level(3)
@@ -40,6 +141,42 @@ def uscore_by_date(date):
return render_template('reports/uscore/by_date.html.j2', data=data, date=date)
@reports_blueprint.route('/uscore/graph', methods=['GET', 'POST'])
@login_required
@gm_level(3)
def uscore_graph():
thirty_days_ago = datetime.date.today() - datetime.timedelta(days=30)
entries = Reports.query.filter(
Reports.report_type == "uscore"
).filter(Reports.date >= thirty_days_ago).all()
characters = CharacterInfo.query.options(load_only(CharacterInfo.name)).all()
labels = []
datasets = []
# get stuff ready
for entry in entries:
labels.append(entry.date.strftime("%m/%d/%Y"))
for character in characters:
data = []
for entry in entries:
if character.name in entry.data.keys():
data.append(entry.data[character.name])
else:
data.append(0)
color = "#" + ''.join([random.choice('ABCDEF0123456789') for i in range(6)])
datasets.append({
"label": character.name,
"data": data,
"backgroundColor": color,
"borderColor": color
})
return render_template(
'reports/graph.html.j2',
labels=labels,
datasets=datasets,
name="U-Score"
)
@scheduler.task("cron", id="gen_item_report", hour=23, timezone="UTC")
def gen_item_report():
with scheduler.app.app_context():