diff --git a/routes.py b/routes.py index 8dcdce2..c371cfe 100644 --- a/routes.py +++ b/routes.py @@ -344,6 +344,23 @@ def update_inventory_item(id): except Exception as e: db.session.rollback() return jsonify({"success": False, "error": str(e)}), 400 + +@main.route("/api/inventory/", methods=["DELETE"]) +def delete_inventory_item(id): + try: + item = db.session.query(Inventory).get(id) + + if not item: + return jsonify({"success": False, "error": f"Item with ID {id} not found"}), 404 + + db.session.delete(item) + db.session.commit() + + return jsonify({"success": True}), 200 + + except Exception as e: + db.session.rollback() + return jsonify({"success": False, "error": str(e)}), 400 @main.route("/users") def list_users(): diff --git a/templates/fragments/_breadcrumb_fragment.html b/templates/fragments/_breadcrumb_fragment.html index 279d02e..f5577ad 100644 --- a/templates/fragments/_breadcrumb_fragment.html +++ b/templates/fragments/_breadcrumb_fragment.html @@ -1,6 +1,6 @@ {% import "fragments/_icon_fragment.html" as icons %} -{% macro breadcrumb_header(breadcrumbs=[], title=None, submit_button=False) %} +{% macro breadcrumb_header(breadcrumbs=[], title=None, save_button=False, delete_button=False) %} {% endmacro %} diff --git a/templates/inventory.html b/templates/inventory.html index a3359ad..1353660 100644 --- a/templates/inventory.html +++ b/templates/inventory.html @@ -5,11 +5,13 @@ {% block content %} {{ breadcrumbs.breadcrumb_header( -breadcrumbs=[ -{'label': "Inventory", 'url': url_for('main.list_inventory')} -], -title=title, -submit_button=True) }} + breadcrumbs=[ + {'label': "Inventory", 'url': url_for('main.list_inventory')} + ], + title=title, + save_button=True, + delete_button= item.id != None +) }}
@@ -129,7 +131,9 @@ submit_button=True) }} {% block script %} document.addEventListener("DOMContentLoaded", () => { - const submitButton = document.getElementById("saveButton"); + const saveButton = document.getElementById("saveButton"); + const deleteButton = document.getElementById("deleteButton"); + const toastData = localStorage.getItem("toastMessage"); if (toastData) { const { message, type } = JSON.parse(toastData); @@ -137,8 +141,8 @@ submit_button=True) }} localStorage.removeItem("toastMessage"); } - if (submitButton) { - submitButton.addEventListener("click", async (e) => { + if (saveButton) { + saveButton.addEventListener("click", async (e) => { e.preventDefault(); const payload = { @@ -188,5 +192,41 @@ submit_button=True) }} } }); } + + if (deleteButton) { + deleteButton.addEventListener("click", async () => { + const id = document.querySelector("#inventoryId").value; + + if (!id || id === "None") { + renderToast({ message: "No item ID found to delete." }); + return; + } + + if(!confirm("Are you sure you want to delete this inventory item? This action cannot be undone.")) { + return; + } + + try { + const response = await fetch(`/api/inventory/${id}`, { + method: "DELETE" + }); + + const result = await response.json(); + + if (result.success) { + localStorage.setItem("toastMessage", JSON.stringify({ + message: "Inventory item deleted.", + type: "success" + })); + + window.location.href = "/inventory"; + } else { + renderToast({ message: `Error: ${result.error}`, type: "danger" }); + } + } catch (err) { + renderToast({ message: `Error: ${result.error}`, type: "danger" }); + } + }); + } }); {% endblock %} \ No newline at end of file