"""Pricelist plugin""" from flask import Blueprint, jsonify, request from http.client import NO_CONTENT from flaschengeist.plugins import Plugin from flaschengeist.utils.decorators import login_required from werkzeug.exceptions import BadRequest from . import models from . import pricelist_controller, permissions pricelist_bp = Blueprint("pricelist", __name__, url_prefix="/pricelist") class PriceListPlugin(Plugin): models = models def __init__(self, cfg): super().__init__(blueprint=pricelist_bp, permissions=permissions.permissions) config = {"discount": 0} config.update(cfg) def install(self): from flaschengeist.database import db db.create_all() @pricelist_bp.route("/drink-types", methods=["GET"]) @pricelist_bp.route("/drink-types/", methods=["GET"]) def get_drink_types(identifier=None): if identifier: result = pricelist_controller.get_drink_type(identifier) else: result = pricelist_controller.get_drink_types() return jsonify(result) @pricelist_bp.route("/drink-types", methods=["POST"]) @login_required(permission=permissions.CREATE_TYPE) def new_drink_type(current_session): data = request.get_json() if "name" not in data: raise BadRequest drink_type = pricelist_controller.create_drink_type(data["name"]) return jsonify(drink_type) @pricelist_bp.route("/drink-types/", methods=["PUT"]) @login_required(permission=permissions.EDIT_TYPE) def update_drink_type(identifier, current_session): data = request.get_json() if "name" not in data: raise BadRequest drink_type = pricelist_controller.rename_drink_type(data["id"], data["name"]) return jsonify(drink_type) @pricelist_bp.route("/drink-types/", methods=["DELETE"]) @login_required(permission=permissions.DELETE_TYPE) def delete_drink_type(identifier, current_session): pricelist_controller.delete_drink_type(identifier) return "", NO_CONTENT @pricelist_bp.route("/tags", methods=["GET"]) @pricelist_bp.route("/tags/", methods=["GET"]) def get_tags(identifier=None): if identifier: result = pricelist_controller.get_tag(identifier) else: result = pricelist_controller.get_tags() return jsonify(result) @pricelist_bp.route("/tags", methods=["POST"]) @login_required(permission=permissions.CREATE_TAG) def new_tag(current_session): data = request.get_json() if "name" not in data: raise BadRequest drink_type = pricelist_controller.create_tag(data["name"]) return jsonify(drink_type) @pricelist_bp.route("/tags/", methods=["PUT"]) @login_required(permission=permissions.EDIT_TAG) def update_tag(identifier, current_session): data = request.get_json() if "name" not in data: raise BadRequest drink_type = pricelist_controller.rename_tag(data["name"]) return jsonify(drink_type) @pricelist_bp.route("/tags/", methods=["DELETE"]) @login_required(permission=permissions.DELETE_TAG) def delete_tag(identifier, current_session): pricelist_controller.delete_tag(identifier) return "", NO_CONTENT @pricelist_bp.route("/drinks", methods=["GET"]) @pricelist_bp.route("/drinks/", methods=["GET"]) def get_drinks(identifier=None): if identifier: result = pricelist_controller.get_drink(identifier) else: result = pricelist_controller.get_drinks() return jsonify(result) @pricelist_bp.route("/drinks/search/", methods=["GET"]) def search_drinks(name): return jsonify(pricelist_controller.get_drinks(name)) @pricelist_bp.route("/drinks", methods=["POST"]) @login_required(permission=permissions.CREATE) def create_drink(current_session): data = request.get_json() if not all(item in data for item in ["name", "volume", "cost_price"]) or not all( item in data for item in ["name", "ingredients"] ): raise BadRequest("No correct Keys to create drink") return "jsonify(pricelist_controller.create_drink(data))" @pricelist_bp.route("/prices", methods=["GET"]) @pricelist_bp.route("/prices/", methods=["GET"]) def get_prices(identifier=None): if identifier: result = pricelist_controller.get_price(identifier) else: result = pricelist_controller.get_prices() return jsonify(result) @pricelist_bp.route("/volumes//prices", methods=["POST"]) def create_price(identifier): data = request.get_json() return jsonify(pricelist_controller.set_price(identifier, data)) @pricelist_bp.route("/prices/", methods=["PUT"]) def modify_price(identifier): data = request.get_json() return jsonify(pricelist_controller.update_price(identifier, data)) @pricelist_bp.route("/prices/", methods=["DELETE"]) def delete_price(identifier): pricelist_controller.delete_price(identifier) return "", NO_CONTENT @pricelist_bp.route("/drinks//volumes", methods=["POST"]) def set_volume(identifier): data = request.get_json() return jsonify(pricelist_controller.set_volume(identifier, data)) @pricelist_bp.route("/volumes/", methods=["PUT"]) def update_volume(identifier): data = request.get_json() return jsonify(pricelist_controller.update_volume(identifier, data)) @pricelist_bp.route("/volumes/", methods=["DELETE"]) def delete_volume(identifier): pricelist_controller.delete_volume(identifier) return "", NO_CONTENT