feat(devices): add console-only display name (console_name)
Lets staff set a friendly name for a device independent of whatever name the end user gave it in the app. console_name is never shown to app users and never synced from/to device_name; every display label across search, equipment/helpdesk name resolution, device search, and the Manage tab's issue linker now falls back through console_name -> device_name -> serial rather than device_name alone. Also includes an incidental one-line fix in devices/service.py: the nested-struct deep-merge in update_device() was missing the newly added device_health_settings key. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -159,9 +159,10 @@ def list_devices(
|
||||
if search:
|
||||
search_lower = search.lower()
|
||||
name_match = search_lower in (device.device_name or "").lower()
|
||||
console_name_match = search_lower in (device.console_name or "").lower()
|
||||
location_match = search_lower in (device.device_location or "").lower()
|
||||
sn_match = search_lower in (device.serial_number or "").lower()
|
||||
if not (name_match or location_match or sn_match):
|
||||
if not (name_match or console_name_match or location_match or sn_match):
|
||||
continue
|
||||
|
||||
results.append(device)
|
||||
@@ -222,7 +223,7 @@ def update_device(device_doc_id: str, data: DeviceUpdate) -> DeviceInDB:
|
||||
# Deep-merge nested structs so unmentioned sub-fields are preserved
|
||||
existing = doc.to_dict()
|
||||
nested_keys = (
|
||||
"device_attributes", "device_subscription", "device_stats",
|
||||
"device_attributes", "device_subscription", "device_stats", "device_health_settings",
|
||||
)
|
||||
for key in nested_keys:
|
||||
if key in update_data and isinstance(existing.get(key), dict):
|
||||
|
||||
@@ -48,7 +48,8 @@ def _resolve_names(db, device_id: str | None, user_id: str | None) -> tuple[str,
|
||||
if device_id and isinstance(device_id, str) and device_id.strip():
|
||||
device_doc = db.collection("devices").document(device_id.strip()).get()
|
||||
if device_doc.exists:
|
||||
device_name = device_doc.to_dict().get("device_name", "")
|
||||
device_data = device_doc.to_dict()
|
||||
device_name = device_data.get("console_name") or device_data.get("device_name", "")
|
||||
|
||||
if user_id and isinstance(user_id, str) and user_id.strip():
|
||||
user_doc = db.collection("users").document(user_id.strip()).get()
|
||||
|
||||
@@ -50,7 +50,8 @@ def _resolve_device_name(db, device_id: str) -> str:
|
||||
try:
|
||||
doc = db.collection("devices").document(device_id.strip()).get()
|
||||
if doc.exists:
|
||||
return doc.to_dict().get("device_name", "")
|
||||
data = doc.to_dict()
|
||||
return data.get("console_name") or data.get("device_name", "")
|
||||
except Exception as e:
|
||||
print(f"[helpdesk] Error resolving device name: {e}")
|
||||
return ""
|
||||
|
||||
@@ -26,8 +26,9 @@ def _search_devices(q: str) -> list[dict]:
|
||||
return []
|
||||
out = []
|
||||
for d in results[:LIMIT]:
|
||||
label = d.device_name or d.serial_number or d.device_id or d.id
|
||||
sublabel = d.serial_number if d.device_name else None
|
||||
display_name = d.console_name or d.device_name
|
||||
label = display_name or d.serial_number or d.device_id or d.id
|
||||
sublabel = d.serial_number if display_name else None
|
||||
out.append({
|
||||
"type": "device",
|
||||
"id": d.id,
|
||||
|
||||
Reference in New Issue
Block a user