diff --git a/src/senaite/referral/adapters/listing/analyses.py b/src/senaite/referral/adapters/listing/analyses.py index f603e58..3aee849 100644 --- a/src/senaite/referral/adapters/listing/analyses.py +++ b/src/senaite/referral/adapters/listing/analyses.py @@ -22,7 +22,6 @@ from senaite.app.listing.interfaces import IListingViewAdapter from senaite.referral import check_installed from senaite.referral import messageFactory as _ -from senaite.referral.utils import get_services_mapping from zope.component import adapter from zope.interface import implementer @@ -148,17 +147,10 @@ def referring_services(self): referring laboratory, if any """ if self._referring_services is None: + self._referring_services = [] inbound_sample = self.context.getInboundSample() - if not inbound_sample: - self._referring_services = [] - return self._referring_services - - # Look up the uids of the requested services - services = get_services_mapping() - keywords = inbound_sample.getAnalyses() or [] - services_uids = map(lambda key: services.get(key), keywords) - self._referring_services = filter(api.is_uid, services_uids) - + if inbound_sample: + self._referring_services = inbound_sample.getRawServices() return self._referring_services @check_installed(None) diff --git a/src/senaite/referral/browser/workflow/analysisrequest.py b/src/senaite/referral/browser/workflow/analysisrequest.py index 7fa81fb..043ed15 100644 --- a/src/senaite/referral/browser/workflow/analysisrequest.py +++ b/src/senaite/referral/browser/workflow/analysisrequest.py @@ -19,6 +19,9 @@ # Some rights reserved, see README and LICENSE. from bika.lims.browser.workflow import RequestContextAware +from bika.lims.browser.workflow.analysisrequest import \ + WorkflowActionSaveAnalysesAdapter +from bika.lims.interfaces import IAnalysisRequest from bika.lims.interfaces import IWorkflowActionUIDsAdapter from zope.interface import implementer @@ -34,3 +37,21 @@ def __call__(self, action, uids): url = "{}/referral_ship_samples?uids={}".format(self.back_url, ",".join(uids)) return self.redirect(redirect_url=url) + + +class SaveAnalysesAdapter(WorkflowActionSaveAnalysesAdapter): + + def get_uids_from_request(self): + """Returns the UIDs from the request plus those from the analyses from + the inound shipment that were once requested, if any + """ + uids = super(SaveAnalysesAdapter, self).get_uids_from_request() + if not IAnalysisRequest.providedBy(self.context): + return uids + + inbound_sample = self.context.getInboundSample() + if not inbound_sample: + return uids + + uids.extend(inbound_sample.getRawServices()) + return list(set(uids)) diff --git a/src/senaite/referral/browser/workflow/configure.zcml b/src/senaite/referral/browser/workflow/configure.zcml index 572a183..702b7cc 100644 --- a/src/senaite/referral/browser/workflow/configure.zcml +++ b/src/senaite/referral/browser/workflow/configure.zcml @@ -26,4 +26,16 @@ provides="bika.lims.interfaces.IWorkflowActionAdapter" permission="zope.Public" /> + + +