From a60a540408d38594fde735aa974f70e16832ca51 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Madis=20M=C3=A4gi?=
Date: Sun, 28 Jul 2024 13:46:46 +0300
Subject: [PATCH] Add audit button to inventory list view
---
inventory-app/inventory.py | 30 +++++++++++++++++++++++---
inventory-app/templates/base.html | 3 +++
inventory-app/templates/inventory.html | 30 ++++++++++++++++++++++++++
3 files changed, 60 insertions(+), 3 deletions(-)
diff --git a/inventory-app/inventory.py b/inventory-app/inventory.py
index beb6627..17d9864 100644
--- a/inventory-app/inventory.py
+++ b/inventory-app/inventory.py
@@ -1,6 +1,6 @@
import boto3
import pymongo
-from datetime import datetime
+from datetime import datetime, date, timedelta
from botocore.exceptions import ClientError
from bson.objectid import ObjectId
from flask import Blueprint, abort, g, make_response, redirect, render_template, request
@@ -393,13 +393,15 @@ def view_inventory(slug=None):
q = {"type": {"$ne": "token"}}
template = "inventory.html"
public_view = False
- if not read_user():
+ login_user = read_user()
+ if not login_user:
q.update({"inventory.public": True})
template = "inventory_public.html"
public_view = True
else:
fields.append(("inventory.owner.username", "Owner", str))
fields.append(("inventory.user.username", "User", str))
+ can_audit = "k-space:janitors" in login_user["groups"]
if slug and not public_view:
template = "inventory_pick.html"
if request.path.startswith("/m/inventory/clone-with-slug"):
@@ -446,7 +448,29 @@ def view_inventory_audit(item_id):
"inventory.audit.timestamp": datetime.utcnow(),
},
})
- return redirect("/m/inventory/%s/view" % item_id)
+ if request.form and request.form.get("noRedirect", False):
+ return {}
+ else:
+ return redirect("/m/inventory/%s/view" % item_id)
+
+@page_inventory.app_template_filter('audit_text')
+def render_audit_text(item):
+ timestamp = item.get('audit', {}).get('timestamp', False)
+ if timestamp:
+ return timestamp.date()
+ else:
+ return 'Never'
+
+@page_inventory.app_template_filter('audit_color')
+def render_audit_color(item):
+ timestamp = item.get('audit', {}).get('timestamp', False)
+ today = date.today()
+ if not timestamp or timestamp.date() < today - timedelta(days=365):
+ return "red"
+ elif timestamp.date() < today - timedelta(days=7):
+ return "orange"
+ else:
+ return "green unclickable"
@page_inventory.route("/m/inventory//claim", methods=["POST"])
@login_required
diff --git a/inventory-app/templates/base.html b/inventory-app/templates/base.html
index dbfc5a2..be27fa9 100644
--- a/inventory-app/templates/base.html
+++ b/inventory-app/templates/base.html
@@ -60,6 +60,9 @@ body {
-webkit-box-orient: vertical;
overflow: hidden;
}
+.unclickable {
+ pointer-events: none;
+}
diff --git a/inventory-app/templates/inventory.html b/inventory-app/templates/inventory.html
index 1df44ad..e581e51 100644
--- a/inventory-app/templates/inventory.html
+++ b/inventory-app/templates/inventory.html
@@ -12,6 +12,9 @@
Type |
Owner |
User |
+ {% if can_audit %}
+ Audit |
+ {% endif %}
@@ -30,6 +33,17 @@
{{ item.type }} |
{{ item | owner_link}} |
{{ item | user_link}} |
+ {% if can_audit %}
+
+
+ |
+ {% endif %}
+
{% endfor %}
@@ -38,4 +52,20 @@
Add item
+
{% endblock %}