From 1deb2c185876e0116480909dde887eab26bb607f Mon Sep 17 00:00:00 2001 From: Espurna Date: Mon, 24 Jul 2017 14:10:53 +0200 Subject: [PATCH 1/2] checking managers before return --- bika/lims/browser/analysisrequest/publish.py | 14 +++++++++++++- bika/lims/content/analysisrequest.py | 5 +++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/bika/lims/browser/analysisrequest/publish.py b/bika/lims/browser/analysisrequest/publish.py index 282f948ba4..2cd1e9cad0 100644 --- a/bika/lims/browser/analysisrequest/publish.py +++ b/bika/lims/browser/analysisrequest/publish.py @@ -721,7 +721,18 @@ def __call__(self, ar, overwrite=False): if not overwrite: # Prevent any error related with digest data = ar.getDigest() if hasattr(ar, 'getDigest') else '' - if data: + # Check if the department managers have changed since the + # verification: + saved_managers = data.get('managers', {}) + saved_managers_ids = set(saved_managers.get('ids', [])) + current_managers = self.context.getManagers() + current_managers_ids = set([man.getId() for man in + current_managers]) + # The symmetric difference of two sets A and B is the set of + # elements which are in either of the sets A or B but not in both. + are_differenet = saved_managers_ids.symmetric_difference( + current_managers_ids) + if data and len(are_differenet) == 0: # Seems that sometimes the 'obj' is wrong in the saved data. data['obj'] = ar return data @@ -732,6 +743,7 @@ def __call__(self, ar, overwrite=False): data = self._ar_data(ar) if hasattr(ar, 'setDigest'): ar.setDigest(data) + logger.info("=========== new data for %s created." % ar) return data def _schema_dict(self, instance, skip_fields=None, recurse=True): diff --git a/bika/lims/content/analysisrequest.py b/bika/lims/content/analysisrequest.py index b2ea3f8043..ada738ce3a 100644 --- a/bika/lims/content/analysisrequest.py +++ b/bika/lims/content/analysisrequest.py @@ -1838,7 +1838,6 @@ def getDefaultMemberDiscount(self): else: return "0.00" - security.declareProtected(View, 'getResponsible') def _getAnalysesNum(self): """ Return the amount of analyses verified/total in the current AR """ @@ -1852,6 +1851,8 @@ def _getAnalysesNum(self): total += 1 return verified,total + security.declareProtected(View, 'getResponsible') + def getResponsible(self): """ Return all manager info of responsible departments """ managers = {} @@ -1888,7 +1889,7 @@ def getResponsible(self): return mngr_info - security.declareProtected(View, 'getResponsible') + security.declareProtected(View, 'getManagers') def getManagers(self): """ Return all managers of responsible departments """ From 3104e8bc93e92f30397f7b9a656dcee46c0b0655 Mon Sep 17 00:00:00 2001 From: Espurna Date: Tue, 25 Jul 2017 10:01:27 +0200 Subject: [PATCH 2/2] requested changes --- bika/lims/browser/analysisrequest/publish.py | 35 +++++++++++--------- bika/lims/content/analysisrequest.py | 6 ++-- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/bika/lims/browser/analysisrequest/publish.py b/bika/lims/browser/analysisrequest/publish.py index 2cd1e9cad0..dc92f46dc5 100644 --- a/bika/lims/browser/analysisrequest/publish.py +++ b/bika/lims/browser/analysisrequest/publish.py @@ -720,22 +720,25 @@ def __call__(self, ar, overwrite=False): # if AR was previously digested, use existing data (if exists) if not overwrite: # Prevent any error related with digest - data = ar.getDigest() if hasattr(ar, 'getDigest') else '' - # Check if the department managers have changed since the - # verification: - saved_managers = data.get('managers', {}) - saved_managers_ids = set(saved_managers.get('ids', [])) - current_managers = self.context.getManagers() - current_managers_ids = set([man.getId() for man in - current_managers]) - # The symmetric difference of two sets A and B is the set of - # elements which are in either of the sets A or B but not in both. - are_differenet = saved_managers_ids.symmetric_difference( - current_managers_ids) - if data and len(are_differenet) == 0: - # Seems that sometimes the 'obj' is wrong in the saved data. - data['obj'] = ar - return data + data = ar.getDigest() if hasattr(ar, 'getDigest') else {} + if data: + # Check if the department managers have changed since + # verification: + saved_managers = data.get('managers', {}) + saved_managers_ids = set(saved_managers.get('ids', [])) + current_managers = self.context.getManagers() + current_managers_ids = set([man.getId() for man in + current_managers]) + # The symmetric difference of two sets A and B is the set of + # elements which are in either of the sets A or B but not + # in both. + are_different = saved_managers_ids.symmetric_difference( + current_managers_ids) + if len(are_different) == 0: + # Seems that sometimes the 'obj' is wrong in the saved + # data. + data['obj'] = ar + return data logger.info("=========== creating new data for %s" % ar) diff --git a/bika/lims/content/analysisrequest.py b/bika/lims/content/analysisrequest.py index ada738ce3a..55ea0a8e9d 100644 --- a/bika/lims/content/analysisrequest.py +++ b/bika/lims/content/analysisrequest.py @@ -1851,8 +1851,7 @@ def _getAnalysesNum(self): total += 1 return verified,total - security.declareProtected(View, 'getResponsible') - + @security.public def getResponsible(self): """ Return all manager info of responsible departments """ managers = {} @@ -1889,8 +1888,7 @@ def getResponsible(self): return mngr_info - security.declareProtected(View, 'getManagers') - + @security.public def getManagers(self): """ Return all managers of responsible departments """ manager_ids = []