diff --git a/CHANGES.rst b/CHANGES.rst index 6c02e52feb..5591ceed79 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,7 @@ Changelog 2.4.0 (unreleased) ------------------ +- #2213 Purge ComputedField fields from AnalysisRequest related with Profiles - #2212 Improve performance of legacy AT `UIDReferenceField`'s getter - #2211 Remove `Profile` field (stale) from AnalysisRequest - #2207 Support for file upload on analysis (pre) conditions diff --git a/src/bika/lims/content/analysisrequest.py b/src/bika/lims/content/analysisrequest.py index a354fcc34b..0585dbbbba 100644 --- a/src/bika/lims/content/analysisrequest.py +++ b/src/bika/lims/content/analysisrequest.py @@ -1098,15 +1098,6 @@ ), ), - ComputedField( - 'ProfilesUID', - expression="[p.UID() for p in here.getProfiles()] " \ - "if here.getProfiles() else []", - widget=ComputedWidget( - visible=False, - ), - ), - ComputedField( 'Invoiced', expression='here.getInvoice() and True or False', @@ -1188,24 +1179,6 @@ "if here.getStorageLocation() else ''", widget=ComputedWidget(visible=False), ), - ComputedField( - 'ProfilesURL', - expression="[p.absolute_url_path() for p in here.getProfiles()] " \ - "if here.getProfiles() else []", - widget=ComputedWidget(visible=False), - ), - ComputedField( - 'ProfilesTitle', - expression="[p.Title() for p in here.getProfiles()] " \ - "if here.getProfiles() else []", - widget=ComputedWidget(visible=False), - ), - ComputedField( - 'ProfilesTitleStr', - expression="', '.join([p.Title() for p in here.getProfiles()]) " \ - "if here.getProfiles() else ''", - widget=ComputedWidget(visible=False), - ), ComputedField( 'TemplateUID', expression="here.getTemplate().UID() if here.getTemplate() else ''", @@ -1509,8 +1482,12 @@ def getClient(self): return self.aq_parent.getClient() return None - def getProfilesTitle(self): - return [profile.Title() for profile in self.getProfiles()] + def getProfilesTitleStr(self): + """Returns a comma-separated string withg the titles of the profiles + assigned to this Sample. Used to populate a metadata field + """ + profiles = [profile.Title() for profile in self.getProfiles()] + return ", ".join(profiles) def getAnalysisService(self): proxies = self.getAnalyses(full_objects=False) diff --git a/src/senaite/core/browser/samples/view.py b/src/senaite/core/browser/samples/view.py index 6cc50f217c..1cef1055f6 100644 --- a/src/senaite/core/browser/samples/view.py +++ b/src/senaite/core/browser/samples/view.py @@ -201,8 +201,7 @@ def __init__(self, context, request): "toggle": False}), ("getProfilesTitle", { "title": _("Profile"), - "sortable": True, - "index": "getProfilesTitle", + "sortable": False, "toggle": False}), ("getAnalysesNum", { "title": _("Number of Analyses"), diff --git a/src/senaite/core/catalog/sample_catalog.py b/src/senaite/core/catalog/sample_catalog.py index 3129f0b839..80ff989fdb 100644 --- a/src/senaite/core/catalog/sample_catalog.py +++ b/src/senaite/core/catalog/sample_catalog.py @@ -72,10 +72,7 @@ "getPhysicalPath", "getPrinted", "getPrioritySortkey", - "getProfilesTitle", "getProfilesTitleStr", - "getProfilesUID", - "getProfilesURL", "getProgress", "getProvince", "getRawParentAnalysisRequest", diff --git a/src/senaite/core/profiles/default/metadata.xml b/src/senaite/core/profiles/default/metadata.xml index 98cd6ee4fa..5a09c822a1 100644 --- a/src/senaite/core/profiles/default/metadata.xml +++ b/src/senaite/core/profiles/default/metadata.xml @@ -1,6 +1,6 @@ - 2405 + 2406 profile-Products.ATContentTypes:base profile-Products.CMFEditions:CMFEditions diff --git a/src/senaite/core/upgrade/v02_04_000.py b/src/senaite/core/upgrade/v02_04_000.py index c63cba7270..c78ff20bcb 100644 --- a/src/senaite/core/upgrade/v02_04_000.py +++ b/src/senaite/core/upgrade/v02_04_000.py @@ -27,6 +27,7 @@ from bika.lims.interfaces import IRetracted from senaite.core import logger from senaite.core.catalog import ANALYSIS_CATALOG +from senaite.core.catalog import SAMPLE_CATALOG from senaite.core.config import PROJECTNAME as product from senaite.core.upgrade import upgradestep from senaite.core.upgrade.utils import UpgradeUtils @@ -188,3 +189,42 @@ def fix_traceback_retract_dl(tool): obj._p_deactivate() logger.info("Migrate LDL, UDL and result fields to string [DONE]") + + +def purge_computed_fields_profile(self): + """Cleanup of computed fields related with Profiles field and removal of + indexes and columns that are no longer required + """ + logger.info("Purge ComputedField from Sample related with Profiles ...") + indexes_to_remove = [ + ] + columns_to_remove = [ + ("getProfilesUID", SAMPLE_CATALOG), + ("getProfilesURL", SAMPLE_CATALOG), + ("getProfilesTitle", SAMPLE_CATALOG), + ] + + # Purge the catalogs + purge_catalogs(indexes_to_remove, columns_to_remove) + + logger.info("Purge ComputedField from Sample related with Profiles [DONE]") + + +def purge_catalogs(indexes_to_remove, columns_to_remove): + """Removes the indexes and columns from catalogs + """ + # remove indexes + for index_name, catalog_id in indexes_to_remove: + cat = api.get_tool(catalog_id) + if index_name in cat.indexes(): + logger.info("Removing '{}' index from '{}'".format( + index_name, catalog_id)) + cat.delIndex(index_name) + + # remove columns + for col_name, catalog_id in columns_to_remove: + cat = api.get_tool(catalog_id) + if col_name in cat.schema(): + logger.info("Removing '{}' column from '{}'".format( + col_name, catalog_id)) + cat.delColumn(col_name) diff --git a/src/senaite/core/upgrade/v02_04_000.zcml b/src/senaite/core/upgrade/v02_04_000.zcml index 9107b965ed..686acdd411 100644 --- a/src/senaite/core/upgrade/v02_04_000.zcml +++ b/src/senaite/core/upgrade/v02_04_000.zcml @@ -53,4 +53,14 @@ handler="senaite.core.upgrade.v02_04_000.fix_traceback_retract_dl" profile="senaite.core:default"/> + + +