diff --git a/inventorysystem/templates/delete_inventory.html b/inventorysystem/templates/delete_inventory.html
new file mode 100644
index 0000000..fe3173e
--- /dev/null
+++ b/inventorysystem/templates/delete_inventory.html
@@ -0,0 +1,13 @@
+{% extends "base.html" %}
+{% block content %}
+
Inventareintrag löschen
+
+{% for key,value in dbresult %}
+{{key}}: {{value}}
+{% endfor %}
+
+
+
+{% endblock %}
diff --git a/inventorysystem/templates/show_inventory.html b/inventorysystem/templates/show_inventory.html
index d03cb12..42b02ed 100644
--- a/inventorysystem/templates/show_inventory.html
+++ b/inventorysystem/templates/show_inventory.html
@@ -8,6 +8,7 @@
{% for entry in table.headers %}
{{entry}} |
{% endfor %}
+Actions |
{% for entry in table.rows %}
@@ -15,6 +16,7 @@
{% for x in entry %}
| {{x}} |
{% endfor %}
+Löschen |
{% endfor %}
diff --git a/inventorysystem/views.py b/inventorysystem/views.py
index 4f38a1d..cc9352a 100644
--- a/inventorysystem/views.py
+++ b/inventorysystem/views.py
@@ -2,9 +2,14 @@ import flask
import psycopg2
import psycopg2.extras
import functools
+import datetime
+import decimal
from flask import request, session
from inventorysystem import app
+psycopg2.extras.register_uuid()
+
+
def show_message(message):
return flask.render_template("message.html", message=message)
@@ -17,7 +22,7 @@ def current_user_has_permission(permission, oe=None):
def user_has_permission(user_id, permission, oe=None):
db = get_db()
cur = db.cursor()
- cur.execute("select count(*) from permissions where \"user\"=%s and permission=%s and (oe=%s or oe is NULL)", (user_id, permission, oe))
+ cur.execute("select count(*) from permissions where \"user\"=%s and (permission=%s or permission='admin') and (oe=%s or oe is NULL)", (user_id, permission, oe))
allowed = cur.fetchone()[0] > 0
db.close()
return allowed
@@ -119,5 +124,70 @@ def new_inventory(oe):
db.close()
return flask.render_template("new_inventory.html", oe=oe)
+ else:
+ description = request.form["description"] or None
+ innenauftrag = request.form["innenauftrag"] or None
+ serial = request.form["serial"] or None
+ location = request.form["location"] or None
+ old_inventory_id = request.form["old_inventory_id"] or None
+ purchase_date = request.form["purchase_date"] or None
+ purchase_date = datetime.datetime.fromisoformat(purchase_date)
+ purchase_price = request.form["purchase_price"] or None
+ purchase_price = decimal.Decimal(purchase_price)
+
+ db = get_db()
+ cur = db.cursor()
+ try:
+ cur.execute("insert into inventory (serial, innenauftrag, description, oe, location, purchase_date, purchase_price, old_inventory_id) values (%s,%s,%s,%s,%s,%s,%s,%s)", (serial, innenauftrag, description, oe, location, purchase_date, purchase_price, old_inventory_id))
+ except Exception as e:
+ db.rollback()
+ raise e
+ else:
+ db.commit()
+
+ return flask.redirect(flask.url_for("show_inventory", oe=oe))
+
+@app.route("/inventory//delete", methods=["GET", "POST"])
+def delete_inventory(id):
+ db = get_db()
+ cur = db.cursor()
+ cur.execute("select oe from inventory where id=%s", (id,))
+ inventory_oe = cur.fetchone().oe
+ if not current_user_has_permission("delete_inventory_entry", inventory_oe):
+ return show_message("Permission denied"), 403
+
+ if request.method == "GET":
+ cur.execute("select * from inventory where id=%s", (id,))
+ result = cur.fetchone()._asdict().items()
+
+ return flask.render_template("delete_inventory.html", dbresult=result)
+
+ else:
+ try:
+ cur.execute("delete from inventory where id=%s", (id,))
+ except Exception as e:
+ db.rollback()
+ raise e
+ else:
+ db.commit()
+
+ return flask.redirect(flask.url_for("show_inventory", oe=inventory_oe))
+
+@app.route("/users")
+@permission_required("user_admin")
+def list_users():
+ db = get_db()
+ cur = db.cursor()
+ cur.execute("select id,username,full_name from users", (oe,))
+ result = cur.fetchall()
+ cur.execute("select id,name from organizational_units where id=%s", (oe,))
+ oe = cur.fetchone()
+ db.close()
+
+ table = list_of_dicts_to_table(result, ["id", "serial", "description", "location", "innenauftrag", "purchase_date", "purchase_price", "old_inventory_id"])
+
+ return flask.render_template("show_inventory.html", table=table, oe=oe)
+
+
diff --git a/schema.psql b/schema.psql
index e302e24..3c13593 100644
--- a/schema.psql
+++ b/schema.psql
@@ -18,7 +18,7 @@ CREATE TABLE inventory (
oe integer NOT NULL REFERENCES organizational_units,
location text NOT NULL,
purchase_date timestamp with time zone NOT NULL,
- purchase_price money NOT NULL,
+ purchase_price numeric(1000,2) NOT NULL,
old_inventory_id character varying
);