diff --git a/__pycache__/routes.cpython-313.pyc b/__pycache__/routes.cpython-313.pyc index 1b0adbb..71adfaa 100644 Binary files a/__pycache__/routes.cpython-313.pyc and b/__pycache__/routes.cpython-313.pyc differ diff --git a/__pycache__/utils.cpython-313.pyc b/__pycache__/utils.cpython-313.pyc index a73e036..bcce93e 100644 Binary files a/__pycache__/utils.cpython-313.pyc and b/__pycache__/utils.cpython-313.pyc differ diff --git a/routes.py b/routes.py index 47294d3..436f03b 100644 --- a/routes.py +++ b/routes.py @@ -316,6 +316,7 @@ def search(): if not query: return redirect(url_for('index')) + InventoryAlias = aliased(Inventory) UserAlias = aliased(User) inventory_query = eager_load_inventory_relationships(db.session.query(Inventory).join(UserAlias, Inventory.owner)).filter( @@ -334,11 +335,14 @@ def search(): User.last_name.ilike(f"%{query}%") )) user_pagination = make_paginated_data(user_query, user_page) - worklog_query = eager_load_worklog_relationships(db.session.query(WorkLog).join(UserAlias, WorkLog.contact)).filter( + worklog_query = eager_load_worklog_relationships(db.session.query(WorkLog).join(UserAlias, WorkLog.contact).join(InventoryAlias, WorkLog.work_item)).filter( or_( WorkLog.notes.ilike(f"%{query}%"), UserAlias.first_name.ilike(f"%{query}%"), - UserAlias.last_name.ilike(f"%{query}%") + UserAlias.last_name.ilike(f"%{query}%"), + InventoryAlias.inventory_name.ilike(f"%{query}%"), + InventoryAlias.serial.ilike(f"%{query}%"), + InventoryAlias.barcode.ilike(f"%{query}%") )) worklog_pagination = make_paginated_data(worklog_query, worklog_page) diff --git a/templates/search.html b/templates/search.html index ce1291f..a4bb388 100644 --- a/templates/search.html +++ b/templates/search.html @@ -10,64 +10,70 @@ title=title, ) }}
+ {% if results['inventory']['rows'] %}
{{ tables.render_table( - headers = results['inventory']['headers'], - rows = results['inventory']['rows'], - entry_route = 'inventory_item', - title='Inventory Results' + headers = results['inventory']['headers'], + rows = results['inventory']['rows'], + entry_route = 'inventory_item', + title='Inventory Results' )}} {{ tables.render_pagination( - endpoint = 'main.search', - page = results['inventory']['pagination']['page'], - has_prev = results['inventory']['pagination']['has_prev'], - has_next = results['inventory']['pagination']['has_next'], - total_pages = results['inventory']['pagination']['total_pages'], - page_variable = 'inventory_page', - extra_args = { - 'q': query, - 'user_page': results['users']['pagination']['page'], - 'worklog_page': results['worklog']['pagination']['page'] + endpoint = 'main.search', + page = results['inventory']['pagination']['page'], + has_prev = results['inventory']['pagination']['has_prev'], + has_next = results['inventory']['pagination']['has_next'], + total_pages = results['inventory']['pagination']['total_pages'], + page_variable = 'inventory_page', + extra_args = { + 'q': query, + 'user_page': results['users']['pagination']['page'], + 'worklog_page': results['worklog']['pagination']['page'] })}}
+ {% endif %} + {% if results['users']['rows'] %}
{{ tables.render_table( - headers = results['users']['headers'], - rows = results['users']['rows'], - entry_route = 'user', title='User Results' + headers = results['users']['headers'], + rows = results['users']['rows'], + entry_route = 'user', title='User Results' )}} {{ tables.render_pagination( - endpoint = 'main.search', - page = results['users']['pagination']['page'], - has_prev = results['users']['pagination']['has_prev'], - has_next = results['users']['pagination']['has_next'], - total_pages = results['users']['pagination']['total_pages'], - page_variable = 'user_page', - extra_args = { - 'q': query, - 'inventory_page': results['inventory']['pagination']['page'], - 'worklog_page': results['worklog']['pagination']['page'] + endpoint = 'main.search', + page = results['users']['pagination']['page'], + has_prev = results['users']['pagination']['has_prev'], + has_next = results['users']['pagination']['has_next'], + total_pages = results['users']['pagination']['total_pages'], + page_variable = 'user_page', + extra_args = { + 'q': query, + 'inventory_page': results['inventory']['pagination']['page'], + 'worklog_page': results['worklog']['pagination']['page'] })}}
+ {% endif %} + {% if results['worklog']['rows'] %}
{{ tables.render_table( - headers = results['worklog']['headers'], - rows = results['worklog']['rows'], - entry_route = 'worklog_entry', - title='Worklog Results' + headers = results['worklog']['headers'], + rows = results['worklog']['rows'], + entry_route = 'worklog_entry', + title='Worklog Results' )}} {{ tables.render_pagination( - endpoint = 'main.search', - page = results['worklog']['pagination']['page'], - has_prev = results['worklog']['pagination']['has_prev'], - has_next = results['worklog']['pagination']['has_next'], - total_pages = results['worklog']['pagination']['total_pages'], - page_variable = 'worklog_page', - extra_args = { - 'q': query, - 'inventory_page': results['inventory']['pagination']['page'], - 'user_page': results['users']['pagination']['page'] + endpoint = 'main.search', + page = results['worklog']['pagination']['page'], + has_prev = results['worklog']['pagination']['has_prev'], + has_next = results['worklog']['pagination']['has_next'], + total_pages = results['worklog']['pagination']['total_pages'], + page_variable = 'worklog_page', + extra_args = { + 'q': query, + 'inventory_page': results['inventory']['pagination']['page'], + 'user_page': results['users']['pagination']['page'] })}}
+ {% endif %}
{% endblock %} \ No newline at end of file diff --git a/utils.py b/utils.py index 344e4a6..a9471b7 100644 --- a/utils.py +++ b/utils.py @@ -1,4 +1,4 @@ -from sqlalchemy.orm import joinedload +from sqlalchemy.orm import joinedload, selectinload from .models import User, Room, Inventory, WorkLog def eager_load_user_relationships(query): @@ -19,8 +19,8 @@ def eager_load_room_relationships(query): return query.options( joinedload(Room.area), joinedload(Room.room_function), - joinedload(Room.inventory), - joinedload(Room.users) + selectinload(Room.inventory), + selectinload(Room.users) ) def eager_load_worklog_relationships(query):