{% extends "layout.html" %} {% block title %}{{ title }}{% endblock %} {% block content %} {{ breadcrumbs.breadcrumb_header( breadcrumbs=[ {'label': "Inventory", 'url': url_for('main.list_inventory')} ], title=title, save_button=True, delete_button= item.id != None ) }}
{% if worklog %}
{{ tables.render_table(headers=worklog_headers, rows=worklog_rows, id='worklog', entry_route='worklog_entry', title='Work Log') }}
{% endif %}
{% endblock %} {% block script %} const saveButton = document.getElementById("saveButton"); const deleteButton = document.getElementById("deleteButton"); if (saveButton) { saveButton.addEventListener("click", async (e) => { e.preventDefault(); const payload = { timestamp: document.querySelector("input[name='timestamp']").value, condition: document.querySelector("select[name='condition']").value, needed: "", // ← either add a field for this or drop it if obsolete type_id: parseInt(document.querySelector("select[name='type']").value), inventory_name: document.querySelector("input[name='inventory_name']").value || null, serial: document.querySelector("input[name='serial']").value || null, model: document.querySelector("input[name='model']").value || null, notes: document.querySelector("textarea[name='notes']").value || null, owner_id: parseInt(document.querySelector("select#userList").value) || null, brand_id: parseInt(document.querySelector("select[name='brand']").value) || null, location_id: parseInt(document.querySelector("select#room").value) || null, barcode: document.querySelector("input[name='barcode']").value || null, shared: document.querySelector("input[name='shared']").checked }; try { const id = document.querySelector("#inventoryId").value; const isEdit = id && id !== "None"; const endpoint = isEdit ? `/api/inventory/${id}` : "/api/inventory"; const method = isEdit ? "PUT" : "POST"; const response = await fetch(endpoint, { method, headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); const result = await response.json(); if (result.success) { localStorage.setItem("toastMessage", JSON.stringify({ message: isEdit ? "Inventory item updated!" : "Inventory item created!", type: "success" })); window.location.href = `/inventory_item/${result.id}`; } else { renderToast({ message: `Error: ${result.error}`, type: "danger" }); } } catch (err) { console.error(err); } }); } 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 %}