From 0ab5fc4570c97dcafae8e3bd89450541e3a2a4e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madis=20M=C3=A4gi?= Date: Sat, 19 Jul 2025 03:28:56 +0300 Subject: [PATCH] Add contained items tree view --- inventory-app/inventory.py | 27 +++++++ inventory-app/templates/inventory_view.html | 85 +++++++++++++++++++++ 2 files changed, 112 insertions(+) diff --git a/inventory-app/inventory.py b/inventory-app/inventory.py index c46a65a..ab881c0 100644 --- a/inventory-app/inventory.py +++ b/inventory-app/inventory.py @@ -216,6 +216,8 @@ def save_inventory_item(item_id=None, **_): d = {} form.populate_dict(d) d['tags'] = list(set(request.form.getlist('tags[]'))) + if d.get('location'): + d['location_code'] = render_location_link(d['location']) custom_errors = {} try: if item_id: @@ -256,6 +258,16 @@ def save_inventory_item(item_id=None, **_): return render_template("inventory_edit.html", **locals()) return redirect("/m/inventory/%s/view" % item_id) +def render_location_link(location: str): + if location == "": + return + + linkstart = location.find("k6.ee/") + if linkstart == -1: + return + + return location[linkstart:].split(" ", 1)[0].split("/", 1)[1] + def is_image_ext(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ["jpg", "jpeg"] @@ -598,3 +610,18 @@ def view_inventory_vacate(item_id): }, }) return redirect("/m/inventory/%s/view" % item_id) + +@page_inventory.route("/m/inventory/contains", methods=["GET"]) +@login_required(groups=["k-space:inventory:audit"]) +def get_contains(): + slug = request.args.get("slug") + if not slug: + return [] + + return list(db.inventory.find({ + "location_code": slug + }, { + "_id": 0, + "shortener.slug": 1, + "name": 1 + })) diff --git a/inventory-app/templates/inventory_view.html b/inventory-app/templates/inventory_view.html index 8014e05..0aac07a 100644 --- a/inventory-app/templates/inventory_view.html +++ b/inventory-app/templates/inventory_view.html @@ -136,6 +136,15 @@ {% endif %} +
+

Contains

+ +
+ + {% endblock %}