def upgrade(tool): """ issue #948 requires permission updates """ portal = aq_parent(aq_inner(tool)) setup = portal.portal_setup typestool = getToolByName(portal, 'portal_types') # update affected tools setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') # re-import default permissions from bika.lims.setuphandlers import BikaGenerator gen = BikaGenerator() gen.setupPermissions(portal) return True
def upgrade(tool): portal = aq_parent(aq_inner(tool)) bc = getToolByName(portal, 'bika_catalog') bac = getToolByName(portal, 'bika_analysis_catalog') pc = getToolByName(portal, 'portal_catalog') portal = aq_parent(aq_inner(tool)) setup = portal.portal_setup wf = getToolByName(portal, 'portal_workflow') # Update all tools in which changes have been made setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') setup.runImportStepFromProfile('profile-bika.lims:default', 'repositorytool') setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow') setup.runImportStepFromProfile('profile-bika.lims:default', 'factorytool') setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') setup.runImportStepFromProfile('profile-bika.lims:default', 'portlets', run_dependencies=False) setup.runImportStepFromProfile('profile-bika.lims:default', 'viewlets') setup.runImportStepFromProfile('profile-plone.app.jquery:default', 'jsregistry') # Re-import the default permission maps gen = BikaGenerator() gen.setupPermissions(portal) logger.info("Updating workflow role/permission mappings") wf.updateRoleMappings() logger.info("Rebuilding portal_catalog") pc.clearFindAndRebuild() logger.info("Rebuilding bika_analysis_catalog") bac.clearFindAndRebuild() logger.info("Rebuilding bika_catalog") bc.clearFindAndRebuild() return True
def upgrade(tool): # Hack prevent out-of-date upgrading # Related: PR #1484 # https://github.com/bikalabs/Bika-LIMS/pull/1484 from bika.lims.upgrade import skip_pre315 if skip_pre315(aq_parent(aq_inner(tool))): return True portal = aq_parent(aq_inner(tool)) at = getToolByName(portal, 'archetype_tool') bc = getToolByName(portal, 'bika_catalog') bac = getToolByName(portal, 'bika_analysis_catalog') bsc = getToolByName(portal, 'bika_setup_catalog') pc = getToolByName(portal, 'portal_catalog') portal = aq_parent(aq_inner(tool)) portal_catalog = getToolByName(portal, 'portal_catalog') portal_groups = portal.portal_groups setup = portal.portal_setup typestool = getToolByName(portal, 'portal_types') wf = getToolByName(portal, 'portal_workflow') # Update all tools in which changes have been made setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') setup.runImportStepFromProfile('profile-bika.lims:default', 'repositorytool') setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow') setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') setup.runImportStepFromProfile('profile-bika.lims:default', 'factorytool') setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') setup.runImportStepFromProfile('profile-bika.lims:default', 'portlets', run_dependencies=False) setup.runImportStepFromProfile('profile-bika.lims:default', 'viewlets') setup.runImportStepFromProfile('profile-plone.app.jquery:default', 'jsregistry') # Add RegulatoryInspectors group and RegulatoryInspector role. # Fix permissions: LabClerks don't see analysis results role = 'RegulatoryInspector' group = 'RegulatoryInspectors' if role not in portal.acl_users.portal_role_manager.listRoleIds(): portal.acl_users.portal_role_manager.addRole(role) portal._addRole(role) if group not in portal_groups.listGroupIds(): portal_groups.addGroup('RegulatoryInspectors', title="Regulatory Inspectors", roles=[ 'Member', 'RegulatoryInspector', ]) else: portal_groups.setRolesForGroup('RegulatoryInspectors', [ 'Member', 'RegulatoryInspector', ]) # Add SampleConditions at.setCatalogsByType('SampleCondition', ['bika_setup_catalog']) if not portal['bika_setup'].get('bika_sampleconditions'): typestool.constructContent(type_name="SampleConditions", container=portal['bika_setup'], id='bika_sampleconditions', title='Sample Conditions') obj = portal['bika_setup']['bika_sampleconditions'] obj.unmarkCreationFlag() obj.reindexObject() # Add SampleCondition to all Sample objects proxies = portal_catalog(portal_type="Sample") samples = (proxy.getObject() for proxy in proxies) for sample in samples: sample.setSampleCondition(None) # Some catalog indexes were added or modified if 'getSampleTypeTitle' in bc.indexes(): bc.delIndex('getSampleTypeTitle') if 'getSamplePointTitle' in bc.indexes(): bc.delIndex('getSamplePointTitle') bc.addIndex('getSampleTypeTitle', 'KeywordIndex') bc.addIndex('getSamplePointTitle', 'KeywordIndex') if 'getClientSampleID' not in pc.indexes(): pc.addIndex('getClientSampleID', 'FieldIndex') pc.addColumn('getClientSampleID') if 'getParentUID' not in pc.indexes(): pc.addIndex('getParentUID', 'FieldIndex') pc.addColumn('getParentUID') if 'getReferenceAnalysesGroupID' not in bac.indexes(): bac.addIndex('getReferenceAnalysesGroupID', 'FieldIndex') bac.addColumn('getReferenceAnalysesGroupID') # Fix broken template partition containers for p in bsc(portal_type='ARTemplate'): o = p.getObject() parts = o.getPartitions() for i, part in enumerate(parts): if 'container_uid' in part: container = bsc(portal_type='Container', UID=part['container_uid']) if container: container = container[0].getObject() parts[i]['Container'] = container.Title() if 'preservation_uid' in p: preservation = bsc(portal_type='Preservation', UID=part['preservation_uid']) if preservation: preservation = preservation[0].getObject() parts[i]['Preservation'] = preservation.Title() # Populate ReferenceAnalysesGroupIDs for ReferenceAnalyses # https://github.com/bikalabs/Bika-LIMS/issues/931 wss = bc(portal_type='Worksheet') for ws in wss: ws = ws.getObject() wsangroups = {} codes = {} # Reference Analyses (not duplicates) refanalyses = [ an for an in ws.getAnalyses() if an.portal_type == 'ReferenceAnalysis' or an.portal_type == 'DuplicateAnalysis' ] layout = ws.getLayout() for lay in layout: for an in refanalyses: if lay['analysis_uid'] == an.UID(): position = lay['position'] if position not in wsangroups.keys(): wsangroups[position] = [] wsangroups[position].append(an) for position, wsgroup in wsangroups.iteritems(): analysis = wsgroup[0] if analysis.portal_type == 'ReferenceAnalysis': refsampleid = wsgroup[0].aq_parent.id else: # Duplicate _analysis = wsgroup[0].getAnalysis() if _analysis.portal_type == 'ReferenceAnalysis': refsampleid = _analysis.aq_parent.id else: refsampleid = wsgroup[0].getSamplePartition().id codre = refsampleid codws = '%s_%s' % (refsampleid, ws.UID()) codgr = '%s_%s_%s' % (refsampleid, ws.UID(), position) if codgr in codes.keys(): postfix = codes[codgr] elif codws in codes.keys(): postfix = codes[codws] codes[codgr] = postfix codes[codws] = postfix + 1 elif codre in codes.keys(): postfix = codes[codre] codes[codgr] = postfix codes[codws] = postfix + 1 codes[codre] = postfix + 1 else: postfix = 1 codes[codre] = postfix + 1 for an in wsgroup: if an.portal_type == 'DuplicateAnalysis': postfix = str(postfix).zfill(int(2)) refgid = '%s-D%s' % (refsampleid, postfix) else: postfix = str(postfix).zfill(int(3)) refgid = '%s-%s' % (refsampleid, postfix) an.setReferenceAnalysesGroupID(refgid) # Re-import the default permission maps gen = BikaGenerator() gen.setupPermissions(portal) logger.info("Updating workflow role/permission mappings") wf.updateRoleMappings() logger.info("Reindex added indexes in portal_catalog") pc.manage_reindexIndex(ids=[ 'getClientSampleID', 'getParentUID', ]) logger.info("Reindex added indexes in bika_analysis_catalog") bac.manage_reindexIndex(ids=[ 'getReferenceAnalysesGroupID', ]) logger.info("Reindex added indexes in bika_catalog") bc.manage_reindexIndex(ids=[ 'getSampleTypeTitle', 'getSamplePointTitle', ]) return True