From 8594aae40385480a893379d6c8caaf2d9816d3ed Mon Sep 17 00:00:00 2001
From: Julian Rother <julian@cccv.de>
Date: Sun, 23 Apr 2023 19:14:43 +0200
Subject: [PATCH] Add delete item button

---
 .gitignore                           |  1 +
 warehouse/__init__.py                |  7 +++++--
 warehouse/templates/item/delete.html | 12 ++++++++++++
 warehouse/templates/item/view.html   | 12 +++++++++++-
 4 files changed, 29 insertions(+), 3 deletions(-)
 create mode 100644 warehouse/templates/item/delete.html

diff --git a/.gitignore b/.gitignore
index 0caff16..a67cfe0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ __pycache__/
 *.py[cod]
 *$py.class
 instance/
+*.swp
diff --git a/warehouse/__init__.py b/warehouse/__init__.py
index 0351931..6437915 100644
--- a/warehouse/__init__.py
+++ b/warehouse/__init__.py
@@ -166,9 +166,12 @@ def item_edit(item_id):
 	db.session.commit()
 	return redirect(url_for('item_view', item_id=item.id))
 
-@app.route('/item/<item_id>/', methods=['DELETE'])
+@app.route('/item/<item_id>/delete', methods=['GET', 'POST'])
 def item_delete(item_id):
-	db.session.delete(Item.query.get_or_404(item_id))
+	item = Item.query.get_or_404(item_id)
+	if request.method == 'GET':
+		return render_template('item/delete.html', item=item)
+	db.session.delete(item)
 	db.session.commit()
 	return redirect(url_for('item_list'))
 
diff --git a/warehouse/templates/item/delete.html b/warehouse/templates/item/delete.html
new file mode 100644
index 0000000..2377e67
--- /dev/null
+++ b/warehouse/templates/item/delete.html
@@ -0,0 +1,12 @@
+{% extends 'layout.html' %}
+
+{% block body %}
+<form method="POST" class="form">
+	<input type="hidden" name="csrf_token" value="{{ request.csrf_token }}">
+	<p>Really delete item {{ item.name }} ({{ item.id }})?</p>
+	<div class="d-flex justify-content-end gap-1">
+		<a href="{{ url_for('item_view', item_id=item.id) }}" class="btn btn-light">Cancel</a>
+		<button type="submit" class="btn btn-danger">Delete item</button>
+	</div>
+</form>
+{% endblock %}
diff --git a/warehouse/templates/item/view.html b/warehouse/templates/item/view.html
index 7e6905d..88af4d6 100644
--- a/warehouse/templates/item/view.html
+++ b/warehouse/templates/item/view.html
@@ -3,7 +3,16 @@
 {% block body %}
 
 <div class="d-flex justify-content-end gap-1">
-	<a href="{{ url_for('item_edit', item_id=item.id) }}" class="btn btn-primary">Edit</a>
+	<div class="btn-group">
+		<a href="{{ url_for('item_edit', item_id=item.id) }}" class="btn btn-primary">Edit</a>
+		<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+			<span class="visually-hidden">Toggle Dropdown</span>
+		</button>
+		<ul class="dropdown-menu">
+			<a href="{{ url_for('item_delete', item_id=item.id) }}" class="dropdown-item">Delete</a>
+		</ul>
+	</div>
+
 	<div class="btn-group">
 		<a href="{{ url_for('item_label', item_id=item.id) }}" class="btn btn-primary">Label</a>
 		<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
@@ -13,6 +22,7 @@
 			<a href="{{ url_for('item_print_label', item_id=item.id) }}" class="dropdown-item">Print Label</a>
 		</ul>
 	</div>
+
 	<form method="POST" action="{{ url_for('item_upload_photo', item_id=item.id) }}" enctype="multipart/form-data">
 		<input type="hidden" name="csrf_token" value="{{ request.csrf_token }}">
 		<label>
-- 
GitLab