diff --git a/.gitignore b/.gitignore index 42dca0e..e6b9528 100644 --- a/.gitignore +++ b/.gitignore @@ -130,4 +130,5 @@ dmypy.json # Misc config.yaml -scans.json \ No newline at end of file +scans.json +test.* \ No newline at end of file diff --git a/server/src/app/__init__.py b/server/src/app/__init__.py new file mode 100644 index 0000000..b9357d3 --- /dev/null +++ b/server/src/app/__init__.py @@ -0,0 +1,5 @@ +from flask import Flask + +app = Flask(__name__) + +from app import views \ No newline at end of file diff --git a/server/src/database.py b/server/src/app/database.py similarity index 98% rename from server/src/database.py rename to server/src/app/database.py index bd9f083..e2e51c3 100644 --- a/server/src/database.py +++ b/server/src/app/database.py @@ -11,7 +11,7 @@ LOGGER.setLevel(logging.DEBUG) logFormatter = logging.Formatter( "%(asctime)s [%(threadName)s] [%(levelname)s] %(message)s") -fileHandler = logging.FileHandler(DIR + "../logs/database.log") +fileHandler = logging.FileHandler(DIR + "../../logs/database.log") fileHandler.setFormatter(logFormatter) fileHandler.setLevel(logging.INFO) LOGGER.addHandler(fileHandler) diff --git a/server/src/app/templates/base.html b/server/src/app/templates/base.html new file mode 100644 index 0000000..3f54057 --- /dev/null +++ b/server/src/app/templates/base.html @@ -0,0 +1,15 @@ + + + + + + + + + +
+ {% block content %}{% endblock %} +
+ + + \ No newline at end of file diff --git a/server/src/app/templates/overview.html b/server/src/app/templates/overview.html new file mode 100644 index 0000000..5930484 --- /dev/null +++ b/server/src/app/templates/overview.html @@ -0,0 +1,27 @@ +{% extends "base.html" %} + +{% block content %} + {% for user, dates in results.items() %} +
+

{{ user }}: {{ dates.sum }}€

+ {% for date, items in dates.items() %} + {% if date != "sum" %} +
+
+
+

{{ date }}

+ {% for item, values in items.items() %} +
+
+
+ {{ values.0 }}x {{ item }} je {{ values.1 }}€ +
+
+ {% endfor %} +
+
+ {% endif %} + {% endfor %} +
+ {% endfor %} +{% endblock %} \ No newline at end of file diff --git a/server/src/main.py b/server/src/app/views.py similarity index 73% rename from server/src/main.py rename to server/src/app/views.py index 719796d..a8239d8 100644 --- a/server/src/main.py +++ b/server/src/app/views.py @@ -1,7 +1,7 @@ -from database import Database -from flask import Flask, abort, request +from app import app +from app.database import Database +from flask import abort, request, render_template from flask.json import jsonify -from gevent.pywsgi import WSGIServer from os import makedirs from os.path import dirname, exists import logging @@ -17,7 +17,7 @@ LOGGER.setLevel(logging.DEBUG) logFormatter = logging.Formatter( "%(asctime)s [%(threadName)s] [%(levelname)s] %(message)s") -fileHandler = logging.FileHandler(DIR + "../logs/server.log") +fileHandler = logging.FileHandler(DIR + "../../logs/server.log") fileHandler.setFormatter(logFormatter) fileHandler.setLevel(logging.INFO) LOGGER.addHandler(fileHandler) @@ -26,16 +26,17 @@ consoleHandler = logging.StreamHandler() consoleHandler.setLevel(logging.DEBUG) LOGGER.addHandler(consoleHandler) -app = Flask(__name__) DATABASE = Database() +APPNAME = "scan2kasse" + @app.route('/') def index(): return "

Hello, World!", 200 -@app.route('/scan2kasse/login') +@app.route(f'/{APPNAME}/login') def login(): if not request.json or 'login' not in request.json: abort(400) @@ -44,7 +45,7 @@ def login(): return jsonify({}), 200 -@app.route('/scan2kasse/insert', methods=['POST']) +@app.route(f'/{APPNAME}/insert', methods=['POST']) def insert(): match request.json: case {'user': user, 'items': items, 'date': date}: @@ -60,10 +61,10 @@ def insert(): case _: abort(400) -@app.route('/scan2kasse/', methods=['GET']) -@app.route('/scan2kasse//', methods=['GET']) -@app.route('/scan2kasse//', methods=['GET']) -@app.route('/scan2kasse///', methods=['GET']) +@app.route(f'/{APPNAME}/', methods=['GET']) +@app.route(f'/{APPNAME}//', methods=['GET']) +@app.route(f'/{APPNAME}//', methods=['GET']) +@app.route(f'/{APPNAME}///', methods=['GET']) def get_monthly_report_from_user(user: str = None, year: int = None, month: int = None): if month and (month > 12 or month < 1): abort(400) @@ -74,7 +75,10 @@ def get_monthly_report_from_user(user: str = None, year: int = None, month: int result_dict = group_results(results) else: result_dict = {} - return jsonify(result_dict) + if request.content_type == "application/json": + return jsonify(result_dict) + else: + return render_template("overview.html", results=result_dict) def group_results(results: tuple) -> dict: @@ -82,15 +86,11 @@ def group_results(results: tuple) -> dict: LOGGER.debug("Grouping...") for result in results: if result[0] not in result_dict: - result_dict[result[0]] = {} + result_dict[result[0]] = {"sum": 0} if str(result[1]) not in result_dict[result[0]]: result_dict[result[0]][str(result[1])] = {} result_dict[result[0]][str(result[1])][result[2]] = ( result[3], result[4]) + result_dict[result[0]]["sum"] += (result[3] * (result[4] * 100)) / 100 LOGGER.debug("Grouped.") - return result_dict - - -if __name__ == '__main__': - http_server = WSGIServer(('', 5000), app) - http_server.serve_forever() + return result_dict \ No newline at end of file diff --git a/server/src/run.py b/server/src/run.py new file mode 100644 index 0000000..858949c --- /dev/null +++ b/server/src/run.py @@ -0,0 +1,6 @@ +from app import app +from gevent.pywsgi import WSGIServer + +if __name__ == '__main__': + http_server = WSGIServer(('', 5000), app) + http_server.serve_forever()