search: asset lists search the type column they display
Every asset list shows a Type column (and printers a Model, machines and network a Vendor), but the search filters only looked at the asset number, name, serial and hostname. Searching a type returned zero rows: 'Part Washer' on machines, 'Standard' on PCs, 'Thermal' on printers. Extend the search on machines, computers, printers, network devices, measuring tools and the unified asset list to cover the type name plus the vendor/model where the list shows them. Joins are outer joins so an asset missing a type or vendor still matches on its own fields; the core list uses a correlated EXISTS instead, since its type-name filter already joins AssetType.
This commit is contained in:
@@ -363,14 +363,20 @@ def list_computers():
|
||||
if exactassetnumber := request.args.get('assetnumber'):
|
||||
query = query.filter(Asset.assetnumber == exactassetnumber)
|
||||
|
||||
# Search filter
|
||||
# Search filter. Covers the type name too - it is a column in the list, so
|
||||
# searching 'Standard' must find the PCs of that type. Outer join so a PC
|
||||
# with no type still matches on its own fields.
|
||||
if search := request.args.get('search'):
|
||||
query = query.filter(
|
||||
pattern = f'%{search}%'
|
||||
query = query.outerjoin(
|
||||
ComputerType, Computer.computertypeid == ComputerType.computertypeid
|
||||
).filter(
|
||||
db.or_(
|
||||
Asset.assetnumber.ilike(f'%{search}%'),
|
||||
Asset.name.ilike(f'%{search}%'),
|
||||
Asset.serialnumber.ilike(f'%{search}%'),
|
||||
Computer.hostname.ilike(f'%{search}%')
|
||||
Asset.assetnumber.ilike(pattern),
|
||||
Asset.name.ilike(pattern),
|
||||
Asset.serialnumber.ilike(pattern),
|
||||
Computer.hostname.ilike(pattern),
|
||||
ComputerType.computertype.ilike(pattern)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user