Add breadcrumb support to inventory listing and update templates for improved navigation
This commit is contained in:
parent
5df5f86fd2
commit
823bae7e65
3 changed files with 14 additions and 2 deletions
Binary file not shown.
13
routes.py
13
routes.py
|
@ -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}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -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) }}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue