Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Changelog
2.7.0 (unreleased)
------------------

- #2869 Add adapter lookup for client searchable text index
- #2868 Fix auto CC contacts set in the client for new samples
- #2867 Remove stale AT reference objects
- #2866 Add transaction savepoints to large upgradesteps
Expand Down
34 changes: 26 additions & 8 deletions src/senaite/core/catalog/indexer/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,47 @@

from bika.lims import api
from bika.lims.interfaces import IClient
from bika.lims.interfaces import IListingSearchableTextProvider
from plone.indexer import indexer
from senaite.core.interfaces.catalog import IClientCatalog
from zope.component import getAdapters
from senaite.core.catalog import CLIENT_CATALOG


@indexer(IClient, IClientCatalog)
def client_searchable_text(instance):
"""Extract search tokens for ZC text index
"""
"""Extract search tokens for ZC text index.

tokens = [
Add-ons can contribute additional tokens by registering a named
multi-adapter for (IClient, IRequest, IClientCatalog) that provides
IListingSearchableTextProvider.
"""
tokens = set([
instance.getClientID(),
instance.getName(),
instance.getPhone(),
instance.getFax(),
instance.getEmailAddress(),
instance.getTaxNumber(),
]
])

# extend address lines
tokens.extend(instance.getPrintAddress())
tokens.update(instance.getPrintAddress())

# remove duplicates and filter out emtpies
tokens = filter(None, set(tokens))
# allow add-ons to contribute additional tokens via named adapters
catalog = api.get_tool(CLIENT_CATALOG)
providers = getAdapters(
(instance, api.get_request(), catalog),
IListingSearchableTextProvider)
for name, provider in providers:
try:
value = provider()
except Exception:
continue
if isinstance(value, (list, tuple)):
tokens.update(map(api.safe_unicode, value))
elif value:
tokens.add(api.safe_unicode(value))

# return a single unicode string with all the concatenated tokens
tokens = filter(None, tokens)
return u" ".join(map(api.safe_unicode, tokens))
Loading