From 368e0917f3a0bf17910e1ba33593185655574f71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Thu, 29 Dec 2022 15:28:07 +0100 Subject: [PATCH 1/7] Remove ProfilesUID computed field --- src/bika/lims/content/analysisrequest.py | 9 --------- src/senaite/core/catalog/sample_catalog.py | 1 - 2 files changed, 10 deletions(-) diff --git a/src/bika/lims/content/analysisrequest.py b/src/bika/lims/content/analysisrequest.py index a354fcc34b..ac31cfd694 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', diff --git a/src/senaite/core/catalog/sample_catalog.py b/src/senaite/core/catalog/sample_catalog.py index 3129f0b839..cdb621680d 100644 --- a/src/senaite/core/catalog/sample_catalog.py +++ b/src/senaite/core/catalog/sample_catalog.py @@ -74,7 +74,6 @@ "getPrioritySortkey", "getProfilesTitle", "getProfilesTitleStr", - "getProfilesUID", "getProfilesURL", "getProgress", "getProvince", From 6f81e0b55aaf39592e7ba2dd1814032151f18b1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Thu, 29 Dec 2022 15:33:17 +0100 Subject: [PATCH 2/7] Added upgrade step --- .../core/profiles/default/metadata.xml | 2 +- src/senaite/core/upgrade/v02_04_000.py | 38 +++++++++++++++++++ src/senaite/core/upgrade/v02_04_000.zcml | 10 +++++ 3 files changed, 49 insertions(+), 1 deletion(-) 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..b1b2f6eb58 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,40 @@ 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), + ] + + # 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..27b43db2ee 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"/> + + + From f9563a68d4094efe87ad02c1035fb1f25fff78b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Thu, 29 Dec 2022 15:34:01 +0100 Subject: [PATCH 3/7] Remove ProfilesURL --- src/bika/lims/content/analysisrequest.py | 6 ------ src/senaite/core/catalog/sample_catalog.py | 1 - src/senaite/core/upgrade/v02_04_000.py | 1 + 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/bika/lims/content/analysisrequest.py b/src/bika/lims/content/analysisrequest.py index ac31cfd694..93a0496a15 100644 --- a/src/bika/lims/content/analysisrequest.py +++ b/src/bika/lims/content/analysisrequest.py @@ -1179,12 +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()] " \ diff --git a/src/senaite/core/catalog/sample_catalog.py b/src/senaite/core/catalog/sample_catalog.py index cdb621680d..9fa37c85ab 100644 --- a/src/senaite/core/catalog/sample_catalog.py +++ b/src/senaite/core/catalog/sample_catalog.py @@ -74,7 +74,6 @@ "getPrioritySortkey", "getProfilesTitle", "getProfilesTitleStr", - "getProfilesURL", "getProgress", "getProvince", "getRawParentAnalysisRequest", diff --git a/src/senaite/core/upgrade/v02_04_000.py b/src/senaite/core/upgrade/v02_04_000.py index b1b2f6eb58..31aa4e914e 100644 --- a/src/senaite/core/upgrade/v02_04_000.py +++ b/src/senaite/core/upgrade/v02_04_000.py @@ -200,6 +200,7 @@ def purge_computed_fields_profile(self): ] columns_to_remove = [ ("getProfilesUID", SAMPLE_CATALOG), + ("getProfilesURL", SAMPLE_CATALOG), ] # Purge the catalogs From 22d23f32540f36367fff6a51017fc3104aabe508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Thu, 29 Dec 2022 15:37:36 +0100 Subject: [PATCH 4/7] Remove getProfilesTitle --- src/bika/lims/content/analysisrequest.py | 9 --------- src/senaite/core/browser/samples/view.py | 3 +-- src/senaite/core/catalog/sample_catalog.py | 1 - src/senaite/core/upgrade/v02_04_000.py | 1 + 4 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/bika/lims/content/analysisrequest.py b/src/bika/lims/content/analysisrequest.py index 93a0496a15..69830aaab1 100644 --- a/src/bika/lims/content/analysisrequest.py +++ b/src/bika/lims/content/analysisrequest.py @@ -1179,12 +1179,6 @@ "if here.getStorageLocation() 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()]) " \ @@ -1494,9 +1488,6 @@ def getClient(self): return self.aq_parent.getClient() return None - def getProfilesTitle(self): - return [profile.Title() for profile in self.getProfiles()] - def getAnalysisService(self): proxies = self.getAnalyses(full_objects=False) value = set() 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 9fa37c85ab..80ff989fdb 100644 --- a/src/senaite/core/catalog/sample_catalog.py +++ b/src/senaite/core/catalog/sample_catalog.py @@ -72,7 +72,6 @@ "getPhysicalPath", "getPrinted", "getPrioritySortkey", - "getProfilesTitle", "getProfilesTitleStr", "getProgress", "getProvince", diff --git a/src/senaite/core/upgrade/v02_04_000.py b/src/senaite/core/upgrade/v02_04_000.py index 31aa4e914e..c78ff20bcb 100644 --- a/src/senaite/core/upgrade/v02_04_000.py +++ b/src/senaite/core/upgrade/v02_04_000.py @@ -201,6 +201,7 @@ def purge_computed_fields_profile(self): columns_to_remove = [ ("getProfilesUID", SAMPLE_CATALOG), ("getProfilesURL", SAMPLE_CATALOG), + ("getProfilesTitle", SAMPLE_CATALOG), ] # Purge the catalogs From e629c05a1deb9ba2ed99b9e263e6e0c412b2b605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Thu, 29 Dec 2022 15:41:48 +0100 Subject: [PATCH 5/7] Remove ProfilesTitleStr --- src/bika/lims/content/analysisrequest.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/bika/lims/content/analysisrequest.py b/src/bika/lims/content/analysisrequest.py index 69830aaab1..af6a8c8010 100644 --- a/src/bika/lims/content/analysisrequest.py +++ b/src/bika/lims/content/analysisrequest.py @@ -1179,12 +1179,6 @@ "if here.getStorageLocation() 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 ''", @@ -1488,6 +1482,10 @@ def getClient(self): return self.aq_parent.getClient() return None + def getProfilesTitleStr(self): + profiles = [profile.Title() for profile in self.getProfiles()] + return ", ".join(profiles) + def getAnalysisService(self): proxies = self.getAnalyses(full_objects=False) value = set() From bf9aa959ebe72271b036c3448fa82bd2bd4d4090 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Thu, 29 Dec 2022 15:49:08 +0100 Subject: [PATCH 6/7] Clarifying message --- src/bika/lims/content/analysisrequest.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bika/lims/content/analysisrequest.py b/src/bika/lims/content/analysisrequest.py index af6a8c8010..0585dbbbba 100644 --- a/src/bika/lims/content/analysisrequest.py +++ b/src/bika/lims/content/analysisrequest.py @@ -1483,6 +1483,9 @@ def getClient(self): return None 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) From 890a2141471981413ae0e692936351a301750cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Thu, 29 Dec 2022 15:51:54 +0100 Subject: [PATCH 7/7] Changelog --- CHANGES.rst | 1 + src/senaite/core/upgrade/v02_04_000.zcml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) 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/senaite/core/upgrade/v02_04_000.zcml b/src/senaite/core/upgrade/v02_04_000.zcml index 27b43db2ee..686acdd411 100644 --- a/src/senaite/core/upgrade/v02_04_000.zcml +++ b/src/senaite/core/upgrade/v02_04_000.zcml @@ -54,7 +54,7 @@ profile="senaite.core:default"/> + https://github.com/senaite/senaite.core/pull/2213 -->