diff --git a/bika/lims/browser/worksheet/views/add_analyses.py b/bika/lims/browser/worksheet/views/add_analyses.py index ee9542caea..cf639f845d 100644 --- a/bika/lims/browser/worksheet/views/add_analyses.py +++ b/bika/lims/browser/worksheet/views/add_analyses.py @@ -14,6 +14,7 @@ from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile from zope.interface import implements from bika.lims.catalog import CATALOG_ANALYSIS_LISTING +from bika.lims.config import PRIORITIES from bika.lims import bikaMessageFactory as _ from bika.lims import EditResults, EditWorksheet, ManageWorksheets from bika.lims import PMF, logger @@ -49,6 +50,10 @@ def __init__(self, context, request): self.pagesize = 50 self.columns = { + 'Priority': { + 'title': '', + 'sortable': True, + 'index': 'getPrioritySortkey' }, 'Client': { 'title': _('Client'), 'attr': 'getClientTitle', @@ -82,7 +87,8 @@ def __init__(self, context, request): 'title': _('All'), 'contentFilter': {}, 'transitions': [{'id':'assign'}, ], - 'columns':['Client', + 'columns':['Priority', + 'Client', 'getClientOrderNumber', 'getRequestID', 'CategoryTitle', @@ -211,6 +217,16 @@ def folderitem(self, obj, item, index): t(_("Late Analysis"))) if self.hideclientlink: del item['replace']['Client'] + # Add Priority column + priority_sort_key = obj.getPrioritySortkey + if not priority_sort_key: + # Default priority is Medium = 3. + # The format of PrioritySortKey is . + priority_sort_key = '3.%s' % obj.created.ISO8601() + priority = priority_sort_key.split('.')[0] + priority_text = PRIORITIES.getValue(priority) + priority_div = '
%s
' + item['replace']['Priority'] = priority_div % (priority, priority_text) return item def getServices(self): diff --git a/bika/lims/content/abstractroutineanalysis.py b/bika/lims/content/abstractroutineanalysis.py index 33c745183b..d08c537678 100644 --- a/bika/lims/content/abstractroutineanalysis.py +++ b/bika/lims/content/abstractroutineanalysis.py @@ -413,6 +413,17 @@ def getDependencies(self): dependencies.append(sibling) return dependencies + @security.public + def getPrioritySortkey(self): + """ + Returns the key that will be used to sort the current Analysis + Delegates to getPrioritySortKey function from the AnalysisRequest + :return: string used for sorting + """ + analysis_request = self.getRequest() + if analysis_request: + return analysis_request.getPrioritySortkey() + @security.public def setReflexAnalysisOf(self, analysis): """Sets the analysis that has been reflexed in order to create this diff --git a/bika/lims/content/analysisrequest.py b/bika/lims/content/analysisrequest.py index b606ccd366..28a10ef3f9 100644 --- a/bika/lims/content/analysisrequest.py +++ b/bika/lims/content/analysisrequest.py @@ -34,6 +34,7 @@ from bika.lims.browser.widgets import PrioritySelectionWidget from bika.lims.browser.widgets import SelectionWidget from bika.lims.browser.widgets import SelectionWidget as BikaSelectionWidget +from bika.lims.catalog import CATALOG_ANALYSIS_LISTING from bika.lims.config import PROJECTNAME from bika.lims.config import PRIORITIES from bika.lims.content.bikaschema import BikaSchema @@ -2963,6 +2964,7 @@ def getDateVerified(self): """ return getTransitionDate(self, 'verify', return_as_datetime=True) + @security.public def getPrioritySortkey(self): """ Returns the key that will be used to sort the current Analysis Request @@ -2974,6 +2976,25 @@ def getPrioritySortkey(self): created_date = self.created().ISO8601() return '%s.%s' % (priority, created_date) + @security.public + def setPriority(self, value): + if not value: + value = self.Schema().getField('Priority').getDefault(self) + self.Schema().getField('Priority').set(self, value) + self._reindexAnalyses(['getPrioritySortkey'], True) + + @security.private + def _reindexAnalyses(self, idxs=None, update_metadata=False): + if not idxs and not update_metadata: + return + if not idxs: + idxs = [] + analyses = self.getAnalyses() + catalog = getToolByName(self, CATALOG_ANALYSIS_LISTING) + for analysis in analyses: + analysis_obj = analysis.getObject() + catalog.reindexObject(analysis_obj, idxs=idxs, update_metadata=1) + def _getCreatorFullName(self): """ Returns the full name of this analysis request's creator. diff --git a/bika/lims/upgrade/v3_2_0_1708.py b/bika/lims/upgrade/v3_2_0_1708.py index 7eb0fcb7f5..31145322f2 100644 --- a/bika/lims/upgrade/v3_2_0_1708.py +++ b/bika/lims/upgrade/v3_2_0_1708.py @@ -44,6 +44,9 @@ def upgrade(tool): # Add missing Priority Index and Column to AR Catalog ut.addIndexAndColumn(CATALOG_ANALYSIS_REQUEST_LISTING, 'getPrioritySortkey', 'FieldIndex') + ut.addIndexAndColumn(CATALOG_ANALYSIS_LISTING, + 'getPrioritySortkey', 'FieldIndex') + ut.refreshCatalogs() logger.info("{0} upgraded to version {1}".format(product, version))