From 88b590afe6480260b314adccb7f5c5962e6bf27d Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Tue, 20 Aug 2019 21:15:47 +0200 Subject: [PATCH 1/7] Publish partitions if possible --- bika/lims/browser/publish/emailview.py | 28 +++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/bika/lims/browser/publish/emailview.py b/bika/lims/browser/publish/emailview.py index 6755e2d4b6..9b70b5f94e 100644 --- a/bika/lims/browser/publish/emailview.py +++ b/bika/lims/browser/publish/emailview.py @@ -430,22 +430,24 @@ def write_sendlog(self): def publish_samples(self): """Publish all samples of the reports """ - reports = self.reports - for report in reports: - # publish the primary sample - primary_sample = report.getAnalysisRequest() - self.publish(primary_sample) - # publish the contained samples - contained_samples = report.getContainedAnalysisRequests() - for sample in contained_samples: - # skip the primary sample - if sample == primary_sample: - continue - self.publish(sample) + samples = set() + + # collect primary + contained samples of the reports + for report in self.reports: + samples.add(report.getAnalysisRequest()) + samples.update(report.getContainedAnalysisRequests()) + + # publish all samples + their partitions + for sample in samples: + self. publish(sample) def publish(self, sample): """Set status to prepublished/published/republished """ + # publish partitions + for partition in sample.getDescendants(): + self.publish(partition) + wf = api.get_tool("portal_workflow") status = wf.getInfoFor(sample, "review_state") transitions = {"verified": "publish", @@ -460,10 +462,8 @@ def publish(self, sample): wf.doActionFor(sample, transition) # Commit the changes transaction.commit() - return True except WorkflowException as e: logger.error(e) - return False def render_email_template(self, template): """Return the rendered email template From 9d2ca7792e64c8dee8b7700203864e440981afa3 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Tue, 20 Aug 2019 21:31:49 +0200 Subject: [PATCH 2/7] removed space between dot operator --- bika/lims/browser/publish/emailview.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bika/lims/browser/publish/emailview.py b/bika/lims/browser/publish/emailview.py index 9b70b5f94e..c63a68e7d1 100644 --- a/bika/lims/browser/publish/emailview.py +++ b/bika/lims/browser/publish/emailview.py @@ -439,7 +439,7 @@ def publish_samples(self): # publish all samples + their partitions for sample in samples: - self. publish(sample) + self.publish(sample) def publish(self, sample): """Set status to prepublished/published/republished From a40a52640f676ccf4e5b8a0cfef7736af865a009 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Tue, 20 Aug 2019 21:32:09 +0200 Subject: [PATCH 3/7] Same behavior for the force-publish button --- bika/lims/browser/workflow/client.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bika/lims/browser/workflow/client.py b/bika/lims/browser/workflow/client.py index 64dd237d1f..eb744d66d5 100644 --- a/bika/lims/browser/workflow/client.py +++ b/bika/lims/browser/workflow/client.py @@ -54,6 +54,9 @@ def get_sample_uids_in_report(self, report): def publish_sample(self, sample): """Set status to prepublished/published/republished """ + # publish partitions + for partition in sample.getDescendants(): + self.publish_sample(partition) status = api.get_workflow_status_of(sample) transitions = {"verified": "publish", "published": "republish"} transition = transitions.get(status, "prepublish") From d7eaa3ae2cddc8cadf3ecb9145984c6c114b1b8d Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Tue, 20 Aug 2019 21:33:58 +0200 Subject: [PATCH 4/7] Changelog updated --- CHANGES.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.rst b/CHANGES.rst index b5d3da8f88..f3750e0def 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -13,6 +13,7 @@ Changelog **Changed** +- #1428 Publish verified partitions - #1417 Cache allowed transitions for analyses on the request - #1413 Improved Email Publication From f35d41a52ee1793783e0b3e0dce2d452cd8bc9e2 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Wed, 11 Sep 2019 18:19:55 +0200 Subject: [PATCH 5/7] Removed explicit partition publication --- bika/lims/browser/publish/emailview.py | 4 ---- bika/lims/browser/workflow/client.py | 3 --- 2 files changed, 7 deletions(-) diff --git a/bika/lims/browser/publish/emailview.py b/bika/lims/browser/publish/emailview.py index c63a68e7d1..93bb984544 100644 --- a/bika/lims/browser/publish/emailview.py +++ b/bika/lims/browser/publish/emailview.py @@ -444,10 +444,6 @@ def publish_samples(self): def publish(self, sample): """Set status to prepublished/published/republished """ - # publish partitions - for partition in sample.getDescendants(): - self.publish(partition) - wf = api.get_tool("portal_workflow") status = wf.getInfoFor(sample, "review_state") transitions = {"verified": "publish", diff --git a/bika/lims/browser/workflow/client.py b/bika/lims/browser/workflow/client.py index eb744d66d5..64dd237d1f 100644 --- a/bika/lims/browser/workflow/client.py +++ b/bika/lims/browser/workflow/client.py @@ -54,9 +54,6 @@ def get_sample_uids_in_report(self, report): def publish_sample(self, sample): """Set status to prepublished/published/republished """ - # publish partitions - for partition in sample.getDescendants(): - self.publish_sample(partition) status = api.get_workflow_status_of(sample) transitions = {"verified": "publish", "published": "republish"} transition = transitions.get(status, "prepublish") From 887159b10e03883cb58116afd46c93fdd4df3ab1 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Wed, 11 Sep 2019 18:22:30 +0200 Subject: [PATCH 6/7] Imports sorted for PEP8 --- bika/lims/workflow/analysisrequest/events.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/bika/lims/workflow/analysisrequest/events.py b/bika/lims/workflow/analysisrequest/events.py index 6b902f01c5..2e77a4c1ac 100644 --- a/bika/lims/workflow/analysisrequest/events.py +++ b/bika/lims/workflow/analysisrequest/events.py @@ -18,15 +18,19 @@ # Copyright 2018-2019 by it's authors. # Some rights reserved, see README and LICENSE. -from DateTime import DateTime from bika.lims import api +from bika.lims.interfaces import IAnalysisRequestPartition from bika.lims.interfaces import IDetachedPartition -from bika.lims.interfaces import IReceived, IVerified, IAnalysisRequestPartition +from bika.lims.interfaces import IReceived +from bika.lims.interfaces import IVerified from bika.lims.utils import changeWorkflowState from bika.lims.utils.analysisrequest import create_retest from bika.lims.workflow import get_prev_status_from_history -from bika.lims.workflow.analysisrequest import AR_WORKFLOW_ID, \ - do_action_to_descendants, do_action_to_analyses, do_action_to_ancestors +from bika.lims.workflow.analysisrequest import AR_WORKFLOW_ID +from bika.lims.workflow.analysisrequest import do_action_to_analyses +from bika.lims.workflow.analysisrequest import do_action_to_ancestors +from bika.lims.workflow.analysisrequest import do_action_to_descendants +from DateTime import DateTime from zope.interface import alsoProvides from zope.interface import noLongerProvides From ff74a4d6a9604b91bfda7574a53cd9e5963fd2c6 Mon Sep 17 00:00:00 2001 From: Ramon Bartl Date: Wed, 11 Sep 2019 18:34:10 +0200 Subject: [PATCH 7/7] Added after_prepublish event handler --- bika/lims/workflow/analysisrequest/events.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bika/lims/workflow/analysisrequest/events.py b/bika/lims/workflow/analysisrequest/events.py index 2e77a4c1ac..7eb6755d2f 100644 --- a/bika/lims/workflow/analysisrequest/events.py +++ b/bika/lims/workflow/analysisrequest/events.py @@ -97,6 +97,16 @@ def after_verify(analysis_request): do_action_to_descendants(analysis_request, "verify") +def after_prepublish(analysis_request): + """Method triggered after a 'prepublish' transition for the Analysis + Request passed in is performed. Performs the 'publish' transition to the + descendant partitions. + + Also see: https://github.com/senaite/senaite.core/pull/1428 + """ + do_action_to_descendants(analysis_request, "publish") + + def after_publish(analysis_request): """Method triggered after an 'publish' transition for the Analysis Request passed in is performed. Performs the 'publish' transition Publishes the