From 86c4f88b78cc94545e6b7e2abd3fe19ae7c2f965 Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Mon, 22 Sep 2025 16:14:33 -0500 Subject: [PATCH] Working on Work Log entry settings now. --- crudkit/ui/fragments.py | 37 ++++++++++++++++++++++++++++ crudkit/ui/templates/field.html | 18 ++++++++++++++ inventory/routes/entry.py | 34 +++++++++++++++++++++---- inventory/routes/index.py | 4 +-- inventory/templates/update_list.html | 3 +++ 5 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 inventory/templates/update_list.html diff --git a/crudkit/ui/fragments.py b/crudkit/ui/fragments.py index 0fda60a..47d5487 100644 --- a/crudkit/ui/fragments.py +++ b/crudkit/ui/fragments.py @@ -661,6 +661,30 @@ def _class_for(val: Any, classes: Optional[Dict[str, str]]) -> Optional[str]: key = "none" if val is None else str(val).lower() return classes.get(key, classes.get("default")) +def _format_label_from_values(spec: Any, values: dict) -> Optional[str]: + if not spec: + return None + if isinstance(spec, (list, tuple)): + parts = [] + for a in spec: + v = _deep_get(values, str(a)) + parts.append("" if v is None else str(v)) + return " ".join(p for p in parts if p) + + s = str(spec) + if "{" in s and "}" in s: + names = re.findall(r"{\s*([^}:\s]+)", s) + data = {n: _deep_get(values, n) for n in names} + # wrap for safe .format() + data = {k: ("" if v is None else v) for k, v in data.items()} + try: + return s.format(**data) + except Exception: + return None + # simple field name + v = _deep_get(values, s) + return "" if v is None else str(v) + def _build_href(spec: Dict[str, Any], row: Dict[str, Any], obj) -> Optional[str]: if not spec: return None @@ -915,6 +939,19 @@ def render_form( if vl is not None: f["value_label"] = vl + for f in fields: + # existing FK label resolution + vl = _value_label_for_field(f, mapper, values_map, instance, session) + if vl is not None: + f["value_label"] = vl + # NEW: if not a relationship but a label_spec is provided, format from values + elif f.get("label_spec"): + base, rel_prop = _rel_for_id_name(mapper, f["name"]) + if not rel_prop: # scalar field + vl2 = _format_label_from_values(f["label_spec"], values_map) + if vl2 is not None: + f["value_label"] = vl2 + # Build rows (supports nested layout with parents) rows_map = _normalize_rows_layout(layout) rows_tree = _assign_fields_to_rows(fields, rows_map) diff --git a/crudkit/ui/templates/field.html b/crudkit/ui/templates/field.html index 81b7062..0efe44b 100644 --- a/crudkit/ui/templates/field.html +++ b/crudkit/ui/templates/field.html @@ -47,6 +47,24 @@ {{k}}{% if v is not sameas true %}="{{ v }}"{% endif %} {% endfor %}{% endif %}>{{ value_label if value_label else (value if value else "") }} +{% elif field_type == "date" %} + + +{% elif field_type == "time" %} + + +{% elif field_type == "datetime" %} + + {% else %} + UPDATES NOT IMPLEMENTED YET + \ No newline at end of file