Add breadcrumb support to inventory listing and update templates for improved navigation

This commit is contained in:
Yaro Kasear 2025-06-12 11:56:01 -05:00
parent 5df5f86fd2
commit 823bae7e65
3 changed files with 14 additions and 2 deletions

Binary file not shown.

View file

@ -107,6 +107,7 @@ def render_paginated_table(
row_fn: Callable[[Any], List[dict]], row_fn: Callable[[Any], List[dict]],
endpoint: str, endpoint: str,
per_page=15, per_page=15,
breadcrumb=[],
extra_args={} extra_args={}
): ):
data = make_paginated_data(query, page, per_page) data = make_paginated_data(query, page, per_page)
@ -122,6 +123,7 @@ def render_paginated_table(
total_pages=data['total_pages'], total_pages=data['total_pages'],
headers=headers, headers=headers,
entry_route=entry_route, entry_route=entry_route,
breadcrumb=breadcrumb,
extra_args=extra_args extra_args=extra_args
) )
@ -144,6 +146,8 @@ def list_inventory():
filter_by = request.args.get('filter_by', type=str) filter_by = request.args.get('filter_by', type=str)
id = request.args.get('id', type=int) id = request.args.get('id', type=int)
filter_name = None
query = db.session.query(Inventory) query = db.session.query(Inventory)
query = eager_load_inventory_relationships(query) query = eager_load_inventory_relationships(query)
query = query.order_by(Inventory.inventory_name, Inventory.barcode, Inventory.serial) query = query.order_by(Inventory.inventory_name, Inventory.barcode, Inventory.serial)
@ -151,6 +155,12 @@ def list_inventory():
if filter_by and id: if filter_by and id:
column = FILTER_MAP.get(filter_by) column = FILTER_MAP.get(filter_by)
if column is not None: if column is not None:
if filter_by == 'user':
filter_name = db.session.query(User).filter(User.id == id).first().full_name
elif filter_by == 'room':
filter_name = db.session.query(Room).filter(Room.id == id).first().full_name
else:
filter_name = db.session.query(Brand).filter(Brand.id == id).first().name
query = query.filter(column == id) query = query.filter(column == id)
else: else:
return "Invalid filter_by parameter", 400 return "Invalid filter_by parameter", 400
@ -158,11 +168,12 @@ def list_inventory():
return render_paginated_table( return render_paginated_table(
query=query, query=query,
page=page, page=page,
title="Inventory (Filtered)" if filter_by else "Inventory", title=f"Inventory ({filter_name})" if filter_by else "Inventory",
headers=inventory_headers, headers=inventory_headers,
row_fn=lambda i: [fn(i) for fn in inventory_headers.values()], row_fn=lambda i: [fn(i) for fn in inventory_headers.values()],
endpoint="main.list_inventory", endpoint="main.list_inventory",
entry_route="inventory_item", entry_route="inventory_item",
breadcrumb=[{'label': 'Inventory', 'url': url_for('main.inventory_index')}],
extra_args={'filter_by': filter_by, 'id': id} extra_args={'filter_by': filter_by, 'id': id}
) )

View file

@ -9,7 +9,8 @@
{% block content %} {% block content %}
{{ breadcrumbs.breadcrumb_header( {{ breadcrumbs.breadcrumb_header(
title=title title=title,
breadcrumbs=breadcrumb
) }} ) }}
{{ tables.render_table(header, rows, entry_route) }} {{ tables.render_table(header, rows, entry_route) }}