From 29dc740725a345d1f32bc3c563db2a9bb7251f90 Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Mon, 6 Oct 2025 09:45:07 -0500 Subject: [PATCH 1/2] More work to add work logs to inventory. --- inventory/models/user.py | 9 +-------- inventory/routes/entry.py | 26 +++++++++++++++++++------ inventory/templates/inventory_logs.html | 8 +------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/inventory/models/user.py b/inventory/models/user.py index 6ecc432..21bc2b6 100644 --- a/inventory/models/user.py +++ b/inventory/models/user.py @@ -51,8 +51,6 @@ class User(Base, CRUDMixin): @hybrid_property def label(self): out = f"{self.first_name} {self.last_name}" - if self.title: - out = out + f" ({self.title})" return out @label.expression @@ -68,9 +66,4 @@ class User(Base, CRUDMixin): space = case((have_first & have_last, literal(" ")), else_=literal("")) - title_part = case( - (func.length(sql_trim(title, backend)) > 0, func.concat(" (", title, ")")), - else_=literal("") - ) - - return func.concat(first, space, last, title_part) + return func.concat(first, space, last) diff --git a/inventory/routes/entry.py b/inventory/routes/entry.py index 7800fdd..183b5ae 100644 --- a/inventory/routes/entry.py +++ b/inventory/routes/entry.py @@ -4,7 +4,7 @@ from sqlalchemy.inspection import inspect from typing import Any, Dict, List, Tuple, Callable, Optional import crudkit -from crudkit.ui.fragments import render_form, register_template_globals +from crudkit.ui.fragments import render_form, render_table, register_template_globals from crudkit.core import normalize_payload bp_entry = Blueprint("entry", __name__) @@ -15,10 +15,7 @@ def _fields_for_model(model: str): layout = [] if model == "inventory": - fields = ["label", "name", "serial", "barcode", "brand", "model", - "device_type", "owner", "location", "condition", "image", - "notes", "work_logs.start_time", "work_logs.work_item.label", - "work_logs.contact.label", "work_logs.complete"] + fields = [] fields_spec = [ {"name": "label", "type": "display", "label": "", "row": "label", "attrs": {"class": "display-6 mb-3"}, "wrap": {"class": "col"}}, @@ -58,7 +55,8 @@ def _fields_for_model(model: str): "wrap": {"class": "h-100 w-100"}}, {"name": "notes", "type": "template", "label": "Notes", "row": "notes", "wrap": {"class": "col"}, "template": "inventory_note.html"}, - {"name": "work_logs", "type": "template", "row": "notes", "wrap": {"class": "col"}, "template": "inventory_logs.html"}, + {"name": "work_logs", "type": "template", "template_ctx": {}, "row": "notes", "wrap": {"class": "col"}, + "template": "inventory_logs.html"}, ] layout = [ {"name": "label", "order": 5, "attrs": {"class": "row align-items-center"}}, @@ -187,6 +185,22 @@ def init_entry_routes(app): ScopedSession = current_app.extensions["crudkit"]["Session"] + if model == "inventory": + log_cls = crudkit.crud.get_model("worklog") + log_svc = crudkit.crud.get_service(log_cls) + logs = log_svc.list({ + "work_item_id__eq": id, + "fields": "id,contact.label,complete,created_at,updated_at", + }) + fields_spec[13]["template_ctx"]["table"] = render_table(logs, [ + {"field": "id", "label": "ID"}, + {"field": "contact.label", "label": "Contact", + "link": {"endpoint": "entry.entry", "params": {"id": "{contact.id}", "model": "user"}}}, + {"field": "created_at", "label": "Created", "format": "datetime"}, + {"field": "updated_at", "label": "Updated", "format": "datetime"}, + {"field": "complete", "format": "yesno"}, + ]) + form = render_form( cls, obj.as_dict(), diff --git a/inventory/templates/inventory_logs.html b/inventory/templates/inventory_logs.html index 00f54f1..5222e1d 100644 --- a/inventory/templates/inventory_logs.html +++ b/inventory/templates/inventory_logs.html @@ -1,8 +1,2 @@ -

- {{ field }} -

-

- {{ field['template_ctx']['values']['work_logs'] }} -

-{% include "table.html" %} \ No newline at end of file +{{ field['template_ctx']['table'] | safe }} \ No newline at end of file From 5a1f978aa273a01688da224b99ddc7590f38a557 Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Mon, 6 Oct 2025 10:16:33 -0500 Subject: [PATCH 2/2] Final push on work logs on inventory page. --- inventory/routes/entry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inventory/routes/entry.py b/inventory/routes/entry.py index 183b5ae..f434c0f 100644 --- a/inventory/routes/entry.py +++ b/inventory/routes/entry.py @@ -199,7 +199,7 @@ def init_entry_routes(app): {"field": "created_at", "label": "Created", "format": "datetime"}, {"field": "updated_at", "label": "Updated", "format": "datetime"}, {"field": "complete", "format": "yesno"}, - ]) + ], opts={"object_class": "worklog"}) form = render_form( cls,