from flask import Blueprint, request, jsonify import geruecht.controller.ldapController as lc import geruecht.controller.mainController as mc import geruecht.controller.accesTokenController as ac from datetime import datetime from geruecht.model import BAR, MONEY, USER, VORSTAND, EXTERN from geruecht.decorator import login_required from geruecht.logger import getDebugLogger, getCreditLogger debug = getDebugLogger() creditL = getCreditLogger() baruser = Blueprint("baruser", __name__) ldap = lc.LDAPController() mainController = mc.MainController() accesTokenController = ac.AccesTokenController() @baruser.route("/bar") @login_required(groups=[BAR], bar=True) def _bar(**kwargs): """ Main function for Baruser Returns JSON-file with all Users, who hast amounts in this month. Returns: JSON-File with Users, who has amounts in this month or ERROR 401 Permission Denied """ debug.info("/bar") try: dic = {} users = mainController.getAllUsersfromDB() for user in users: geruecht = None geruecht = user.getGeruecht(datetime.now().year) if geruecht is not None: all = geruecht.getSchulden() if all != 0: if all >= 0: type = 'credit' else: type = 'amount' dic[user.uid] = {"username": user.uid, "firstname": user.firstname, "lastname": user.lastname, "amount": all, "locked": user.locked, "type": type, "limit": user.limit, "autoLock": user.autoLock } dic[user.uid]['last_seen'] = {"year": user.last_seen.year, "month": user.last_seen.month, "day": user.last_seen.day, "hour": user.last_seen.hour, "minute": user.last_seen.minute, "second": user.last_seen.second} if user.last_seen else None debug.debug("return {{ {} }}".format(dic)) return jsonify(dic) except Exception as err: debug.debug("exception", exc_info=True) return jsonify({"error": str(err)}), 500 @baruser.route("/baradd", methods=['POST']) @login_required(groups=[BAR], bar=True) def _baradd(**kwargs): """ Function for Baruser to add amount This function added to the user with the posted userID the posted amount. Returns: JSON-File with userID and the amount or ERROR 401 Permission Denied """ debug.info("/baradd") try: data = request.get_json() userID = data['userId'] amount = int(data['amount']) amountl = amount date = datetime.now() mainController.addAmount( userID, amount, year=date.year, month=date.month, bar=True) user = mainController.getUser(userID) geruecht = user.getGeruecht(year=date.year) month = geruecht.getMonth(month=date.month) amount = abs(month[0] - month[1]) all = geruecht.getSchulden() if all >= 0: type = 'credit' else: type = 'amount' dic = user.toJSON() dic['amount'] = all dic['type'] = type dic['last_seen'] = {"year": user.last_seen.year, "month": user.last_seen.month, "day": user.last_seen.day, "hour": user.last_seen.hour, "minute": user.last_seen.minute, "second": user.last_seen.second} if user.last_seen else None debug.debug("return {{ {} }}".format(dic)) creditL.info("{} Baruser {} {} fügt {} {} {} € Schulden hinzu.".format( date, kwargs['accToken'].user.firstname, kwargs['accToken'].user.lastname, user.firstname, user.lastname, amountl/100)) return jsonify(dic) except Exception as err: debug.debug("exception", exc_info=True) return jsonify({"error": str(err)}), 500 @baruser.route("/barGetUsers") @login_required(groups=[BAR, MONEY], bar=True) def _getUsers(**kwargs): """ Get Users without amount This Function returns all Users, who hasn't an amount in this month. Returns: JSON-File with Users or ERROR 401 Permission Denied """ debug.info("/barGetUsers") try: retVal = {} retVal = ldap.getAllUser() debug.debug("return {{ {} }}".format(retVal)) return jsonify(retVal) except Exception as err: debug.debug("exception", exc_info=True) return jsonify({"error": str(err)}), 500 @baruser.route("/bar/storno", methods=['POST']) @login_required(groups=[BAR], bar=True) def _storno(**kwargs): """ Function for Baruser to storno amount This function added to the user with the posted userID the posted amount. Returns: JSON-File with userID and the amount or ERROR 401 Permission Denied """ debug.info("/bar/storno") try: data = request.get_json() userID = data['userId'] amount = int(data['amount']) amountl = amount date = datetime.now() mainController.addCredit( userID, amount, year=date.year, month=date.month) user = mainController.getUser(userID) geruecht = user.getGeruecht(year=date.year) month = geruecht.getMonth(month=date.month) amount = abs(month[0] - month[1]) all = geruecht.getSchulden() if all >= 0: type = 'credit' else: type = 'amount' dic = user.toJSON() dic['amount'] = all dic['type'] = type dic['last_seen'] = {"year": user.last_seen.year, "month": user.last_seen.month, "day": user.last_seen.day, "hour": user.last_seen.hour, "minute": user.last_seen.minute, "second": user.last_seen.second} if user.last_seen else None debug.debug("return {{ {} }}".format(dic)) creditL.info("{} Baruser {} {} storniert {} € von {} {}".format( date, kwargs['accToken'].user.firstname, kwargs['accToken'].user.lastname, amountl/100, user.firstname, user.lastname)) return jsonify(dic) except Exception as err: debug.debug("exception", exc_info=True) return jsonify({"error": str(err)}), 500 @baruser.route("/barGetUser", methods=['POST']) @login_required(groups=[BAR], bar=True) def _getUser(**kwargs): debug.info("/barGetUser") try: data = request.get_json() username = data['userId'] user = mainController.getUser(username) amount = user.getGeruecht(datetime.now().year).getSchulden() if amount >= 0: type = 'credit' else: type = 'amount' retVal = user.toJSON() retVal['amount'] = amount retVal['type'] = type debug.debug("return {{ {} }}".format(retVal)) return jsonify(retVal) except Exception as err: debug.debug("exception", exc_info=True) return jsonify({"error": str(err)}), 500 @baruser.route("/search", methods=['GET']) @login_required(groups=[BAR, MONEY, USER, VORSTAND], bar=True) def _search(**kwargs): debug.info("/search") try: retVal = ldap.getAllUser() for user in retVal: if user['username'] == 'extern': retVal.remove(user) break debug.debug("return {{ {} }}".format(retVal)) return jsonify(retVal) except Exception as err: debug.debug("exception", exc_info=True) return jsonify({"error": str(err)}), 500 @baruser.route("/bar/lock", methods=['GET', 'POST']) @login_required(groups=[BAR], bar=True) def _lockbar(**kwargs): debug.info('/bar/lock') accToken = kwargs['accToken'] if request.method == "POST": data = request.get_json() accToken.lock_bar = data['value'] accToken = accesTokenController.updateAccessToken(accToken) accToken = accesTokenController.validateAccessToken(accToken.token, [USER, EXTERN]) debug.debug('return {{ "value": {} }}'.format(accToken.lock_bar)) return jsonify({'value': accToken.lock_bar})