Enhance search functionality with pagination and improve eager loading in utils
This commit is contained in:
parent
eb7e446e56
commit
cffdc27724
5 changed files with 56 additions and 46 deletions
Binary file not shown.
Binary file not shown.
|
@ -316,6 +316,7 @@ def search():
|
||||||
if not query:
|
if not query:
|
||||||
return redirect(url_for('index'))
|
return redirect(url_for('index'))
|
||||||
|
|
||||||
|
InventoryAlias = aliased(Inventory)
|
||||||
UserAlias = aliased(User)
|
UserAlias = aliased(User)
|
||||||
|
|
||||||
inventory_query = eager_load_inventory_relationships(db.session.query(Inventory).join(UserAlias, Inventory.owner)).filter(
|
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.last_name.ilike(f"%{query}%")
|
||||||
))
|
))
|
||||||
user_pagination = make_paginated_data(user_query, user_page)
|
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_(
|
or_(
|
||||||
WorkLog.notes.ilike(f"%{query}%"),
|
WorkLog.notes.ilike(f"%{query}%"),
|
||||||
UserAlias.first_name.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)
|
worklog_pagination = make_paginated_data(worklog_query, worklog_page)
|
||||||
|
|
||||||
|
|
|
@ -10,64 +10,70 @@ title=title,
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
{% if results['inventory']['rows'] %}
|
||||||
<div>
|
<div>
|
||||||
{{ tables.render_table(
|
{{ tables.render_table(
|
||||||
headers = results['inventory']['headers'],
|
headers = results['inventory']['headers'],
|
||||||
rows = results['inventory']['rows'],
|
rows = results['inventory']['rows'],
|
||||||
entry_route = 'inventory_item',
|
entry_route = 'inventory_item',
|
||||||
title='Inventory Results'
|
title='Inventory Results'
|
||||||
)}}
|
)}}
|
||||||
{{ tables.render_pagination(
|
{{ tables.render_pagination(
|
||||||
endpoint = 'main.search',
|
endpoint = 'main.search',
|
||||||
page = results['inventory']['pagination']['page'],
|
page = results['inventory']['pagination']['page'],
|
||||||
has_prev = results['inventory']['pagination']['has_prev'],
|
has_prev = results['inventory']['pagination']['has_prev'],
|
||||||
has_next = results['inventory']['pagination']['has_next'],
|
has_next = results['inventory']['pagination']['has_next'],
|
||||||
total_pages = results['inventory']['pagination']['total_pages'],
|
total_pages = results['inventory']['pagination']['total_pages'],
|
||||||
page_variable = 'inventory_page',
|
page_variable = 'inventory_page',
|
||||||
extra_args = {
|
extra_args = {
|
||||||
'q': query,
|
'q': query,
|
||||||
'user_page': results['users']['pagination']['page'],
|
'user_page': results['users']['pagination']['page'],
|
||||||
'worklog_page': results['worklog']['pagination']['page']
|
'worklog_page': results['worklog']['pagination']['page']
|
||||||
})}}
|
})}}
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if results['users']['rows'] %}
|
||||||
<div>
|
<div>
|
||||||
{{ tables.render_table(
|
{{ tables.render_table(
|
||||||
headers = results['users']['headers'],
|
headers = results['users']['headers'],
|
||||||
rows = results['users']['rows'],
|
rows = results['users']['rows'],
|
||||||
entry_route = 'user', title='User Results'
|
entry_route = 'user', title='User Results'
|
||||||
)}}
|
)}}
|
||||||
{{ tables.render_pagination(
|
{{ tables.render_pagination(
|
||||||
endpoint = 'main.search',
|
endpoint = 'main.search',
|
||||||
page = results['users']['pagination']['page'],
|
page = results['users']['pagination']['page'],
|
||||||
has_prev = results['users']['pagination']['has_prev'],
|
has_prev = results['users']['pagination']['has_prev'],
|
||||||
has_next = results['users']['pagination']['has_next'],
|
has_next = results['users']['pagination']['has_next'],
|
||||||
total_pages = results['users']['pagination']['total_pages'],
|
total_pages = results['users']['pagination']['total_pages'],
|
||||||
page_variable = 'user_page',
|
page_variable = 'user_page',
|
||||||
extra_args = {
|
extra_args = {
|
||||||
'q': query,
|
'q': query,
|
||||||
'inventory_page': results['inventory']['pagination']['page'],
|
'inventory_page': results['inventory']['pagination']['page'],
|
||||||
'worklog_page': results['worklog']['pagination']['page']
|
'worklog_page': results['worklog']['pagination']['page']
|
||||||
})}}
|
})}}
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if results['worklog']['rows'] %}
|
||||||
<div>
|
<div>
|
||||||
{{ tables.render_table(
|
{{ tables.render_table(
|
||||||
headers = results['worklog']['headers'],
|
headers = results['worklog']['headers'],
|
||||||
rows = results['worklog']['rows'],
|
rows = results['worklog']['rows'],
|
||||||
entry_route = 'worklog_entry',
|
entry_route = 'worklog_entry',
|
||||||
title='Worklog Results'
|
title='Worklog Results'
|
||||||
)}}
|
)}}
|
||||||
{{ tables.render_pagination(
|
{{ tables.render_pagination(
|
||||||
endpoint = 'main.search',
|
endpoint = 'main.search',
|
||||||
page = results['worklog']['pagination']['page'],
|
page = results['worklog']['pagination']['page'],
|
||||||
has_prev = results['worklog']['pagination']['has_prev'],
|
has_prev = results['worklog']['pagination']['has_prev'],
|
||||||
has_next = results['worklog']['pagination']['has_next'],
|
has_next = results['worklog']['pagination']['has_next'],
|
||||||
total_pages = results['worklog']['pagination']['total_pages'],
|
total_pages = results['worklog']['pagination']['total_pages'],
|
||||||
page_variable = 'worklog_page',
|
page_variable = 'worklog_page',
|
||||||
extra_args = {
|
extra_args = {
|
||||||
'q': query,
|
'q': query,
|
||||||
'inventory_page': results['inventory']['pagination']['page'],
|
'inventory_page': results['inventory']['pagination']['page'],
|
||||||
'user_page': results['users']['pagination']['page']
|
'user_page': results['users']['pagination']['page']
|
||||||
})}}
|
})}}
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
6
utils.py
6
utils.py
|
@ -1,4 +1,4 @@
|
||||||
from sqlalchemy.orm import joinedload
|
from sqlalchemy.orm import joinedload, selectinload
|
||||||
from .models import User, Room, Inventory, WorkLog
|
from .models import User, Room, Inventory, WorkLog
|
||||||
|
|
||||||
def eager_load_user_relationships(query):
|
def eager_load_user_relationships(query):
|
||||||
|
@ -19,8 +19,8 @@ def eager_load_room_relationships(query):
|
||||||
return query.options(
|
return query.options(
|
||||||
joinedload(Room.area),
|
joinedload(Room.area),
|
||||||
joinedload(Room.room_function),
|
joinedload(Room.room_function),
|
||||||
joinedload(Room.inventory),
|
selectinload(Room.inventory),
|
||||||
joinedload(Room.users)
|
selectinload(Room.users)
|
||||||
)
|
)
|
||||||
|
|
||||||
def eager_load_worklog_relationships(query):
|
def eager_load_worklog_relationships(query):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue