From 1ab8bab9ebd8c6d8fdee48c4c9358233b198cccc Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Wed, 21 Sep 2022 14:31:20 +0200 Subject: [PATCH 1/7] Added senaite setup schema field --- src/senaite/core/content/senaitesetup.py | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/senaite/core/content/senaitesetup.py b/src/senaite/core/content/senaitesetup.py index 7d96f4a9af..8a445d921c 100644 --- a/src/senaite/core/content/senaitesetup.py +++ b/src/senaite/core/content/senaitesetup.py @@ -88,6 +88,16 @@ class ISetupSchema(model.Schema): ), ) + categorize_sample_analyses = schema.Bool( + title=_("title_senaitesetup_categorizesampleanalyses", + default=u"Categorize sample analyses"), + description=_( + "description_senaitesetup_categorizesampleanalyses", + default=u"Group analyses by category for samples" + ), + default=False, + ) + ### # Fieldsets ### @@ -96,6 +106,7 @@ class ISetupSchema(model.Schema): label=_("label_senaitesetup_fieldset_analyses", default=u"Analyses"), fields=[ "immediate_results_entry", + "categorize_sample_analyses", ] ) @@ -203,3 +214,17 @@ def setImmediateResultsEntry(self, value): """ mutator = self.mutator("immediate_results_entry") return mutator(self, value) + + @security.protected(permissions.View) + def getCategorizeSampleAnalyses(self): + """Returns if analyses should be grouped by category for samples + """ + accessor = self.accessor("categorize_sample_analyses") + return accessor(self) + + @security.protected(permissions.ModifyPortalContent) + def setCategorizeSampleAnalyses(self, value): + """Enable/Disable grouping of analyses by category for samples + """ + mutator = self.mutator("categorize_sample_analyses") + return mutator(self, value) From dcfc17435b2373e1959edade71dac5a72f2d5903 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Wed, 21 Sep 2022 14:32:54 +0200 Subject: [PATCH 2/7] Added proxy for bika setup --- src/bika/lims/content/bikasetup.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/bika/lims/content/bikasetup.py b/src/bika/lims/content/bikasetup.py index a0ab106eee..f0874cf128 100644 --- a/src/bika/lims/content/bikasetup.py +++ b/src/bika/lims/content/bikasetup.py @@ -313,6 +313,17 @@ def getCounterTypes(self, instance=None): description=_("Group analysis services by category in the LIMS tables, helpful when the list is long") ), ), + BooleanField( + "CategorizeSampleAnalyses", + schemata="Analyses", + default=False, + widget=BooleanWidget( + label=_("label_bikasetup_categorizesampleanalyses", + default="Categorize sample analyses"), + description=_("description_bikasetup_categorizesampleanalyses", + "Group analyses by category for samples") + ), + ), BooleanField( 'EnableARSpecs', schemata="Analyses", @@ -1065,5 +1076,22 @@ def setImmediateResultsEntry(self, value): if setup: setup.setImmediateResultsEntry(value) + def getCategorizeSampleAnalyses(self): + """Get the value from the senaite setup + """ + setup = api.get_senaite_setup() + # setup is `None` during initial site content structure installation + if setup: + return setup.getCategorizeSampleAnalyses() + return False + + def setCategorizeSampleAnalyses(self, value): + """Set the value in the senaite setup + """ + setup = api.get_senaite_setup() + # setup is `None` during initial site content structure installation + if setup: + setup.setCategorizeSampleAnalyses(value) + registerType(BikaSetup, PROJECTNAME) From e990cf2c60cce056dba93e3c0b5a5144c3b85c5a Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Wed, 21 Sep 2022 14:34:20 +0200 Subject: [PATCH 3/7] Enable/Disable analyses categories for samples --- src/bika/lims/browser/analyses/view.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/bika/lims/browser/analyses/view.py b/src/bika/lims/browser/analyses/view.py index 50924cd867..eca4f8da60 100644 --- a/src/bika/lims/browser/analyses/view.py +++ b/src/bika/lims/browser/analyses/view.py @@ -239,6 +239,9 @@ def update(self): super(AnalysesView, self).update() self.load_analysis_categories() self.append_partition_filters() + if self.analyses_categories_enabled(): + self.show_categories = True + self.expand_all_categories = True def before_render(self): """Before render hook @@ -269,6 +272,13 @@ def analysis_remarks_enabled(self): """ return self.context.bika_setup.getEnableAnalysisRemarks() + @viewcache.memoize + def analyses_categories_enabled(self): + """Check if analyses should be grouped by category + """ + setup = api.get_senaite_setup() + return setup.getCategorizeSampleAnalyses() + @viewcache.memoize def has_permission(self, permission, obj=None): """Returns if the current user has rights for the permission passed in From 61ff2c4ea2e69d2ee33844745cf52e21895aa843 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Wed, 21 Sep 2022 14:38:32 +0200 Subject: [PATCH 4/7] Changelog updated --- CHANGES.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.rst b/CHANGES.rst index c6c901f148..98ae495f2f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,7 @@ Changelog 2.3.0 (unreleased) ------------------ +- #2140 Allow to enable/disable analysis categories for samples - #2130 Catalog mapping for Samples and Analyses - #2131 Allow to edit the analysis service sort keys in the services listing - #2133 Filter Contact and CCContact by Client on first click From 6f8cbab10cc204eeda2c7b0924635e1a5a4f2358 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Wed, 21 Sep 2022 14:39:57 +0200 Subject: [PATCH 5/7] spelling --- src/bika/lims/browser/analyses/view.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bika/lims/browser/analyses/view.py b/src/bika/lims/browser/analyses/view.py index eca4f8da60..1140639d49 100644 --- a/src/bika/lims/browser/analyses/view.py +++ b/src/bika/lims/browser/analyses/view.py @@ -239,7 +239,7 @@ def update(self): super(AnalysesView, self).update() self.load_analysis_categories() self.append_partition_filters() - if self.analyses_categories_enabled(): + if self.analysis_categories_enabled(): self.show_categories = True self.expand_all_categories = True @@ -273,7 +273,7 @@ def analysis_remarks_enabled(self): return self.context.bika_setup.getEnableAnalysisRemarks() @viewcache.memoize - def analyses_categories_enabled(self): + def analysis_categories_enabled(self): """Check if analyses should be grouped by category """ setup = api.get_senaite_setup() From 42dcb9ff80a92f8caf77514136c9dda877a74bfb Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Wed, 21 Sep 2022 14:41:59 +0200 Subject: [PATCH 6/7] Do not automatically expand on every update --- src/bika/lims/browser/analyses/view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bika/lims/browser/analyses/view.py b/src/bika/lims/browser/analyses/view.py index 1140639d49..dce604db88 100644 --- a/src/bika/lims/browser/analyses/view.py +++ b/src/bika/lims/browser/analyses/view.py @@ -102,6 +102,7 @@ def __init__(self, context, request, **kwargs): self.dmk = context.bika_setup.getResultsDecimalMark() self.scinot = context.bika_setup.getScientificNotationResults() self.categories = [] + self.expand_all_categories = True # each editable item needs it's own allow_edit # which is a list of field names. @@ -241,7 +242,6 @@ def update(self): self.append_partition_filters() if self.analysis_categories_enabled(): self.show_categories = True - self.expand_all_categories = True def before_render(self): """Before render hook From 836c74a96dcc3062ec724af6b23b389b3b2fb3cc Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Fri, 23 Sep 2022 23:01:21 +0200 Subject: [PATCH 7/7] Check if the context is a sample --- src/bika/lims/browser/analyses/view.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bika/lims/browser/analyses/view.py b/src/bika/lims/browser/analyses/view.py index dce604db88..944a209d43 100644 --- a/src/bika/lims/browser/analyses/view.py +++ b/src/bika/lims/browser/analyses/view.py @@ -276,6 +276,9 @@ def analysis_remarks_enabled(self): def analysis_categories_enabled(self): """Check if analyses should be grouped by category """ + # setting applies only for samples + if not IAnalysisRequest.providedBy(self.context): + return False setup = api.get_senaite_setup() return setup.getCategorizeSampleAnalyses()