From c1c34376824500fbfbf42d2bbee6f3b28c3b02cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Gr=C3=B6ger?= Date: Thu, 20 Aug 2020 08:37:24 +0200 Subject: [PATCH] =?UTF-8?q?FreeDrinkList=20f=C3=BCr=20Bardienste=20und=20A?= =?UTF-8?q?G?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Es wurde die komplette backendverwaltung für Freigetränke Band und AG hinzugefügt. Es gibt auch schon ansätze für das Interface um Freigetränke zu bearbeiten. --- .../controller/databaseController/__init__.py | 3 +- .../dbFreeDrinkListConfigController.py | 136 ++++++++++++++++++ .../dbPricelistController.py | 8 +- .../databaseController/dbWorkerController.py | 2 +- .../controller/mainController/__init__.py | 3 +- .../mainFreeDrinkListConfigController.py | 25 ++++ geruecht/routes.py | 43 ++++++ 7 files changed, 216 insertions(+), 4 deletions(-) create mode 100644 geruecht/controller/databaseController/dbFreeDrinkListConfigController.py create mode 100644 geruecht/controller/mainController/mainFreeDrinkListConfigController.py diff --git a/geruecht/controller/databaseController/__init__.py b/geruecht/controller/databaseController/__init__.py index 8f783fd..e53e75b 100644 --- a/geruecht/controller/databaseController/__init__.py +++ b/geruecht/controller/databaseController/__init__.py @@ -1,6 +1,6 @@ from ..mainController import Singleton from geruecht import db -from ..databaseController import dbUserController, dbCreditListController, dbJobKindController, dbPricelistController, dbWorkerController, dbWorkgroupController, dbJobInviteController, dbJobRequesController, dbAccessTokenController, dbRegistrationController +from ..databaseController import dbUserController, dbCreditListController, dbJobKindController, dbPricelistController, dbWorkerController, dbWorkgroupController, dbJobInviteController, dbJobRequesController, dbAccessTokenController, dbRegistrationController, dbFreeDrinkListConfigController from geruecht.exceptions import DatabaseExecption import traceback from MySQLdb._exceptions import IntegrityError @@ -15,6 +15,7 @@ class DatabaseController(dbUserController.Base, dbJobRequesController.Base, dbAccessTokenController.Base, dbRegistrationController.Base, + dbFreeDrinkListConfigController.Base, metaclass=Singleton): ''' DatabaesController diff --git a/geruecht/controller/databaseController/dbFreeDrinkListConfigController.py b/geruecht/controller/databaseController/dbFreeDrinkListConfigController.py new file mode 100644 index 0000000..dd7a7ab --- /dev/null +++ b/geruecht/controller/databaseController/dbFreeDrinkListConfigController.py @@ -0,0 +1,136 @@ +import traceback +from datetime import datetime +from datetime import timedelta +from geruecht.exceptions import DatabaseExecption + +class Base: + def get_free_drink_list_config(self, id): + try: + cursor = self.db.connection.cursor() + cursor.execute(f'select * from free_drink_list_config where id={id}') + data = cursor.fetchone() + if data['drink_id'] != None: + data['drink'] = self.getDrinkPrice(data['drink_id']) + data['free_drink_types'] = self.get_free_drink_list_types_for_drink(data['id']) + return data + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) + + def get_free_drink_list_configs(self): + try: + cursor = self.db.connection.cursor() + cursor.execute("select * from free_drink_list_config") + retVal = cursor.fetchall() + for data in retVal: + if data['drink_id'] != None: + data['drink'] = self.getDrinkPrice(data['drink_id']) + data['free_drink_types'] = self.get_free_drink_list_types_for_drink(data['id']) + + return retVal + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) + + def set_free_drink_list_config(self, free_drink_list_config): + try: + cursor = self.db.connection.cursor() + cursor.execute(f'insert into free_drink_list_config (drink_id, label, price) values ({free_drink_list_config["drink"]["id"]}, "{free_drink_list_config["label"]}", {free_drink_list_config["price"]})') + self.db.connection.commit() + return self.get_free_drink_list_configs() + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) + + def get_free_drink_list_types(self): + try: + cursor = self.db.connection.cursor() + cursor.execute('select * from free_drink_list_type') + return cursor.fetchall() + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) + + def get_free_drink_list_types_for_drink(self, id): + try: + cursor = self.db.connection.cursor() + cursor.execute(f'select a.* from free_drink_list_type a, free_drink_list_type_config b where free_drink_list_config_id={id} and b.free_drink_list_type_id=a.id') + return cursor.fetchall() + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) + + def get_free_drink_list_type(self, name): + try: + cursor = self.db.connection.cursor() + if type(name) == str: + sql = f'select * from free_drink_list_type where name={name}' + elif type(name) == int: + sql = f'select * from free_drink_list_type where id={name}' + else: + raise DatabaseExecption("name as no type int or str. name={}, type={}".format(name, type(name))) + cursor.execute(sql) + return cursor.fetchone() + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) + + def set_free_drink_list_history(self, user, free_drink_list_config): + try: + cursor = self.db.connection.cursor() + cursor.execute(f'insert into free_drink_list_history (timestamp, free_drink_config_id, user_id, free_drink_type_id) values ("{datetime.now()}", {free_drink_list_config["id"]}, {user.id}, {free_drink_list_config["free_drink_type_id"]})') + self.db.connection.commit() + return self.get_free_drink_list_history_by_user(user) + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) + + def get_free_drink_list_history_by_user(self, user): + try: + cursor = self.db.connection.cursor() + now = datetime.now() + worker = self.getWorker(user, now) + cursor.execute(f'select * from free_drink_list_history where timestamp>="{worker["startdatetime"]}" and user_id={user.id}') + retVal = cursor.fetchall() + for data in retVal: + data['timestamp'] = {'year': data['timestamp'].year, + 'month': data['timestamp'].month, + 'day': data['timestamp'].day, + 'hour': data['timestamp'].hour, + 'minute': data['timestamp'].minute, + 'second': data['timestamp'].second} + data['free_drink_config'] = self.get_free_drink_list_config(data['free_drink_config_id']) + data['free_drink_type'] = self.get_free_drink_list_type(data['free_drink_type_id']) + return retVal + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) + + def update_free_drink_list_history(self, free_drink_list_history): + try: + cursor = self.db.connection.cursor() + cursor.execute(f'update free_drink_list_history set canceled={free_drink_list_history["canceled"]} where id={free_drink_list_history["id"]}') + self.db.connection.commit() + return True + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) + def delete_free_drink_list_history(self, free_drink_list_history): + try: + cursor = self.db.connection.cursor() + cursor.execute(f'delete from free_drink_list_history where id={free_drink_list_history["id"]}') + self.db.connection.commit() + return True + except Exception as err: + traceback.print_exc() + self.db.connection.rollback() + raise DatabaseExecption("Something went wrong with Database: {}".format(err)) \ No newline at end of file diff --git a/geruecht/controller/databaseController/dbPricelistController.py b/geruecht/controller/databaseController/dbPricelistController.py index 2b0c749..7d00117 100644 --- a/geruecht/controller/databaseController/dbPricelistController.py +++ b/geruecht/controller/databaseController/dbPricelistController.py @@ -8,6 +8,9 @@ class Base: try: cursor = self.db.connection.cursor() cursor.execute("select * from pricelist") + retVal = cursor.fetchall() + for data in retVal: + data['drink_type'] = self.getDrinkType(data['type']) return cursor.fetchall() except Exception as err: traceback.print_exc() @@ -24,7 +27,10 @@ class Base: else: raise DatabaseExecption("name as no type int or str. name={}, type={}".format(name, type(name))) cursor.execute(sql) - return cursor.fetchone() + retVal = cursor.fetchone() + if retVal: + retVal['drink_type'] = self.getDrinkType(retVal['type']) + return retVal except Exception as err: traceback.print_exc() self.db.connection.rollback() diff --git a/geruecht/controller/databaseController/dbWorkerController.py b/geruecht/controller/databaseController/dbWorkerController.py index 3d7652d..c54f16d 100644 --- a/geruecht/controller/databaseController/dbWorkerController.py +++ b/geruecht/controller/databaseController/dbWorkerController.py @@ -8,7 +8,7 @@ class Base: def getWorker(self, user, date): try: cursor = self.db.connection.cursor() - cursor.execute("select * from bardienste where user_id={} and startdatetime='{}'".format(user.id, date)) + cursor.execute("select * from bardienste where user_id={} and startdatetime<='{}' and enddatetime>='{}'".format(user.id, date, date)) data = cursor.fetchone() return {"user": user.toJSON(), "startdatetime": data['startdatetime'], "enddatetime": data['enddatetime'], "start": { "year": data['startdatetime'].year, "month": data['startdatetime'].month, "day": data['startdatetime'].day}, "job_kind": self.getJobKind(data['job_kind']) if data['job_kind'] != None else None} if data else None except Exception as err: diff --git a/geruecht/controller/mainController/__init__.py b/geruecht/controller/mainController/__init__.py index ae3f73a..aabd653 100644 --- a/geruecht/controller/mainController/__init__.py +++ b/geruecht/controller/mainController/__init__.py @@ -5,7 +5,7 @@ import geruecht.controller.emailController as ec from geruecht.model.user import User from datetime import datetime, timedelta from geruecht.logger import getDebugLogger -from ..mainController import mainJobKindController, mainCreditListController, mainPricelistController, mainUserController, mainWorkerController, mainWorkgroupController, mainJobInviteController, mainJobRequestController, mainRegistrationController, mainPasswordReset +from ..mainController import mainJobKindController, mainCreditListController, mainPricelistController, mainUserController, mainWorkerController, mainWorkgroupController, mainJobInviteController, mainJobRequestController, mainRegistrationController, mainPasswordReset, mainFreeDrinkListConfigController db = dc.DatabaseController() ldap = lc.LDAPController() @@ -24,6 +24,7 @@ class MainController(mainJobKindController.Base, mainJobRequestController.Base, mainRegistrationController.Base, mainPasswordReset.Base, + mainFreeDrinkListConfigController.Base, metaclass=Singleton): def __init__(self): diff --git a/geruecht/controller/mainController/mainFreeDrinkListConfigController.py b/geruecht/controller/mainController/mainFreeDrinkListConfigController.py new file mode 100644 index 0000000..52d5bac --- /dev/null +++ b/geruecht/controller/mainController/mainFreeDrinkListConfigController.py @@ -0,0 +1,25 @@ +import geruecht.controller.databaseController as dc +from geruecht.logger import getDebugLogger + +db = dc.DatabaseController() +debug = getDebugLogger() + +class Base: + def get_free_drink_list_configs(self): + return db.get_free_drink_list_configs() + + def set_free_drink_list_config(self, data): + return db.set_free_drink_list_config(data) + + def set_free_drink_list_history(self, user, data): + return db.set_free_drink_list_history(user, data) + + def get_free_drink_list_history(self, user): + return db.get_free_drink_list_history_by_user(user) + + def delete_free_drink_list_history(self, data): + return db.delete_free_drink_list_history(data) + + def update_free_drink_list_history(self, user, data): + db.update_free_drink_list_history(data) + return db.get_free_drink_list_history_by_user(user) \ No newline at end of file diff --git a/geruecht/routes.py b/geruecht/routes.py index 07b78ce..f6fa5da 100644 --- a/geruecht/routes.py +++ b/geruecht/routes.py @@ -26,6 +26,49 @@ def _valid(**kwargs): debug.warning("exception in valide.", exc_info=True) return jsonify({"error": str(err)}), 500 +@app.route("/freeDrinkListConfig", methods=['GET']) +@login_required() +def _free_drink_list_config(**kwargs): + try: + debug.info("get free_drink_list_config") + retVal = mainController.get_free_drink_list_configs() + debug.info("return free_drink_list_config {{ {} }}".format(retVal)) + return jsonify(retVal) + except Exception as err: + debug.warning("exception in get free_dirnk_list_config.", exc_info=True) + return jsonify({"error": str(err)}), 500 + +@app.route("/freeDrinkListHistory", methods=['GET', 'POST', 'PUT']) +@login_required() +def _free_drink_list_history(**kwargs): + try: + debug.info("set free_drink_list_history") + user = kwargs['accToken'].user + if request.method == 'GET': + retVal = mainController.get_free_drink_list_history(user) + if request.method == 'POST' or request.method == 'PUT': + data = request.get_json() + if request.method == 'POST': + retVal = mainController.set_free_drink_list_history(user, data) + else: + retVal = mainController.update_free_drink_list_history(user, data) + debug.debug(f'return free_drink_list_history {{{retVal}}}') + return jsonify(retVal) + except Exception as err: + debug.warning("exception in get free_dirnk_list_config.", exc_info=True) + return jsonify({"error": str(err)}), 500 + +@app.route("/deleteDrinkListHistory", methods=['POST']) +@login_required() +def _delete_free_drink_list_history(**kwargs): + try: + debug.info("delete free_drink_list_history") + data = request.get_json() + retVal = mainController.delete_free_drink_list_history(data) + return jsonify({"ok": retVal}) + except Exception as err: + debug.warning("exception in delete free_dirnk_list_config.", exc_info=True) + return jsonify({"error": str(err)}), 500 @app.route("/pricelist", methods=['GET']) def _getPricelist(): try: