From 148d2e0c959a1fe41bfbd7554f23fc836ee3b1fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Fri, 13 Oct 2017 17:44:33 +0200 Subject: [PATCH] Migrate Bika LIMS v3.2.0.1710 to Bika LIMS Evo 1.0.0 --- CHANGES.rst | 4 +- bika/lims/profiles.zcml | 2 +- bika/lims/profiles/default/metadata.xml | 2 +- bika/lims/upgrade/configure.zcml | 626 +---------------- bika/lims/upgrade/to1010.py | 109 --- bika/lims/upgrade/to1100.py | 61 -- bika/lims/upgrade/to1101.py | 38 - bika/lims/upgrade/to1102.py | 109 --- bika/lims/upgrade/to3000.py | 192 ------ bika/lims/upgrade/to3001.py | 40 -- bika/lims/upgrade/to3002.py | 69 -- bika/lims/upgrade/to3003.py | 32 - bika/lims/upgrade/to3004.py | 23 - bika/lims/upgrade/to3005.py | 27 - bika/lims/upgrade/to3006.py | 30 - bika/lims/upgrade/to3007.py | 27 - bika/lims/upgrade/to3008.py | 60 -- bika/lims/upgrade/to3009.py | 28 - bika/lims/upgrade/to3010.py | 59 -- bika/lims/upgrade/to3011.py | 29 - bika/lims/upgrade/to3012.py | 27 - bika/lims/upgrade/to3013.py | 41 -- bika/lims/upgrade/to3014.py | 28 - bika/lims/upgrade/to3015.py | 40 -- bika/lims/upgrade/to3016.py | 51 -- bika/lims/upgrade/to3017.py | 29 - bika/lims/upgrade/to3018.py | 45 -- bika/lims/upgrade/to3019.py | 33 - bika/lims/upgrade/to3020.py | 33 - bika/lims/upgrade/to3021.py | 27 - bika/lims/upgrade/to3022.py | 61 -- bika/lims/upgrade/to3023.py | 43 -- bika/lims/upgrade/to3024.py | 30 - bika/lims/upgrade/to3025.py | 29 - bika/lims/upgrade/to3026.py | 23 - bika/lims/upgrade/to3027.py | 22 - bika/lims/upgrade/to3028.py | 28 - bika/lims/upgrade/to3029.py | 39 -- bika/lims/upgrade/to3030.py | 39 -- bika/lims/upgrade/to3031.py | 36 - bika/lims/upgrade/to3032.py | 25 - bika/lims/upgrade/to3033.py | 22 - bika/lims/upgrade/to3034.py | 33 - bika/lims/upgrade/to3035.py | 32 - bika/lims/upgrade/to3036.py | 36 - bika/lims/upgrade/to3037.py | 38 - bika/lims/upgrade/to3038.py | 28 - bika/lims/upgrade/to3039.py | 28 - bika/lims/upgrade/to3040.py | 32 - bika/lims/upgrade/to3041.py | 34 - bika/lims/upgrade/to3042.py | 27 - bika/lims/upgrade/to3043.py | 30 - bika/lims/upgrade/to3044.py | 26 - bika/lims/upgrade/to3045.py | 43 -- bika/lims/upgrade/to3046.py | 27 - bika/lims/upgrade/to3047.py | 27 - bika/lims/upgrade/to3048.py | 27 - bika/lims/upgrade/to3049.py | 46 -- bika/lims/upgrade/to3050.py | 56 -- bika/lims/upgrade/to3051.py | 35 - bika/lims/upgrade/to3052.py | 34 - bika/lims/upgrade/to3053.py | 29 - bika/lims/upgrade/to3110.py | 69 -- bika/lims/upgrade/to3111.py | 84 --- bika/lims/upgrade/to317.py | 50 -- bika/lims/upgrade/to318.py | 58 -- bika/lims/upgrade/to319.py | 117 ---- bika/lims/upgrade/to320.py | 485 ------------- bika/lims/upgrade/v01_00_000.py | 34 + bika/lims/upgrade/v3_2_0_1704.py | 42 -- bika/lims/upgrade/v3_2_0_1705.py | 876 ------------------------ bika/lims/upgrade/v3_2_0_1706.py | 128 ---- bika/lims/upgrade/v3_2_0_1707.py | 191 ------ bika/lims/upgrade/v3_2_0_1708.py | 87 --- bika/lims/upgrade/v3_2_0_1709.py | 70 -- setup.py | 10 +- 76 files changed, 52 insertions(+), 5235 deletions(-) delete mode 100644 bika/lims/upgrade/to1010.py delete mode 100644 bika/lims/upgrade/to1100.py delete mode 100644 bika/lims/upgrade/to1101.py delete mode 100644 bika/lims/upgrade/to1102.py delete mode 100644 bika/lims/upgrade/to3000.py delete mode 100644 bika/lims/upgrade/to3001.py delete mode 100644 bika/lims/upgrade/to3002.py delete mode 100644 bika/lims/upgrade/to3003.py delete mode 100644 bika/lims/upgrade/to3004.py delete mode 100644 bika/lims/upgrade/to3005.py delete mode 100644 bika/lims/upgrade/to3006.py delete mode 100644 bika/lims/upgrade/to3007.py delete mode 100644 bika/lims/upgrade/to3008.py delete mode 100644 bika/lims/upgrade/to3009.py delete mode 100644 bika/lims/upgrade/to3010.py delete mode 100644 bika/lims/upgrade/to3011.py delete mode 100644 bika/lims/upgrade/to3012.py delete mode 100644 bika/lims/upgrade/to3013.py delete mode 100644 bika/lims/upgrade/to3014.py delete mode 100644 bika/lims/upgrade/to3015.py delete mode 100644 bika/lims/upgrade/to3016.py delete mode 100644 bika/lims/upgrade/to3017.py delete mode 100644 bika/lims/upgrade/to3018.py delete mode 100644 bika/lims/upgrade/to3019.py delete mode 100644 bika/lims/upgrade/to3020.py delete mode 100644 bika/lims/upgrade/to3021.py delete mode 100644 bika/lims/upgrade/to3022.py delete mode 100644 bika/lims/upgrade/to3023.py delete mode 100644 bika/lims/upgrade/to3024.py delete mode 100644 bika/lims/upgrade/to3025.py delete mode 100644 bika/lims/upgrade/to3026.py delete mode 100644 bika/lims/upgrade/to3027.py delete mode 100644 bika/lims/upgrade/to3028.py delete mode 100644 bika/lims/upgrade/to3029.py delete mode 100644 bika/lims/upgrade/to3030.py delete mode 100644 bika/lims/upgrade/to3031.py delete mode 100644 bika/lims/upgrade/to3032.py delete mode 100644 bika/lims/upgrade/to3033.py delete mode 100644 bika/lims/upgrade/to3034.py delete mode 100644 bika/lims/upgrade/to3035.py delete mode 100644 bika/lims/upgrade/to3036.py delete mode 100644 bika/lims/upgrade/to3037.py delete mode 100644 bika/lims/upgrade/to3038.py delete mode 100644 bika/lims/upgrade/to3039.py delete mode 100644 bika/lims/upgrade/to3040.py delete mode 100644 bika/lims/upgrade/to3041.py delete mode 100644 bika/lims/upgrade/to3042.py delete mode 100644 bika/lims/upgrade/to3043.py delete mode 100644 bika/lims/upgrade/to3044.py delete mode 100644 bika/lims/upgrade/to3045.py delete mode 100644 bika/lims/upgrade/to3046.py delete mode 100644 bika/lims/upgrade/to3047.py delete mode 100644 bika/lims/upgrade/to3048.py delete mode 100644 bika/lims/upgrade/to3049.py delete mode 100644 bika/lims/upgrade/to3050.py delete mode 100644 bika/lims/upgrade/to3051.py delete mode 100644 bika/lims/upgrade/to3052.py delete mode 100644 bika/lims/upgrade/to3053.py delete mode 100644 bika/lims/upgrade/to3110.py delete mode 100644 bika/lims/upgrade/to3111.py delete mode 100644 bika/lims/upgrade/to317.py delete mode 100644 bika/lims/upgrade/to318.py delete mode 100644 bika/lims/upgrade/to319.py delete mode 100644 bika/lims/upgrade/to320.py create mode 100644 bika/lims/upgrade/v01_00_000.py delete mode 100644 bika/lims/upgrade/v3_2_0_1704.py delete mode 100644 bika/lims/upgrade/v3_2_0_1705.py delete mode 100644 bika/lims/upgrade/v3_2_0_1706.py delete mode 100644 bika/lims/upgrade/v3_2_0_1707.py delete mode 100644 bika/lims/upgrade/v3_2_0_1708.py delete mode 100644 bika/lims/upgrade/v3_2_0_1709.py diff --git a/CHANGES.rst b/CHANGES.rst index 170a73a515..7bc7e5b2bd 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,8 +1,8 @@ Changelog ========= -3.2.0.1710 (2017-10-13) ------------------------ +1.0.0 (2017-10-13) +------------------ **Added** diff --git a/bika/lims/profiles.zcml b/bika/lims/profiles.zcml index 08033f5d43..18f67b51ff 100644 --- a/bika/lims/profiles.zcml +++ b/bika/lims/profiles.zcml @@ -5,7 +5,7 @@ diff --git a/bika/lims/profiles/default/metadata.xml b/bika/lims/profiles/default/metadata.xml index 00bcf36b31..6c0285ba32 100644 --- a/bika/lims/profiles/default/metadata.xml +++ b/bika/lims/profiles/default/metadata.xml @@ -1,6 +1,6 @@ - 3.2.0.1710 + 1.0.0 profile-jarn.jsi18n:default profile-Products.ATExtensions:default diff --git a/bika/lims/upgrade/configure.zcml b/bika/lims/upgrade/configure.zcml index 678905fc87..e6d28a7991 100644 --- a/bika/lims/upgrade/configure.zcml +++ b/bika/lims/upgrade/configure.zcml @@ -4,625 +4,17 @@ i18n_domain="bika"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + title="Upgrade to Bika LIMS Evo 1.0.0" + source="3.2.0.1710" + destination="1.0.0" + handler="bika.lims.upgrade.v01_00_000.upgrade" + profile="bika.lims:default"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bika/lims/upgrade/to1010.py b/bika/lims/upgrade/to1010.py deleted file mode 100644 index ed0ddb1a70..0000000000 --- a/bika/lims/upgrade/to1010.py +++ /dev/null @@ -1,109 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -import logging - -from Acquisition import aq_base -from Acquisition import aq_inner -from Acquisition import aq_parent - -from Products.CMFCore import permissions -from bika.lims.permissions import * - -from Products.CMFCore.utils import getToolByName - - -def addBatches(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)) - portal_catalog = getToolByName(portal, 'portal_catalog') - typestool = getToolByName(portal, 'portal_types') - workflowtool = getToolByName(portal, 'portal_workflow') - setup = portal.portal_setup - - # reimport Types Tool to add BatchFolder and Batch - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - - # Changes to the catalogs - at = getToolByName(portal, 'archetype_tool') - at.setCatalogsByType('Batch', ['bika_catalog', ]) - at.setCatalogsByType('BatchLabel', ['bika_setup_catalog', ]) - bc = getToolByName(portal, 'bika_catalog') - - # Add the BatchFolder at /batches - typestool.constructContent(type_name="BatchFolder", - container=portal, - id='batches', - title='Batches') - obj = portal['batches'] - obj.unmarkCreationFlag() - obj.reindexObject() - - # and place it after ClientFolder - portal.moveObjectToPosition('batches', portal.objectIds().index('clients')) - - # add Batch to all AnalysisRequest objects. - proxies = portal_catalog(portal_type="AnalysiRequest") - ars = (proxy.getObject() for proxy in proxies) - for ar in ars: - ar.setBatch(None) - - # reimport Workflows to add bika_batch_workflow - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow') - - # reimport jsregistry.xml to add batch.js - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - # reimport factorytool to add batch.js - setup.runImportStepFromProfile('profile-bika.lims:default', 'factorytool') - - # add new types not to list in nav - # Batch - portal_properties = getToolByName(portal, 'portal_properties') - ntp = getattr(portal_properties, 'navtree_properties') - types = list(ntp.getProperty('metaTypesNotToList')) - types.append("Batch") - types.append("BatchLabel") - ntp.manage_changeProperties(MetaTypesNotToQuery=types) - - # Add Prefix for new type - prefixes = portal.bika_setup.getPrefixes() - if 'Batch' not in [p['portal_type'] for p in prefixes]: - prefixes.append({'portal_type':'Batch', 'prefix':'B', 'padding':'3'}) - - - # batch permission defaults - mp = portal.manage_permission - mp(AddBatch, ['Manager', 'Owner', 'LabManager', 'LabClerk'], 1) - - # /batches folder permissions - mp = portal.batches.manage_permission - mp(CancelAndReinstate, ['Manager', 'LabManager', 'LabClerk'], 0) - mp(permissions.ListFolderContents, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Authenticated'], 0) - mp(permissions.AddPortalContent, ['Manager', 'LabManager', 'LabClerk', 'Analyst'], 0) - mp(permissions.View, ['Manager', 'LabManager', 'LabClerk', 'Analyst'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Authenticated'], 0) - mp(permissions.DeleteObjects, ['Manager', 'LabManager', 'Owner'], 0) - portal.batches.reindexObject() - - # bug fix - view perms on bika_setup should be easier - mp = portal.bika_setup.manage_permission - mp('Access contents information', ['Authenticated'], 1) - mp(permissions.View, ['Authenticated'], 1) - portal.bika_setup.reindexObject() - mp = portal.bika_setup.laboratory.manage_permission - mp('Access contents information', ['Authenticated'], 1) - mp(permissions.View, ['Authenticated'], 1) - portal.bika_setup.laboratory.reindexObject() - - return True diff --git a/bika/lims/upgrade/to1100.py b/bika/lims/upgrade/to1100.py deleted file mode 100644 index 81d8dabd23..0000000000 --- a/bika/lims/upgrade/to1100.py +++ /dev/null @@ -1,61 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -import logging - -from Acquisition import aq_base -from Acquisition import aq_inner -from Acquisition import aq_parent - -from Products.CMFCore import permissions -from bika.lims.permissions import * - -from Products.CMFCore.utils import getToolByName - - -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)) - portal_catalog = getToolByName(portal, 'portal_catalog') - typestool = getToolByName(portal, 'portal_types') - workflowtool = getToolByName(portal, 'portal_workflow') - setup = portal.portal_setup - - # Changes to the catalogs - at = getToolByName(portal, 'archetype_tool') - at.setCatalogsByType('Batch', ['bika_catalog', 'portal_catalog']) - at.setCatalogsByType('AnalysisRequest', ['bika_catalog', 'portal_catalog']) - at.setCatalogsByType('Sample', ['bika_catalog', 'portal_catalog']) - at.setCatalogsByType('SamplePartition', ['bika_catalog', 'portal_catalog']) - at.setCatalogsByType('ReferenceSample', ['bika_catalog', 'portal_catalog']) - at.setCatalogsByType('Report', ['bika_catalog', 'portal_catalog']) - at.setCatalogsByType('Worksheet', ['bika_catalog', 'portal_catalog']) - - at.setCatalogsByType('AnalysisService', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('SampleType', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('SamplePoint', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('Instrument', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('Method', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('Calculation', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('AnalysisProfile', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('ARTemplate', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('LabProduct', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('LabContact', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('ReferenceManufacturer', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('ReferenceSupplier', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('ReferenceDefinition', ['bika_setup_catalog', 'portal_catalog']) - at.setCatalogsByType('WorksheetTemplate', ['bika_setup_catalog', 'portal_catalog']) - - portal_catalog.clearFindAndRebuild() - - return True diff --git a/bika/lims/upgrade/to1101.py b/bika/lims/upgrade/to1101.py deleted file mode 100644 index d023500cf9..0000000000 --- a/bika/lims/upgrade/to1101.py +++ /dev/null @@ -1,38 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -import logging - -from Acquisition import aq_base -from Acquisition import aq_inner -from Acquisition import aq_parent - -from Products.CMFCore import permissions -from bika.lims.permissions import * - -from Products.CMFCore.utils import getToolByName - - -def upgrade(tool): - """ - issue #615: missing configuration for some add permissions - """ - # 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)) - - # batch permission defaults - mp = portal.manage_permission - mp(AddAnalysisSpec, ['Manager', 'Owner', 'LabManager', 'LabClerk'], 1) - mp(AddSamplingDeviation, ['Manager', 'Owner', 'LabManager', 'LabClerk'], 1) - mp(AddSampleMatrix, ['Manager', 'Owner', 'LabManager', 'LabClerk'], 1) - portal.reindexObject() - - return True diff --git a/bika/lims/upgrade/to1102.py b/bika/lims/upgrade/to1102.py deleted file mode 100644 index c5a79dd45f..0000000000 --- a/bika/lims/upgrade/to1102.py +++ /dev/null @@ -1,109 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_base -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * -from Products.Archetypes import PloneMessageFactory as _p -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName - -import logging - - -class Empty: - pass - - -def upgrade(tool): - """ - issue #623, #583, ... - """ - # 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)) - setup = portal.portal_setup - typestool = getToolByName(portal, 'portal_types') - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - 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', - 'propertiestool') - setup.runImportStepFromProfile('profile-bika.lims:default', - 'plone.app.registry') - - # Changes to the catalogs - # create lexicon - wordSplitter = Empty() - wordSplitter.group = 'Word Splitter' - wordSplitter.name = 'Unicode Whitespace splitter' - caseNormalizer = Empty() - caseNormalizer.group = 'Case Normalizer' - caseNormalizer.name = 'Unicode Case Normalizer' - stopWords = Empty() - stopWords.group = 'Stop Words' - stopWords.name = 'Remove listed and single char words' - zc_extras = Empty() - zc_extras.index_type = 'Okapi BM25 Rank' - zc_extras.lexicon_id = 'Lexicon' - # then add indexes - bc = getToolByName(portal, 'bika_catalog') - bc.addIndex('getContactTitle', 'FieldIndex', zc_extras) - bc.addIndex('getClientTitle', 'FieldIndex', zc_extras) - bc.addIndex('getProfileTitle', 'FieldIndex', zc_extras) - bc.addIndex('getAnalysisCategory', 'KeywordIndex') - bc.addIndex('getAnalysisService', 'KeywordIndex') - bc.addIndex('getAnalysts', 'KeywordIndex') - - bc.clearFindAndRebuild() - - # add new types not to list in nav - # AnalysisRequestQuery and QueryFolder (listed in portal_tabs already) - portal_properties = getToolByName(portal, 'portal_properties') - ntp = getattr(portal_properties, 'navtree_properties') - types = list(ntp.getProperty('metaTypesNotToList')) - types.append("AnalysisRequestQuery") - types.append("QueryFolder") - ntp.manage_changeProperties(MetaTypesNotToQuery=types) - - # Add /queries folder - typestool.constructContent(type_name="QueryFolder", - container=portal, - id='queries', - title='Queries') - obj = portal['queries'] - obj.unmarkCreationFlag() - obj.reindexObject() - - # /queries folder permissions - mp = portal.queries.manage_permission - mp(permissions.ListFolderContents, ['Manager', 'LabManager', - 'LabClerk', 'Analyst'], 0) - mp(permissions.AddPortalContent, ['Manager', 'LabManager', - 'LabClerk', 'Analyst'], 0) - mp(permissions.View, ['Manager', 'LabManager', - 'LabClerk', 'Analyst'], 0) - mp('Access contents information', ['Manager', 'LabManager', - 'LabClerk', 'Analyst'], 0) - mp(permissions.DeleteObjects, ['Manager'], 0) - portal.queries.reindexObject() - - # idserver prefix for AnalysisRequestQuery - prefixes = portal.bika_setup.getPrefixes() - if [x for x in prefixes if x['portal_type'] == 'AnalysisRequestQuery']: - prefixes.append({'portal_type': 'AnalysisRequestQuery', - 'prefix': 'query-', 'padding': '4'}) - portal.bika_setup.setPrefixes(prefixes) - - return True diff --git a/bika/lims/upgrade/to3000.py b/bika/lims/upgrade/to3000.py deleted file mode 100644 index cdf6114cc9..0000000000 --- a/bika/lims/upgrade/to3000.py +++ /dev/null @@ -1,192 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -"""Upgrades an instance from rc3.4 (1104) to v3 (3000).""" - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import * -from bika.lims.setuphandlers import BikaGenerator -from bika.lims import logger - -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 diff --git a/bika/lims/upgrade/to3001.py b/bika/lims/upgrade/to3001.py deleted file mode 100644 index e269e20cf1..0000000000 --- a/bika/lims/upgrade/to3001.py +++ /dev/null @@ -1,40 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName - - -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)) - setup = portal.portal_setup - - mp = portal.bika_setup.manage_permission - mp('Access contents information', ['Authenticated', 'Analyst'], 1) - mp(permissions.View, ['Authenticated', 'Analyst'], 1) - portal.bika_setup.reindexObject() - - for obj in portal.bika_setup.bika_analysisservices.objectValues(): - mp = obj.manage_permission - mp(permissions.View, ['Manager', 'LabManager', 'Analyst'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'Member', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'Owner'], 0) - obj.reindexObject() - - wf = getToolByName(portal, 'portal_workflow') - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - wf.updateRoleMappings() - - return True diff --git a/bika/lims/upgrade/to3002.py b/bika/lims/upgrade/to3002.py deleted file mode 100644 index bcb5978c3c..0000000000 --- a/bika/lims/upgrade/to3002.py +++ /dev/null @@ -1,69 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import AddAttachment - - -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)) - setup = portal.portal_setup - - # Add new Client role - role = "Client" - if role not in portal.acl_users.portal_role_manager.listRoleIds(): - portal.acl_users.portal_role_manager.addRole(role) - portal._addRole(role) - - # Add the role Client role to Clients group - portal.portal_groups.editGroup('Clients', roles=['Member', - 'Authenticated', - 'Client']) - - # Add all Client contacts to Clients group - for client in portal.clients.values(): - for contact in client.getContacts(): - user = portal.portal_membership.getMemberById(contact.getUsername()) - if user is not None: - portal.portal_groups.addPrincipalToGroup(user.getUserName(), - "Clients") - - # Add AddAttachment permission to Clients - mp = portal.manage_permission - mp(AddAttachment, ['Manager', 'LabManager', 'Owner' 'Analyst', 'LabClerk', 'Client', 'Sampler'], 0) - - # Add Analysis Services View permission to Clients - mp = portal.bika_setup.bika_analysisservices.manage_permission - mp('Access contents information', ['Authenticated', 'Analyst', 'Client'], 1) - mp(permissions.View, ['Authenticated', 'Analyst', 'Client'], 1) - portal.bika_setup.bika_analysisservices.reindexObject() - for obj in portal.bika_setup.bika_analysisservices.objectValues(): - mp = obj.manage_permission - mp(permissions.View, ['Manager', 'LabManager', 'Analyst', 'Client'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'Member', 'LabClerk', 'Analyst', 'Client', 'Sampler', 'Preserver', 'Owner'], 0) - obj.reindexObject() - - # Grant AttachmentType view access to Clients - mp = portal.bika_setup.bika_attachmenttypes.manage_permission - mp('Access contents information', ['Authenticated', 'Analyst', 'Client'], 1) - mp(permissions.View, ['Authenticated', 'Analyst', 'Client'], 1) - portal.bika_setup.bika_attachmenttypes.reindexObject() - - - wf = getToolByName(portal, 'portal_workflow') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - wf.updateRoleMappings() - - return True diff --git a/bika/lims/upgrade/to3003.py b/bika/lims/upgrade/to3003.py deleted file mode 100644 index dd59b2201f..0000000000 --- a/bika/lims/upgrade/to3003.py +++ /dev/null @@ -1,32 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName - - -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)) - setup = portal.portal_setup - - mp = portal.bika_setup.manage_permission - mp('Access contents information', ['Authenticated', 'Analyst', 'LabClerk'], 1) - mp(permissions.View, ['Authenticated', 'Analyst', 'LabClerk'], 1) - portal.bika_setup.reindexObject() - - for obj in portal.bika_setup.bika_analysisservices.objectValues(): - mp = obj.manage_permission - mp(permissions.View, ['Manager', 'LabManager', 'Analyst', 'LabClerk'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'Member', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'Owner'], 0) - obj.reindexObject() diff --git a/bika/lims/upgrade/to3004.py b/bika/lims/upgrade/to3004.py deleted file mode 100644 index 403f0100bb..0000000000 --- a/bika/lims/upgrade/to3004.py +++ /dev/null @@ -1,23 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent - - -def upgrade(tool): - """ Re-import types tool to add condition for sample/partitions view - """ - # 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)) - setup = portal.portal_setup - - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') diff --git a/bika/lims/upgrade/to3005.py b/bika/lims/upgrade/to3005.py deleted file mode 100644 index 67775727fd..0000000000 --- a/bika/lims/upgrade/to3005.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -def upgrade(tool): - """Added D3.js library and D3 Control-chart for Instrument QC - """ - # 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)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - return True diff --git a/bika/lims/upgrade/to3006.py b/bika/lims/upgrade/to3006.py deleted file mode 100644 index 935d2ffc3c..0000000000 --- a/bika/lims/upgrade/to3006.py +++ /dev/null @@ -1,30 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -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 - - """Simple imports for missing PricelistFolder view - mimics bika2 behaviour faithfully - """ - - portal = aq_parent(aq_inner(tool)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - - return True diff --git a/bika/lims/upgrade/to3007.py b/bika/lims/upgrade/to3007.py deleted file mode 100644 index ed349dd2c6..0000000000 --- a/bika/lims/upgrade/to3007.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -def upgrade(tool): - """Added bika.lims.loader.js and bika.lims.method.edit.js - """ - # 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)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - return True diff --git a/bika/lims/upgrade/to3008.py b/bika/lims/upgrade/to3008.py deleted file mode 100644 index e2a85c4c89..0000000000 --- a/bika/lims/upgrade/to3008.py +++ /dev/null @@ -1,60 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from Products.Archetypes.config import REFERENCE_CATALOG - -def upgrade(tool): - """Added bika.lims.analysisservice.edit.js - """ - # 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)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - # apply new method/calculation data to old Analysis Services - portal = aq_parent(aq_inner(tool)) - pc = getToolByName(portal, 'portal_catalog') - bsc = getToolByName(portal, 'bika_setup_catalog') - rc=getToolByName(portal, REFERENCE_CATALOG) - proxies = pc(portal_type="AnalysisService") - for proxy in proxies: - an = proxy.getObject() - rels = an.at_references.objectValues() - oldmethod = None - oldinstrument = None - oldcalc = None - for rel in rels: - if rel.relationship == 'AnalysisServiceCalculation': - oldcalc=rc.lookupObject(rel.targetUID) - elif rel.relationship == 'AnalysisServiceInstrument': - oldinstrument=rc.lookupObject(rel.targetUID) - elif rel.relationship == 'AnalysisServiceMethod': - oldmethod=rc.lookupObject(rel.targetUID) - if oldmethod and oldcalc and oldinstrument: - break - - # Reset the method, instrument and calculations - if oldmethod: - an.Schema().getField('Methods').set(an, [oldmethod.UID(),]) - an.Schema().getField('_Method').set(an, oldmethod.UID()) - if oldinstrument: - an.Schema().getField('Instruments').set(an, [oldinstrument.UID(),]) - an.Schema().getField('Instrument').set(an, oldinstrument.UID()) - if oldcalc: - an.setUseDefaultCalculation(False); - an.Schema().getField('DeferredCalculation').set(an, oldcalc.UID()) - - return True diff --git a/bika/lims/upgrade/to3009.py b/bika/lims/upgrade/to3009.py deleted file mode 100644 index adde4aec5c..0000000000 --- a/bika/lims/upgrade/to3009.py +++ /dev/null @@ -1,28 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from Products.Archetypes.config import REFERENCE_CATALOG - -def upgrade(tool): - """Added bika.lims.instrumentcalibration.edit.js - """ - # 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)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'cssregistry') - return True diff --git a/bika/lims/upgrade/to3010.py b/bika/lims/upgrade/to3010.py deleted file mode 100644 index c74f42a54d..0000000000 --- a/bika/lims/upgrade/to3010.py +++ /dev/null @@ -1,59 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName -from zExceptions import BadRequest - - -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)) - setup = portal.portal_setup - typestool = getToolByName(portal, 'portal_types') - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow') - - # Add the SupplyOrderFolder /supplyorders - try: - typestool.constructContent(type_name="SupplyOrderFolder", - container=portal, - id='supplyorders', - title='Supply Orders') - obj = portal['supplyorders'] - obj.unmarkCreationFlag() - obj.reindexObject() - except BadRequest: - # folder already exists - pass - - # /supplyorders folder permissions - mp = portal.supplyorders.manage_permission - mp(permissions.ListFolderContents, ['Manager', 'LabManager', 'LabClerk', ], 0) - mp(permissions.View, ['Manager', 'LabManager', 'LabClerk'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'LabClerk'], 0) - mp(AddSupplyOrder, ['Manager', 'LabManager', 'Owner'], 0) - portal.supplyorders.reindexObject() - - # /pricelists folder permissions - mp = portal.pricelists.manage_permission - mp(permissions.ListFolderContents, ['Manager', 'LabManager', 'LabClerk', ], 0) - mp(permissions.View, ['Manager', 'LabManager', 'LabClerk'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'LabClerk'], 0) - mp(AddPricelist, ['Manager', 'LabManager', 'LabClerk'], 0) - portal.pricelists.reindexObject() - - return True diff --git a/bika/lims/upgrade/to3011.py b/bika/lims/upgrade/to3011.py deleted file mode 100644 index d1fc3aa113..0000000000 --- a/bika/lims/upgrade/to3011.py +++ /dev/null @@ -1,29 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName -from zExceptions import BadRequest - - -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)) - setup = portal.portal_setup - typestool = getToolByName(portal, 'portal_types') - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow') - - return True diff --git a/bika/lims/upgrade/to3012.py b/bika/lims/upgrade/to3012.py deleted file mode 100644 index fc6078f2ff..0000000000 --- a/bika/lims/upgrade/to3012.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from Products.Archetypes.config import REFERENCE_CATALOG - -def upgrade(tool): - """ Remove Maintenance, Validations, Calibrations ans Schedule - https://github.com/bikalabs/Bika-LIMS/issues/1134 - """ - # 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)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - return True diff --git a/bika/lims/upgrade/to3013.py b/bika/lims/upgrade/to3013.py deleted file mode 100644 index 8e1c1714ae..0000000000 --- a/bika/lims/upgrade/to3013.py +++ /dev/null @@ -1,41 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * -from Products.Archetypes.BaseContent import BaseContent -from bika.lims.upgrade import stub - - -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)) - setup = portal.portal_setup - - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - - stub('bika.lims.content.pricelistlineitem', 'PricelistLineItem', - BaseContent) - for pl in portal['pricelists'].objectValues(): - pl.pricelist_lineitems = [] - for pli in pl.objectValues(): - item = dict( - title=pli.title, - ItemDescription=pli.ItemDescription, - Accredited=pli.Accredited, - Subtotal="%d.%d" % (pli.Subtotal[0], pli.Subtotal[1]), - VATAmount="%d.%d" % (pli.VATAmount[0], pli.VATAmount[1]), - Total="%d.%d" % (pli.Total[0], pli.Total[1]), - CategoryTitle=pli.CategoryTitle, - ) - pl.pricelist_lineitems.append(item) - return True diff --git a/bika/lims/upgrade/to3014.py b/bika/lims/upgrade/to3014.py deleted file mode 100644 index 75ad22da6f..0000000000 --- a/bika/lims/upgrade/to3014.py +++ /dev/null @@ -1,28 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -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)) - - # missing /supplyorders folder permission - clients = portal.clients.objectValues() - for client in clients: - mp = client.manage_permission - mp(AddSupplyOrder, ['Manager', 'LabManager', 'Owner'], 0) - client.reindexObject() - - return True diff --git a/bika/lims/upgrade/to3015.py b/bika/lims/upgrade/to3015.py deleted file mode 100644 index 92ef785eee..0000000000 --- a/bika/lims/upgrade/to3015.py +++ /dev/null @@ -1,40 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * -from Products.Archetypes.BaseContent import BaseContent -from bika.lims.upgrade import stub - - -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)) - setup = portal.portal_setup - - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - - stub('bika.lims.content.invoicelineitem', 'InvoiceLineItem', - BaseContent) - for inv in portal['invoices'].objectValues(): - inv.invoice_lineitems = [] - for invl in inv.objectValues(): - item = dict( - ItemDate=invl.ItemDate, - ItemDescription=invl.ItemDescription, - ClientOrderNumber=invl.ClientOrderNumber, - Subtotal=invl.Subtotal, - VATAmount=invl.VATAmount, - Total=invl.Total, - ) - inv.invoice_lineitems.append(item) - return True diff --git a/bika/lims/upgrade/to3016.py b/bika/lims/upgrade/to3016.py deleted file mode 100644 index 783b40b07f..0000000000 --- a/bika/lims/upgrade/to3016.py +++ /dev/null @@ -1,51 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName -from zExceptions import BadRequest - - -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)) - setup = portal.portal_setup - typestool = getToolByName(portal, 'portal_types') - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'controlpanel') - setup.runImportStepFromProfile('profile-bika.lims:default', 'factorytool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow') - - # Add the object to bika_setup - try: - typestool.constructContent(type_name="SupplyOrderFolder", - container=portal.bika_setup, - id='bika_arpriorities', - title='AR Priorities') - obj = portal.bika_setup.bika_arpriorities - obj.unmarkCreationFlag() - obj.reindexObject() - except BadRequest: - # folder already exists - pass - - # Some catalog indexes were added or modified - bsc = getToolByName(portal, 'bika_setup_catalog') - bsc.addIndex('sortKey', 'FieldIndex') - bsc.manage_reindexIndex(ids=['sortKey',]) - - return True diff --git a/bika/lims/upgrade/to3017.py b/bika/lims/upgrade/to3017.py deleted file mode 100644 index 44bd83e44e..0000000000 --- a/bika/lims/upgrade/to3017.py +++ /dev/null @@ -1,29 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName -from zExceptions import BadRequest - - -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)) - setup = portal.portal_setup - typestool = getToolByName(portal, 'portal_types') - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - - return True diff --git a/bika/lims/upgrade/to3018.py b/bika/lims/upgrade/to3018.py deleted file mode 100644 index 404fdc7521..0000000000 --- a/bika/lims/upgrade/to3018.py +++ /dev/null @@ -1,45 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims import logger -from bika.lims.permissions import * -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName -from zExceptions import BadRequest - - -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)) - setup = portal.portal_setup - typestool = getToolByName(portal, 'portal_types') - - # Add the object to bika_setup - try: - portal.bika_setup.manage_delObjects('bika_arpriorities') - except BadRequest: - logger.info("Folder doesn't exist") - - try: - typestool.constructContent(type_name="ARPriorities", - container=portal.bika_setup, - id='bika_arpriorities', - title='AR Priorities') - obj = portal.bika_setup.bika_arpriorities - obj.unmarkCreationFlag() - obj.reindexObject() - except BadRequest: - # folder already exists - pass - - return True diff --git a/bika/lims/upgrade/to3019.py b/bika/lims/upgrade/to3019.py deleted file mode 100644 index c3006926f8..0000000000 --- a/bika/lims/upgrade/to3019.py +++ /dev/null @@ -1,33 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -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)) - - wf = portal.portal_workflow - setup = portal.portal_setup - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow') - wf.updateRoleMappings() - - # missing bika_arpriorities folder permission - folder = portal.bika_setup.bika_arpriorities - folder.manage_permission( - ManageARPriority, - ['Manager', 'Site Administrator', 'LabManager', 'Owner'], 0) - folder.reindexObject() - - return True diff --git a/bika/lims/upgrade/to3020.py b/bika/lims/upgrade/to3020.py deleted file mode 100644 index c667c91106..0000000000 --- a/bika/lims/upgrade/to3020.py +++ /dev/null @@ -1,33 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims import logger -from bika.lims.permissions import * -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName -from zExceptions import BadRequest - - -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)) - portal_catalog = getToolByName(portal, 'portal_catalog') - - proxies = portal_catalog(portal_type="AnalysisRequest") - ars = [proxy.getObject() for proxy in proxies] - for ar in ars: - if not ar.getPriority(): - ar.setDefaultPriority() - - - return True diff --git a/bika/lims/upgrade/to3021.py b/bika/lims/upgrade/to3021.py deleted file mode 100644 index 71926080ba..0000000000 --- a/bika/lims/upgrade/to3021.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims import logger -from bika.lims.permissions import * -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName -from zExceptions import BadRequest - - -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') - at.setCatalogsByType('ARPriority', ['bika_setup_catalog', ]) - - return True diff --git a/bika/lims/upgrade/to3022.py b/bika/lims/upgrade/to3022.py deleted file mode 100644 index 1fa7d207a0..0000000000 --- a/bika/lims/upgrade/to3022.py +++ /dev/null @@ -1,61 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from Products.Archetypes.config import REFERENCE_CATALOG - -def upgrade(tool): - """ Migrate all WorksheetInstrument relations from Reference Analyses - and DuplicateAnalyses to AnalysisInstrument. Assignment of - Instruments to a Worksheet is no longer used. The assignment - is performed to each Analysis directly - """ - # 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)) - setup = portal.portal_setup - portal = aq_parent(aq_inner(tool)) - bac = getToolByName(portal, 'bika_analysis_catalog') - rc=getToolByName(portal, REFERENCE_CATALOG) - proxies = bac(portal_type=["DuplicateAnalysis", "ReferenceAnalysis"]) - for proxy in proxies: - an = proxy.getObject() - if an.getInstrument(): - continue - instrument = None - rels = an.at_references.objectValues() - for rel in rels: - if rel.relationship == 'WorksheetInstrument': - oldinstr = rc.lookupObject(rel.targetUID) - break - if instrument: - an.Schema().getField('Instrument').set(an, instrument.UID()) - instrument.addAnalysis(an) - - # Set indexes - portal = aq_parent(aq_inner(tool)) - bac = getToolByName(portal, 'bika_analysis_catalog') - addIndexAndColumn(bac, 'getResultCaptureDate', 'DateIndex') - bac.manage_reindexIndex(ids=['getResultCaptureDate',]) - - -def addIndexAndColumn(catalog, index, indextype): - try: - catalog.addIndex(index, indextype) - except: - pass - try: - catalog.addColumn(index) - except: - pass - - return True diff --git a/bika/lims/upgrade/to3023.py b/bika/lims/upgrade/to3023.py deleted file mode 100644 index 792cdc5c41..0000000000 --- a/bika/lims/upgrade/to3023.py +++ /dev/null @@ -1,43 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from Products.Archetypes.config import REFERENCE_CATALOG - -def upgrade(tool): - """ Add Storage locacations to ARs and Samples. - """ - # 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)) - setup = portal.portal_setup - - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'factorytool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'controlpanel') - setup.runImportStepFromProfile('profile-bika.lims:default', 'cssregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'content') - - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - - wf = getToolByName(portal, 'portal_workflow') - wf.updateRoleMappings() - - at = getToolByName(portal, 'archetype_tool') - at.setCatalogsByType('StorageLocation', ['bika_setup_catalog', 'portal_catalog']) - - bika_setup = portal._getOb('bika_setup') - obj = bika_setup._getOb('bika_storagelocations') - obj.unmarkCreationFlag() - obj.reindexObject() diff --git a/bika/lims/upgrade/to3024.py b/bika/lims/upgrade/to3024.py deleted file mode 100644 index af48e2a659..0000000000 --- a/bika/lims/upgrade/to3024.py +++ /dev/null @@ -1,30 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from Products.Archetypes.config import REFERENCE_CATALOG - -def upgrade(tool): - """ Add Storage locacations to ARs and Samples. - """ - # 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)) - setup = portal.portal_setup - - bc = getToolByName(portal, 'bika_catalog') - for brain in bc(portal_type='AnalysisRequest'): - obj = brain.getObject() - if not obj.getPriority(): - obj.setDefaultPriority() - #obj.reindexObject() - diff --git a/bika/lims/upgrade/to3025.py b/bika/lims/upgrade/to3025.py deleted file mode 100644 index e75cf440a1..0000000000 --- a/bika/lims/upgrade/to3025.py +++ /dev/null @@ -1,29 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName - - -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)) - setup = portal.portal_setup - - # update affected tools - wf = getToolByName(portal, 'portal_workflow') - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - wf.updateRoleMappings() - - return True diff --git a/bika/lims/upgrade/to3026.py b/bika/lims/upgrade/to3026.py deleted file mode 100644 index d09188e2b7..0000000000 --- a/bika/lims/upgrade/to3026.py +++ /dev/null @@ -1,23 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent - - -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)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - return True diff --git a/bika/lims/upgrade/to3027.py b/bika/lims/upgrade/to3027.py deleted file mode 100644 index 7f4ba37f91..0000000000 --- a/bika/lims/upgrade/to3027.py +++ /dev/null @@ -1,22 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent - - -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)) - - portal.portal_actions.portal_tabs.queries.visible = False - - return True diff --git a/bika/lims/upgrade/to3028.py b/bika/lims/upgrade/to3028.py deleted file mode 100644 index c1d613cb4b..0000000000 --- a/bika/lims/upgrade/to3028.py +++ /dev/null @@ -1,28 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName - - -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)) - - for pricelist in portal.pricelists.objectValues('Pricelist'): - for broken in pricelist.objectValues('PriceListLineItem'): - pricelist.manage_delObjects([broken.id]) - - pc = getToolByName(portal, 'portal_catalog') - pc.refreshCatalog(clear=1) - - return True diff --git a/bika/lims/upgrade/to3029.py b/bika/lims/upgrade/to3029.py deleted file mode 100644 index eccf0da21b..0000000000 --- a/bika/lims/upgrade/to3029.py +++ /dev/null @@ -1,39 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName - -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)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - - # /supplyorders folder permissions - mp = portal.supplyorders.manage_permission - mp(CancelAndReinstate, ['Manager', 'LabManager', 'LabClerk'], 0) - mp(ManagePricelists, ['Manager', 'LabManager', 'Owner'], 1) - mp(permissions.ListFolderContents, ['Member'], 1) - mp(permissions.AddPortalContent, ['Manager', 'LabManager', 'Owner'], 0) - mp(permissions.DeleteObjects, ['Manager', 'LabManager', 'Owner'], 0) - mp(permissions.View, ['Manager', 'LabManager'], 0) - portal.supplyorders.reindexObject() - - wf = getToolByName(portal, 'portal_workflow') - wf.updateRoleMappings() - - return True diff --git a/bika/lims/upgrade/to3030.py b/bika/lims/upgrade/to3030.py deleted file mode 100644 index 4f51024b3d..0000000000 --- a/bika/lims/upgrade/to3030.py +++ /dev/null @@ -1,39 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * -from Products.CMFCore import permissions -from Products.CMFCore.utils import getToolByName -from zExceptions import BadRequest - - -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)) - setup = portal.portal_setup - workflow = getToolByName(portal, "portal_workflow") - - # /arimports folder permissions - mp = portal.arimports.manage_permission - mp(ManageARImport, ['Manager', ], 1) - mp(permissions.ListFolderContents, ['Manager','Member',], 1) - mp(permissions.AddPortalContent, ['Manager', ], 0) - mp(permissions.DeleteObjects, ['Manager'], 0) - mp(permissions.View, ['Manager','Member'], 0) - portal.arimports.reindexObject() - try: - workflow.doActionFor(portal.arimports, "hide") - except: - pass - portal.arimports.setLayout('@@arimports') - return True diff --git a/bika/lims/upgrade/to3031.py b/bika/lims/upgrade/to3031.py deleted file mode 100644 index 5400279015..0000000000 --- a/bika/lims/upgrade/to3031.py +++ /dev/null @@ -1,36 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_parent, aq_inner -from Products.CMFCore.utils import getToolByName -from Products.CMFPlone.utils import _createObjectByType -from zExceptions import BadRequest - - -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') - at.setCatalogsByType('SubGroup', ['bika_setup_catalog', ]) - setup = portal.portal_setup - setup.runImportStepFromProfile('profile-bika.lims:default', 'controlpanel') - - try: - _createObjectByType("SubGroups", portal.bika_setup, "bika_subgroups", - title="Sub-groups") - obj = portal.bika_setup.bika_subgroups - obj.unmarkCreationFlag() - obj.reindexObject() - except BadRequest: - # folder already exists - pass - - return True diff --git a/bika/lims/upgrade/to3032.py b/bika/lims/upgrade/to3032.py deleted file mode 100644 index 28203640b7..0000000000 --- a/bika/lims/upgrade/to3032.py +++ /dev/null @@ -1,25 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_parent, aq_inner -from Products.CMFCore.utils import getToolByName -from Products.CMFPlone.utils import _createObjectByType -from zExceptions import BadRequest - - -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)) - setup = portal.portal_setup - setup.runImportStepFromProfile( - 'profile-bika.lims:default', 'plone.app.registry') - - return True diff --git a/bika/lims/upgrade/to3033.py b/bika/lims/upgrade/to3033.py deleted file mode 100644 index 84ed97ef98..0000000000 --- a/bika/lims/upgrade/to3033.py +++ /dev/null @@ -1,22 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_parent, aq_inner - - -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)) - setup = portal.portal_setup - setup.runImportStepFromProfile( - 'profile-bika.lims:default', 'propertiestool') - - return True diff --git a/bika/lims/upgrade/to3034.py b/bika/lims/upgrade/to3034.py deleted file mode 100644 index 6eeff1823f..0000000000 --- a/bika/lims/upgrade/to3034.py +++ /dev/null @@ -1,33 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_parent, aq_inner - - -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)) - - # Fix Analysis Services IMM incoherences - for service in portal.bika_setup.bika_analysisservices.objectValues('AnalysisService'): - if (service.getInstrumentEntryOfResults() == False): - # Remove any assigned instrument - service.setInstruments([]) - service.setInstrument(None) - - if (service.getManualEntryOfResults() == False): - # Remove any assigned manual method - service.setMethods([]) - service.set_Method(None) - - service.reindexObject() - - return True diff --git a/bika/lims/upgrade/to3035.py b/bika/lims/upgrade/to3035.py deleted file mode 100644 index a08a96db32..0000000000 --- a/bika/lims/upgrade/to3035.py +++ /dev/null @@ -1,32 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_parent, aq_inner -from Products.CMFCore.utils import getToolByName - -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)) - - # Fix Pricelists - VATTotal was renamed to VATAmount - pc = getToolByName(portal, "portal_catalog") - items = pc(portal_type="Pricelist") - for proxy in items: - pl = proxy.getObject() - new = [] - for li in pl.pricelist_lineitems: - if 'VATTotal' in li: - li['VATAmount'] = li['VATTotal'] - del(li['VATTotal']) - new.append(li) - pl.pricelist_lineitems = new - - return True diff --git a/bika/lims/upgrade/to3036.py b/bika/lims/upgrade/to3036.py deleted file mode 100644 index 1c36b152c5..0000000000 --- a/bika/lims/upgrade/to3036.py +++ /dev/null @@ -1,36 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_parent, aq_inner -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import ManageWorksheets - -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)) - setup = portal.portal_setup - - # re-import js registry - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - - # Update permissions according to Bika Setup - # By default, restrict user access and management to WS - bs = portal.bika_setup - bs.setRestrictWorksheetUsersAccess(True) - bs.setRestrictWorksheetManagement(True) - bs.reindexObject() - - # Only LabManagers are able to create worksheets. - mp = portal.manage_permission - mp(ManageWorksheets, ['Manager', 'LabManager'],1) - - return True diff --git a/bika/lims/upgrade/to3037.py b/bika/lims/upgrade/to3037.py deleted file mode 100644 index db327841b1..0000000000 --- a/bika/lims/upgrade/to3037.py +++ /dev/null @@ -1,38 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName - -def upgrade(tool): - """ Refactor ARs listing to allow sorting by priority - """ - # 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 - - - def addIndex(cat, *args): - try: - cat.addIndex(*args) - except: - pass - - portal = aq_parent(aq_inner(tool)) - # Create new indexes - bc = getToolByName(portal, 'bika_catalog') - addIndex(bc, 'Priority', 'FieldIndex') - addIndex(bc, 'BatchUID', 'FieldIndex') - bc.manage_reindexIndex(ids=['Priority', 'BatchUID',]) - - bac = getToolByName(portal, 'bika_analysis_catalog') - addIndex(bac, 'Priority', 'FieldIndex') - bac.manage_reindexIndex(ids=['Priority',]) - - return True diff --git a/bika/lims/upgrade/to3038.py b/bika/lims/upgrade/to3038.py deleted file mode 100644 index e4d3eafe56..0000000000 --- a/bika/lims/upgrade/to3038.py +++ /dev/null @@ -1,28 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName - - -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)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - - wf = getToolByName(portal, 'portal_workflow') - wf.updateRoleMappings() - - return True diff --git a/bika/lims/upgrade/to3039.py b/bika/lims/upgrade/to3039.py deleted file mode 100644 index c9c0c3a9e0..0000000000 --- a/bika/lims/upgrade/to3039.py +++ /dev/null @@ -1,28 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore import permissions - - -def upgrade(tool): - """LIMS-1275 - Remove acquisition for "Modify portal content" permission - """ - # 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)) - - # /bika_setup - - mp = portal.bika_setup.manage_permission - mp(permissions.ModifyPortalContent, ['Manager', 'LabManager'], 0) - portal.batches.reindexObject() - - return True diff --git a/bika/lims/upgrade/to3040.py b/bika/lims/upgrade/to3040.py deleted file mode 100644 index 55af5b4d5f..0000000000 --- a/bika/lims/upgrade/to3040.py +++ /dev/null @@ -1,32 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName - - -def upgrade(tool): - """LIMS-1059: Worksheet rejection workflow - """ - # 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)) - setup = portal.portal_setup - - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') - - workflow = getToolByName(portal, 'portal_workflow') - workflow.updateRoleMappings() - - return True diff --git a/bika/lims/upgrade/to3041.py b/bika/lims/upgrade/to3041.py deleted file mode 100644 index aa165a959b..0000000000 --- a/bika/lims/upgrade/to3041.py +++ /dev/null @@ -1,34 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -def upgrade(tool): - """Added bika.lims.loader.js and bika.lims.artemplate.edit.js - Also fix LIMS-1352 (would have been 3042, but metadata.xml is not up to date!). - """ - # 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)) - setup = portal.portal_setup - - # update affected tools - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - # LIMS-1352 - proxies = portal.bika_catalog(portal_type='Sample') - for brain in proxies: - sample = brain.getObject() - sample.setSamplingWorkflowEnabled(sample.getSamplingWorkflowEnabledDefault()) - - return True diff --git a/bika/lims/upgrade/to3042.py b/bika/lims/upgrade/to3042.py deleted file mode 100644 index 6dc4d77315..0000000000 --- a/bika/lims/upgrade/to3042.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -def upgrade(tool): - """Added bika.lims.client.view.js - """ - # 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)) - setup = portal.portal_setup - - # reread jsregistry with the new data - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - return True diff --git a/bika/lims/upgrade/to3043.py b/bika/lims/upgrade/to3043.py deleted file mode 100644 index 8f1273d309..0000000000 --- a/bika/lims/upgrade/to3043.py +++ /dev/null @@ -1,30 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -def upgrade(tool): - """Added - bika.lims.instrument.js - bika.lims.referencesample.js - bika.lims.graphics.css - """ - # 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)) - setup = portal.portal_setup - - setup.runImportStepFromProfile('profile-bika.lims:default', 'cssregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - return True diff --git a/bika/lims/upgrade/to3044.py b/bika/lims/upgrade/to3044.py deleted file mode 100644 index 55b25f273c..0000000000 --- a/bika/lims/upgrade/to3044.py +++ /dev/null @@ -1,26 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -def upgrade(tool): - """ JS structure refactoring - """ - # 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)) - setup = portal.portal_setup - - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - return True diff --git a/bika/lims/upgrade/to3045.py b/bika/lims/upgrade/to3045.py deleted file mode 100644 index a432981a87..0000000000 --- a/bika/lims/upgrade/to3045.py +++ /dev/null @@ -1,43 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName - - -def upgrade(tool): - """ Fix workflow variable review_history permission guard. - """ - # 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 - - wf_ids = [ - 'bika_analysis_workflow', - 'bika_batch_workflow', - 'bika_cancellation_workflow', - 'bika_duplicateanalysis_workflow', - 'bika_inactive_workflow', - 'bika_publication_workflow', - 'bika_referenceanalysis_workflow', - 'bika_referencesample_workflow', - 'bika_reject_analysis_workflow', - 'bika_sample_workflow', - 'bika_worksheet_workflow', - 'bika_worksheetanalysis_workflow', - ] - portal = aq_parent(aq_inner(tool)) - workflow = getToolByName(portal, 'portal_workflow') - for wf_id in wf_ids: - wf = workflow.getWorkflowById(wf_id) - if wf: - rhdef = wf.variables['review_history'] - rhdef.info_guard = None - - return True diff --git a/bika/lims/upgrade/to3046.py b/bika/lims/upgrade/to3046.py deleted file mode 100644 index 1e747305c9..0000000000 --- a/bika/lims/upgrade/to3046.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -def upgrade(tool): - """Added missing bika.lims.sandbox.ar_analyses.js - """ - # 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)) - setup = portal.portal_setup - - # reread jsregistry with the new data - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - return True diff --git a/bika/lims/upgrade/to3047.py b/bika/lims/upgrade/to3047.py deleted file mode 100644 index 781b0ed7e5..0000000000 --- a/bika/lims/upgrade/to3047.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -def upgrade(tool): - """AJS changes - """ - # 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)) - setup = portal.portal_setup - - # reread jsregistry with the new data - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - return True diff --git a/bika/lims/upgrade/to3048.py b/bika/lims/upgrade/to3048.py deleted file mode 100644 index 781b0ed7e5..0000000000 --- a/bika/lims/upgrade/to3048.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from bika.lims.permissions import * - - -def upgrade(tool): - """AJS changes - """ - # 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)) - setup = portal.portal_setup - - # reread jsregistry with the new data - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - - return True diff --git a/bika/lims/upgrade/to3049.py b/bika/lims/upgrade/to3049.py deleted file mode 100644 index 76e3373fb3..0000000000 --- a/bika/lims/upgrade/to3049.py +++ /dev/null @@ -1,46 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import * -from bika.lims.setuphandlers import BikaGenerator -from bika.lims import logger - -def upgrade(tool): - """ Sort by Type in instruments - """ - # 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)) - bsc = getToolByName(portal, 'bika_setup_catalog', None) - - if 'getInstrumentType' not in bsc.indexes(): - bsc.addIndex('getInstrumentType', 'FieldIndex') - bsc.addColumn('getInstrumentType') - - bsc.addIndex('getInstrumentTypeName','FieldIndex') - bsc.addColumn('getInstrumentTypeName') - - #Del old "getType" Index, it's not used now. - if 'getType' in bsc.indexes(): - bsc.delIndex('getType') - if 'getType' in bsc.indexes(): - bsc.delColumn('getType') - - setup = portal.portal_setup - - logger.info("Reindex added indexes in bika_setup_catalog") - bsc.manage_reindexIndex( - ids=['getInstrumentType', 'getInstrumentTypeName', ]) - - return True diff --git a/bika/lims/upgrade/to3050.py b/bika/lims/upgrade/to3050.py deleted file mode 100644 index d5ee7a0412..0000000000 --- a/bika/lims/upgrade/to3050.py +++ /dev/null @@ -1,56 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName - - -def upgrade(tool): - """ Convert analysis specs to AR specs in AR.ResultsRange. - """ - # 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)) - bc = getToolByName(portal, 'bika_catalog', None) - bsc = getToolByName(portal, 'bika_setup_catalog', None) - - # for each AR - proxies = bc(portal_type="AnalysisRequest") - for proxy in proxies: - ar = proxy.getObject() - - # get the AR.Specification - arspec = ar.getSpecification() - rr = arspec.getResultsRange() if arspec else [] - - # Get analysis specifications - specs = [] - for analysis in ar.getAnalyses(full_objects=True): - spec = getattr(analysis, 'specification', False) - if spec: - spec['keyword'] = analysis.getKeyword() - spec['uid'] = analysis.UID() - specs.append(spec) - - # mix in the analysis spec values - for s in specs: - s_in_rr = False - for i, r in enumerate(rr): - if s['keyword'] == r['keyword']: - rr[i].update(s) - s_in_rr = True - if not s_in_rr: - rr.append(s) - - # set AR.ResultsRange - ar.setResultsRange(rr) - - return True diff --git a/bika/lims/upgrade/to3051.py b/bika/lims/upgrade/to3051.py deleted file mode 100644 index c3ba44bf68..0000000000 --- a/bika/lims/upgrade/to3051.py +++ /dev/null @@ -1,35 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import * -from bika.lims.setuphandlers import BikaGenerator -from bika.lims import logger - -def upgrade(tool): - """ Adding getRawSamplePoint/Type idx to obtain Sample's uid easly - """ - # 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)) - bsc = getToolByName(portal, 'bika_setup_catalog', None) - - if 'getRawSamplePoints' not in bsc.indexes(): - bsc.addIndex('getRawSamplePoints', 'KeywordIndex') - if 'getRawSampleTypes' not in bsc.indexes(): - bsc.addIndex('getRawSampleTypes', 'KeywordIndex') - - logger.info("Reindex added indexes in bika_setup_catalog") - bsc.manage_reindexIndex(ids=['getRawSamplePoints', ]) - bsc.manage_reindexIndex(ids=['getRawSampleTypes', ]) - - return True diff --git a/bika/lims/upgrade/to3052.py b/bika/lims/upgrade/to3052.py deleted file mode 100644 index f9a826d7c9..0000000000 --- a/bika/lims/upgrade/to3052.py +++ /dev/null @@ -1,34 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import * -from bika.lims.setuphandlers import BikaGenerator -from bika.lims import logger - -def upgrade(tool): - """ stickers - """ - # 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)) - setup = portal.portal_setup - - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - - prt = portal.bika_setup.AutoPrintLabels - portal.bika_setup.setAutoPrintStickers(prt) - - size = portal.bika_setup.AutoLabelSize - portal.bika_setup.setAutoStickerTemplate('bika.lims:sticker_%s.pt' %size) - - return True diff --git a/bika/lims/upgrade/to3053.py b/bika/lims/upgrade/to3053.py deleted file mode 100644 index 0538484dbe..0000000000 --- a/bika/lims/upgrade/to3053.py +++ /dev/null @@ -1,29 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import * -from bika.lims.setuphandlers import BikaGenerator -from bika.lims import logger - -def upgrade(tool): - """Add the bika-frontpage view to the selectable views. This will not - set the default, but all new sites will have the 'properties.xml' loaded, - which does set the default. - """ - # 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)) - setup = portal.portal_setup - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - - return True diff --git a/bika/lims/upgrade/to3110.py b/bika/lims/upgrade/to3110.py deleted file mode 100644 index 23e945470c..0000000000 --- a/bika/lims/upgrade/to3110.py +++ /dev/null @@ -1,69 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import AddMultifile -from Products.Archetypes.BaseContent import BaseContent -from bika.lims.upgrade import stub -from bika.lims import logger -from Products.CMFCore import permissions -from bika.lims.permissions import * - - -def upgrade(tool): - """Upgrade step required for Bika LIMS 3.1.10 - """ - portal = aq_parent(aq_inner(tool)) - setup = portal.portal_setup - # Updated profile steps - # list of the generic setup import step names: portal.portal_setup.getSortedImportSteps() <--- - # if you want more metadata use this: portal.portal_setup.getImportStepMetadata('jsregistry') <--- - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'cssregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - setup.runImportStepFromProfile('profile-bika.lims:default', 'factorytool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'controlpanel') - setup.runImportStepFromProfile('profile-bika.lims:default', 'catalog') - setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') - # important info about upgrade steps in - # http://stackoverflow.com/questions/7821498/is-there-a-good-reference-list-for-the-names-of-the-genericsetup-import-steps - setup.runImportStepFromProfile('profile-bika.lims:default', 'skins') - # Update workflow permissions - wf = getToolByName(portal, 'portal_workflow') - wf.updateRoleMappings() - - qi = portal.portal_quickinstaller - ufrom = qi.upgradeInfo('bika.lims')['installedVersion'] - logger.info("Upgrading Bika LIMS: %s -> %s" % (ufrom, '319')) - - # Migrations - WINE119SupplyOrderPermissions(portal) - - return True - - -def WINE119SupplyOrderPermissions(portal): - """LabClerk requires access to Supply Orders. - """ - # AddSupplyOrder permission granted globally - mp = portal.manage_permission - mp(AddSupplyOrder, ['Manager', 'LabManager', 'Owner', 'LabClerk'], 0) - - # Relax permissions of /supplyorders folder - mp = portal.supplyorders.manage_permission - mp(CancelAndReinstate, ['Manager', 'LabManager', 'Owner', 'LabClerk'], 0) - mp(permissions.ListFolderContents, ['LabClerk', ''], 1) - mp(permissions.AddPortalContent, ['Manager', 'LabManager', 'Owner', 'LabClerk'], 0) - mp(permissions.DeleteObjects, ['Manager', 'LabManager', 'Owner'], 0) - mp(permissions.View, ['Manager', 'LabManager', 'LabClerk'], 0) - portal.supplyorders.reindexObject() - - # AddSupplyOrder permission granted for specific clients - for obj in portal.clients.objectValues(): - mp = obj.manage_permission - mp(ManageSupplyOrders, ['Manager', 'LabManager', 'Owner', 'LabClerk'], 0) diff --git a/bika/lims/upgrade/to3111.py b/bika/lims/upgrade/to3111.py deleted file mode 100644 index b60acc723d..0000000000 --- a/bika/lims/upgrade/to3111.py +++ /dev/null @@ -1,84 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from bika.lims import logger -from Products.CMFCore import permissions -from bika.lims.permissions import * - - -def upgrade(tool): - """Upgrade step required for Bika LIMS 3.1.11 - """ - portal = aq_parent(aq_inner(tool)) - - qi = portal.portal_quickinstaller - ufrom = qi.upgradeInfo('bika.lims')['installedVersion'] - logger.info("Upgrading Bika LIMS: %s -> %s" % (ufrom, '3111')) - - """Updated profile steps - list of the generic setup import step names: portal.portal_setup.getSortedImportSteps() <--- - if you want more metadata use this: portal.portal_setup.getImportStepMetadata('jsregistry') <--- - important info about upgrade steps in - http://stackoverflow.com/questions/7821498/is-there-a-good-reference-list-for-the-names-of-the-genericsetup-import-steps - """ - setup = portal.portal_setup - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'cssregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - setup.runImportStepFromProfile('profile-bika.lims:default', 'factorytool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'controlpanel') - setup.runImportStepFromProfile('profile-bika.lims:default', 'catalog') - setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'skins') - """Update workflow permissions - """ - wf = getToolByName(portal, 'portal_workflow') - wf.updateRoleMappings() - - reflex_rules(portal) - return True - - -def reflex_rules(portal): - at = getToolByName(portal, 'archetype_tool') - # If reflex rules folder is not created yet, we should create it - typestool = getToolByName(portal, 'portal_types') - qi = portal.portal_quickinstaller - if not portal['bika_setup'].get('bika_reflexrulefolder'): - typestool.constructContent(type_name="ReflexRuleFolder", - container=portal['bika_setup'], - id='bika_reflexrulefolder', - title='Reflex Rules Folder') - obj = portal['bika_setup']['bika_reflexrulefolder'] - obj.unmarkCreationFlag() - obj.reindexObject() - if not portal['bika_setup'].get('bika_reflexrulefolder'): - logger.info("ReflexRuleFolder not created") - # Install Products.DataGridField - qi.installProducts(['Products.DataGridField']) - # add new types not to list in nav - # ReflexRule - portal_properties = getToolByName(portal, 'portal_properties') - ntp = getattr(portal_properties, 'navtree_properties') - types = list(ntp.getProperty('metaTypesNotToList')) - types.append("ReflexRule") - ntp.manage_changeProperties(MetaTypesNotToQuery=types) - pc = getToolByName(portal, 'portal_catalog') - addIndexAndColumn(pc, 'Analyst', 'FieldIndex') - - -def addIndexAndColumn(catalog, index, indextype): - try: - catalog.addIndex(index, indextype) - except: - pass - try: - catalog.addColumn(index) - except: - pass diff --git a/bika/lims/upgrade/to317.py b/bika/lims/upgrade/to317.py deleted file mode 100644 index edda18377f..0000000000 --- a/bika/lims/upgrade/to317.py +++ /dev/null @@ -1,50 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.Archetypes.BaseContent import BaseContent -from bika.lims.upgrade import stub -from bika.lims import logger - - -def LIMS1519(portal): - """Migrate Archetypes SupplyOrderItem into a list of dictionaries. - """ - stub('bika.lims.content.supplyorderitem', 'SupplyOrderItem', - BaseContent) - for order in portal['supplyorders'].objectValues(): - order.supplyorder_lineitems = [] - for soli in order.objectValues(): - item = dict( - Product=soli.Product, - Quantity=soli.Quantity, - Price=soli.Price, - VAT=soli.VAT, - ) - order.supplyorder_lineitems.append(item) - - -def upgrade(tool): - """Upgrade step required for Bika LIMS 3.1.7 - """ - portal = aq_parent(aq_inner(tool)) - setup = portal.portal_setup - qi = portal.portal_quickinstaller - ufrom = qi.upgradeInfo('bika.lims')['installedVersion'] - logger.info("Upgrading Bika LIMS: %s -> %s" % (ufrom, '317')) - - # Updated profile steps - - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - setup.runImportStepFromProfile('profile-bika.lims:default', 'plone.app.registry') - - # Migrations - - LIMS1519(portal) - - return True diff --git a/bika/lims/upgrade/to318.py b/bika/lims/upgrade/to318.py deleted file mode 100644 index 2bbc82d45c..0000000000 --- a/bika/lims/upgrade/to318.py +++ /dev/null @@ -1,58 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import AddMultifile -from Products.Archetypes.BaseContent import BaseContent -from bika.lims.upgrade import stub -from bika.lims import logger - -def upgrade(tool): - """Upgrade step required for Bika LIMS 3.1.8 - """ - portal = aq_parent(aq_inner(tool)) - setup = portal.portal_setup - qi = portal.portal_quickinstaller - ufrom = qi.upgradeInfo('bika.lims')['installedVersion'] - logger.info("Upgrading Bika LIMS: %s -> %s" % (ufrom, '318')) - - # Updated profile steps - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - - # Adding Multifile content type - at = getToolByName(portal, 'archetype_tool') - at.setCatalogsByType('Multifile', ['bika_setup_catalog', ]) - - # Adding indexes - bsc = getToolByName(portal, 'bika_setup_catalog', None) - if 'getMethodID' not in bsc.indexes(): - bsc.addIndex('getMethodID', 'FieldIndex') - if 'getDocumentID' not in bsc.indexes(): - bsc.addIndex('getDocumentID', 'FieldIndex') - - # Define permissions for Multifile - mp = portal.manage_permission - mp(AddMultifile, ['Manager', 'Owner', 'LabManager', 'LabClerk'], 1) - # Update workflow permissions - wf = getToolByName(portal, 'portal_workflow') - wf.updateRoleMappings() - - - # Migrations - HEALTH245(portal) - - return True - -def HEALTH245(portal): - """ Set the '-' as default separator in all ids. Otherwise, new - records will be created without '-', which has been used since - now by default - """ - for p in portal.bika_setup.getPrefixes(): - p['separator']='-' if (not p.get('separator', None)) else p['separator'] diff --git a/bika/lims/upgrade/to319.py b/bika/lims/upgrade/to319.py deleted file mode 100644 index 04a48925f6..0000000000 --- a/bika/lims/upgrade/to319.py +++ /dev/null @@ -1,117 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from bika.lims.permissions import AddMultifile -from Products.Archetypes.BaseContent import BaseContent -from bika.lims.upgrade import stub -from bika.lims import logger - - -def upgrade(tool): - """Upgrade step required for Bika LIMS 3.1.9 - """ - portal = aq_parent(aq_inner(tool)) - # Adding new feature multiple profiles per Analysis Request - multipleAnalysisProfiles(portal) - setup = portal.portal_setup - # Updated profile steps - # list of the generic setup import step names: portal.portal_setup.getSortedImportSteps() <--- - # if you want more metadata use this: portal.portal_setup.getImportStepMetadata('jsregistry') <--- - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'cssregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - setup.runImportStepFromProfile('profile-bika.lims:default', 'factorytool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'controlpanel') - setup.runImportStepFromProfile('profile-bika.lims:default', 'catalog') - setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') - # important info about upgrade steps in - # http://stackoverflow.com/questions/7821498/is-there-a-good-reference-list-for-the-names-of-the-genericsetup-import-steps - setup.runImportStepFromProfile('profile-bika.lims:default', 'skins') - # Update workflow permissions - wf = getToolByName(portal, 'portal_workflow') - wf.updateRoleMappings() - - qi = portal.portal_quickinstaller - ufrom = qi.upgradeInfo('bika.lims')['installedVersion'] - logger.info("Upgrading Bika LIMS: %s -> %s" % (ufrom, '319')) - - # Migrations - - LIMS1546(portal) - LIMS1558(portal) - - # Resort Invoices and AR Imports (LIMS-1908) in navigation bar - portal.moveObjectToPosition('invoices', portal.objectIds().index('supplyorders')) - portal.moveObjectToPosition('arimports', portal.objectIds().index('referencesamples')) - return True - - -def multipleAnalysisProfiles(portal): - """ - All the logic used to use multiple analysis profile selection in analysis request. - We have to add some indexes and columns in setuphandler.py and also we have to move all analysis profiles from the - analysis request's content field "profile" to profiles - """ - bc = getToolByName(portal, 'bika_catalog', None) - if 'getProfilesTitle' not in bc.indexes(): - bc.addIndex('getProfilesTitle', 'FieldIndex') - bc.addColumn('getProfilesTitle') - # Moving from profile to profiles - ars = bc(portal_type="AnalysisRequest") - for ar_brain in ars: - ar = ar_brain.getObject() - if not ar.getProfiles(): - ar.setProfiles(ar.getProfile()) - - -def LIMS1546(portal): - """Set catalogs for SRTemplate - """ - at = getToolByName(portal, 'archetype_tool') - at.setCatalogsByType('SRTemplate', ['bika_setup_catalog', 'portal_catalog']) - for obj in portal.bika_setup.bika_srtemplates.objectValues(): - obj.unmarkCreationFlag() - obj.reindexObject() - - -def LIMS1558(portal): - """Setting Sampling rounds stuff - """ - # Setting departments and ARtemplates to portal_catalog - at = getToolByName(portal, 'archetype_tool') - at.setCatalogsByType('Department', ['bika_setup_catalog', "portal_catalog", ]) - at.setCatalogsByType('ARTemplate', ['bika_setup_catalog', 'portal_catalog']) - for obj in portal.bika_setup.bika_departments.objectValues(): - obj.unmarkCreationFlag() - obj.reindexObject() - for obj in portal.bika_setup.bika_artemplates.objectValues(): - obj.unmarkCreationFlag() - obj.reindexObject() - # If Sampling rounds folder is not created yet, we should create it - typestool = getToolByName(portal, 'portal_types') - qi = portal.portal_quickinstaller - if not portal['bika_setup'].get('bika_samplingrounds'): - typestool.constructContent(type_name="SamplingRounds", - container=portal['bika_setup'], - id='bika_samplingrounds', - title='Sampling Rounds') - obj = portal['bika_setup']['bika_samplingrounds'] - obj.unmarkCreationFlag() - obj.reindexObject() - if not portal['bika_setup'].get('bika_samplingrounds'): - logger.info("SamplingRounds not created") - # Install Products.DataGridField - qi.installProducts(['Products.DataGridField']) - # add new types not to list in nav - # SamplingRound - portal_properties = getToolByName(portal, 'portal_properties') - ntp = getattr(portal_properties, 'navtree_properties') - types = list(ntp.getProperty('metaTypesNotToList')) - types.append("SamplingRound") - ntp.manage_changeProperties(MetaTypesNotToQuery=types) diff --git a/bika/lims/upgrade/to320.py b/bika/lims/upgrade/to320.py deleted file mode 100644 index 176763dcfe..0000000000 --- a/bika/lims/upgrade/to320.py +++ /dev/null @@ -1,485 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. - -from Acquisition import aq_inner -from Acquisition import aq_parent -from Products.CMFCore.utils import getToolByName -from Products.CMFPlone.utils import _createObjectByType - -from bika.lims import logger -from Products.CMFCore import permissions -from Products.CMFPlone.utils import _createObjectByType -from bika.lims.utils import tmpID -from bika.lims.permissions import * -from bika.lims.utils import tmpID -from bika.lims.catalog import setup_catalogs -from bika.lims.catalog import getCatalogDefinitions -import traceback -import sys -import transaction - - -def upgrade(tool): - """Upgrade step required for Bika LIMS 3.2.0 - """ - portal = aq_parent(aq_inner(tool)) - - qi = portal.portal_quickinstaller - ufrom = qi.upgradeInfo('bika.lims')['installedVersion'] - logger.info("Upgrading Bika LIMS: %s -> %s" % (ufrom, '3.2.0')) - - """Updated profile steps - list of the generic setup import step names: portal.portal_setup.getSortedImportSteps() <--- - if you want more metadata use this: portal.portal_setup.getImportStepMetadata('jsregistry') <--- - important info about upgrade steps in - http://stackoverflow.com/questions/7821498/is-there-a-good-reference-list-for-the-names-of-the-genericsetup-import-steps - """ - setup = portal.portal_setup - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'jsregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'cssregistry') - setup.runImportStepFromProfile('profile-bika.lims:default', 'workflow-csv') - setup.runImportStepFromProfile('profile-bika.lims:default', 'factorytool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'controlpanel') - setup.runImportStepFromProfile('profile-bika.lims:default', 'catalog') - setup.runImportStepFromProfile('profile-bika.lims:default', 'propertiestool') - setup.runImportStepFromProfile('profile-bika.lims:default', 'skins') - setup.runImportStepFromProfile('profile-bika.lims:default', 'toolset') - setup.runImportStepFromProfile( - 'profile-bika.lims:default', 'portlets', run_dependencies=False) - - # Creating all the sampling coordinator roles, permissions and indexes - logger.info("Sampling Coordinator...") - create_samplingcoordinator(portal) - - # Reflex Testing setup - logger.info("Reflex testing...") - reflex_rules(portal) - - # Departments - logger.info("Departments...") - departments(portal) - - # More than one department can be assigned to a Contact - logger.info("More than one department per contact...") - multi_department_to_labcontact(portal) - - # Migrate Instrument Locations - logger.info("Migrating instrument locations...") - migrate_instrument_locations(portal) - - # Updating Verifications of Analysis field from integer to String. - logger.info("Multiverification of Analyses...") - multi_verification(portal) - - # Adding old method of instrument as a set . - logger.info("Assigning Multiple method to instruments...") - instrument_multiple_methods(portal) - - # Update workflow permissions - try: - logger.info("Updating role mappings...") - wf = getToolByName(portal, 'portal_workflow') - wf.updateRoleMappings() - except: - logger.error(traceback.format_exc()) - e = sys.exc_info() - logger.error("Unable to update role maps due to: %s" % (str(e))) - - # Remove unused indexes and columns - logger.info("Removing stale indexes...") - bc = getToolByName(portal, 'bika_catalog', None) - delIndexAndColumn(bc, 'getProfilesTitle') - # Add new indexes - addIndex(bc, 'getAnalysesUIDs', 'KeywordIndex') - - # Adding two columns for client data - addColumnsForClient(portal) - - # Adding getAnalysisRequestUID column in analysis catalog - addgetAnalysisRequestUID(portal) - # Adding getBatchUID column in analysis catalog - addgetBatchUID(portal) - # Adding getSampleConditionUID column in analysis catalog - addgetSampleConditionUID(portal) - # Adding getAnalysisRequestPrintStatus column in analysis catalog - addgetAnalysisRequestPrintStatus(portal) - # Adding getDateSubmitted column in analysis catalog - addgetDateSubmitted(portal) - - # Clean and rebuild affected catalogs (if required) - logger.info("Cleaning and rebuilding...") - cleanAndRebuildIfNeeded(portal) - # Updating lims catalogs if there is any change in them - logger.info("Updating catalogs if needed...") - setup_catalogs(portal, getCatalogDefinitions()) - logger.info("Catalogs updated") - - return True - - -def migrate_instrument_locations(portal): - bsc = portal.bika_setup_catalog - - bika_instrumentlocations = portal.bika_setup.get("bika_instrumentlocations") - - if bika_instrumentlocations is None: - logger.error("bika_instrumentlocations not found in bika_setup!") - return # This should not happen - - # move bika_instrumentlocations below bika_instrumenttypes - panel_ids = portal.bika_setup.objectIds() - target_idx = panel_ids.index("bika_instrumenttypes") - current_idx = panel_ids.index("bika_instrumentlocations") - delta = current_idx - target_idx - if delta > 1: - portal.bika_setup.moveObjectsUp("bika_instrumentlocations", delta=delta-1) - - instrument_brains = bsc(portal_type="Instrument") - for instrument_brain in instrument_brains: - instrument = instrument_brain.getObject() - - # get the string value of the `location` field - location = instrument.getLocation() - if not location: - continue # Skip if no location was set - - # make a dictionary with the Titles as keys and the objects as values - instrument_locations = bika_instrumentlocations.objectValues() - instrument_location_titles = map(lambda o: o.Title(), instrument_locations) - locations = dict(zip(instrument_location_titles, instrument_locations)) - - instrument_location = None - if location in locations: - logger.info("Instrument Location {} exists in bika_instrumentlocations".format(location)) - instrument_location = locations[location] - else: - # Create a new location and link it to the instruments InstrumentLocation field - instrument_location = _createObjectByType("InstrumentLocation", bika_instrumentlocations, tmpID()) - instrument_location.setTitle(location) - instrument_location._renameAfterCreation() - instrument_location.reindexObject() - logger.info("Created Instrument Location {} in bika_instrumentlocations".format(location)) - - instrument.setLocation(None) # flush the old instrument location - instrument.setInstrumentLocation(instrument_location) - instrument.reindexObject() - logger.info("Linked Instrument Location {} to Instrument {}".format(location, instrument.id)) - transaction.commit() - - -def create_samplingcoordinator(portal): - # Creates the new group - portal_groups = portal.portal_groups - if 'SamplingCoordinator'\ - not in portal.acl_users.portal_role_manager.listRoleIds(): - portal.acl_users.portal_role_manager.addRole('SamplingCoordinator') - # add roles to the portal - portal._addRole('SamplingCoordinator') - if 'SamplingCoordinators' not in portal_groups.listGroupIds(): - portal_groups.addGroup( - 'SamplingCoordinators', title="Sampling Coordinators", - roles=['SamplingCoordinator']) - - # permissions - # to deal with permissions http://docs.plone.org/develop/plone/security/permissions.html#checking-if-the-logged-in-user-has-a-permission - # Root permissions - # The last 0/1 regards the 'Acquire' column in the workflow's csv's - mp = portal.manage_permission - mp(AddSamplePartition, ['Manager', 'Owner', 'LabManager', 'LabClerk', 'Sampler', 'SamplingCoordinator'], 1) - mp(ManageARPriority, ['Manager', 'LabManager', 'LabClerk'], 1) - mp(ManageAnalysisRequests, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'Owner', 'RegulatoryInspector', 'SamplingCoordinator'], 1) - mp(ManageSamples, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'Owner', 'RegulatoryInspector', 'SamplingCoordinator'], 1) - mp(ScheduleSampling, ['Manager', 'SamplingCoordinator'], 0) - mp(ReceiveSample, ['Manager', 'LabManager', 'LabClerk', 'Sampler', 'SamplingCoordinator'], 1) - mp(EditSample, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'Owner', 'SamplingCoordinator'], 1) - mp(ViewResults, ['Manager', 'LabManager', 'Analyst', 'Sampler', 'RegulatoryInspector', 'SamplingCoordinator'], 1) - mp(EditSamplePartition, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'Owner', 'SamplingCoordinator'], 1) - - # /clients folder permissions - mp = portal.clients.manage_permission - mp(permissions.ListFolderContents, ['Manager', 'LabManager', 'Member', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'SamplingCoordinator'], 0) - mp(permissions.View, ['Manager', 'LabManager', 'LabClerk', 'Member', 'Analyst', 'Sampler', 'Preserver', 'SamplingCoordinator', 'SamplingCoordinator'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'Member', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'Owner', 'SamplingCoordinator'], 0) - portal.clients.reindexObject() - for obj in portal.clients.objectValues(): - mp = obj.manage_permission - mp(permissions.ListFolderContents, ['Manager', 'LabManager', 'Member', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'SamplingCoordinator'], 0) - mp(permissions.View, ['Manager', 'LabManager', 'LabClerk', 'Member', 'Analyst', 'Sampler', 'Preserver', 'SamplingCoordinator'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'Member', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'Owner', 'SamplingCoordinator'], 0) - obj.reindexObject() - for contact in portal.clients.objectValues('Contact'): - mp = contact.manage_permission - mp(permissions.View, ['Manager', 'LabManager', 'LabClerk', 'Owner', 'Analyst', 'Sampler', 'Preserver', 'SamplingCoordinator'], 0) - mp(permissions.ModifyPortalContent, ['Manager', 'LabManager', 'Owner', 'SamplingCoordinator'], 0) - - # /analysisrequests folder permissions - mp = portal.analysisrequests.manage_permission - mp(permissions.ListFolderContents, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'RegulatoryInspector', 'SamplingCoordinator'], 0) - mp(permissions.View, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'RegulatoryInspector', 'SamplingCoordinator'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'RegulatoryInspector', 'SamplingCoordinator'], 0) - portal.analysisrequests.reindexObject() - - # /samples folder permissions - mp = portal.samples.manage_permission - mp(permissions.ListFolderContents, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'RegulatoryInspector', 'SamplingCoordinator'], 0) - mp(permissions.AddPortalContent, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'SamplingCoordinator'], 0) - mp(permissions.View, ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'RegulatoryInspector', 'SamplingCoordinator'], 0) - mp('Access contents information', ['Manager', 'LabManager', 'LabClerk', 'Analyst', 'Sampler', 'Preserver', 'RegulatoryInspector', 'SamplingCoordinator'], 0) - portal.samples.reindexObject() - transaction.commit() - - # Add the index for the catalog - bc = getToolByName(portal, 'bika_catalog', None) - addIndex(bc, 'getScheduledSamplingSampler', 'FieldIndex') - transaction.commit() - - -def departments(portal): - """ To add department indexes to the catalogs """ - bc = getToolByName(portal, 'bika_catalog') - bac = getToolByName(portal, 'bika_analysis_catalog') - addIndex(bc, 'getDepartmentUIDs', 'KeywordIndex') - addIndex(bac, 'getDepartmentUID', 'KeywordIndex') - transaction.commit() - - -def addColumnsForClient(portal): - """ - Add columns to portal catalog in order to use them in - analysisrequests listings. - """ - pc = getToolByName(portal, 'portal_catalog') - addColumn(pc, 'getProvince') - addColumn(pc, 'getDistrict') - transaction.commit() - - -def addgetAnalysisRequestUID(portal): - """ - Add an index to analysis catalog in order to use them in - analysisrequests listings. - """ - catalog = getToolByName(portal, 'bika_analysis_catalog') - addIndex(catalog, 'getAnalysisRequestUID', 'FieldIndex') - transaction.commit() - - -def addgetBatchUID(portal): - """ - Add an index to analysis catalog in order to use them in - analysisrequests listings. - """ - catalog = getToolByName(portal, 'bika_analysis_catalog') - addIndex(catalog, 'getBatchUID', 'FieldIndex') - transaction.commit() - - -def addgetSampleConditionUID(portal): - """ - Add an index to analysis catalog in order to use them in - analysisrequests listings. - """ - catalog = getToolByName(portal, 'bika_analysis_catalog') - addIndex(catalog, 'getSampleConditionUID', 'FieldIndex') - transaction.commit() - - -def addgetAnalysisRequestPrintStatus(portal): - """ - Add an index to analysis catalog in order to use them in - analysisrequests listings. - """ - catalog = getToolByName(portal, 'bika_analysis_catalog') - addIndex(catalog, 'getAnalysisRequestPrintStatus', 'FieldIndex') - transaction.commit() - - -def addgetDateSubmitted(portal): - """ - Add an index to analysis catalog in order to use them in - analysisrequests listings. - """ - catalog = getToolByName(portal, 'bika_analysis_catalog') - addIndex(catalog, 'getDateSubmitted', 'DateIndex') - transaction.commit() - - -def create_CAS_IdentifierType(portal): - """LIMS-1391 The CAS Nr IdentifierType is normally created by - setuphandlers during site initialisation. - """ - bsc = getToolByName(portal, 'bika_catalog', None) - idtypes = bsc(portal_type = 'IdentifierType', title='CAS Nr') - if not idtypes: - folder = portal.bika_setup.bika_identifiertypes - idtype = _createObjectByType('IdentifierType', folder, tmpID()) - idtype.processForm() - idtype.edit(title='CAS Nr', - description='Chemical Abstracts Registry number', - portal_types=['Analysis Service']) - transaction.commit() - - -def multi_verification(portal): - """ - Getting all analyses with review_state in to_be_verified and - adding "admin" as a verificator as many times as this analysis verified before. - """ - pc = getToolByName(portal, 'portal_catalog', None) - objs = pc(portal_type="Analyses", review_state="to_be_verified") - for obj_brain in objs: - obj = obj_brain.getObject() - old_field = obj.Schema().get("NumberOfVerifications", None).get(obj) - if old_field: - new_value = '' - for n in range(0, old_field): - new_value += 'admin' - if n < old_field: - new_value += ',' - obj.setVerificators(new_value) - transaction.commit() - - -def reflex_rules(portal): - at = getToolByName(portal, 'archetype_tool') - # If reflex rules folder is not created yet, we should create it - typestool = getToolByName(portal, 'portal_types') - qi = portal.portal_quickinstaller - if not portal['bika_setup'].get('bika_reflexrulefolder'): - typestool.constructContent(type_name="ReflexRuleFolder", - container=portal['bika_setup'], - id='bika_reflexrulefolder', - title='Reflex Rules Folder') - obj = portal['bika_setup']['bika_reflexrulefolder'] - obj.unmarkCreationFlag() - obj.reindexObject() - if not portal['bika_setup'].get('bika_reflexrulefolder'): - logger.info("ReflexRuleFolder not created") - - # Install Products.DataGridField - qi.installProducts(['Products.DataGridField']) - # add new types not to list in nav - # ReflexRule - portal_properties = getToolByName(portal, 'portal_properties') - ntp = getattr(portal_properties, 'navtree_properties') - types = list(ntp.getProperty('metaTypesNotToList')) - types.append("ReflexRule") - ntp.manage_changeProperties(MetaTypesNotToQuery=types) - - pc = getToolByName(portal, 'portal_catalog') - addIndexAndColumn(pc, 'Analyst', 'FieldIndex') - - bsc = getToolByName(portal, 'bika_setup_catalog') - addIndex(bsc, 'getAvailableMethodUIDs', 'KeywordIndex') - addIndex(bsc, 'getMethodUID', 'FieldIndex') - - bac = getToolByName(portal, 'bika_analysis_catalog') - addIndex(bac, 'getInstrumentUID', 'FieldIndex') - addIndex(bac, 'getMethodUID', 'FieldIndex') - addIndex(bac, 'getInstrumentUID', 'FieldIndex') - transaction.commit() - - -def multi_department_to_labcontact(portal): - """ - In "Lab Contact" edit view, replace the selection list populated with - departments by a multi-select list. - This requires to create a new content field on order to deal with - the migration of the old single-select list. - The 'Department' field info from created objects should be migrated to the - multi-select field 'Departments' to maintain the consistency - """ - pc = getToolByName(portal, 'portal_catalog', None) - # Moving from profile to profiles - objs = pc(portal_type="LabContact") - for obj_brain in objs: - obj = obj_brain.getObject() - if not obj.getDepartments(): - obj.setDepartments(obj.getDepartment()) - transaction.commit() - - -def instrument_multiple_methods(portal): - # An instrument had only a single relevant field called "Method". - # This field has been replaced with a multiValued "Methods" field. - - # First adding new index - bsc = getToolByName(portal, 'bika_setup_catalog') - addIndex(bsc, 'getMethodUIDs', 'KeywordIndex') - - for instrument in portal.bika_setup.bika_instruments.objectValues(): - value = instrument.Schema().get("Method", None).get(instrument) - if value: - instrument.setMethods([value]) - transaction.commit() - - -# ********************* -# Helper methods below -# ********************* -cleanrebuild = [] -def delIndexAndColumn(catalog, index): - if index in catalog.indexes(): - try: - catalog.delIndex(index) - logger.info('Old catalog index %s deleted.' % index) - if catalog.id not in cleanrebuild: - cleanrebuild.append(catalog.id) - except: - pass - try: - catalog.delColumn(index) - logger.info('Old catalog column %s deleted.' % index) - except: - pass - -def addIndex(catalog, index, indextype): - if index not in catalog.indexes(): - try: - catalog.addIndex(index, indextype) - logger.info('Catalog index %s added.' % index) - if catalog.id not in cleanrebuild: - cleanrebuild.append(catalog.id) - except: - pass - - -def addColumn(cat, col): - if col not in cat.schema(): - try: - cat.addColumn(col) - logger.info('Column %s added to %s.' % (col, cat.id)) - if catalog.id not in cleanrebuild: - cleanrebuild.append(catalog.id) - except: - logger.error( - 'Catalog column %s error while adding to %s.' % (col, cat.id)) - - -def addIndexAndColumn(catalog, index, indextype): - if index not in catalog.indexes(): - try: - catalog.addIndex(index, indextype) - logger.info('Catalog index %s added.' % index) - if catalog.id not in cleanrebuild: - cleanrebuild.append(catalog.id) - except: - pass - try: - catalog.addColumn(index) - logger.info('Catalog column %s added.' % index) - except: - pass - -def cleanAndRebuildIfNeeded(portal): - for c in cleanrebuild: - try: - catalog = getToolByName(portal, c) - catalog.clearFindAndRebuild() - except: - logger.info("Unable to clean and rebuild %s " % c) - pass - transaction.commit() diff --git a/bika/lims/upgrade/v01_00_000.py b/bika/lims/upgrade/v01_00_000.py new file mode 100644 index 0000000000..247a84cb5f --- /dev/null +++ b/bika/lims/upgrade/v01_00_000.py @@ -0,0 +1,34 @@ +from Acquisition import aq_inner +from Acquisition import aq_parent + +from bika.lims import logger +from bika.lims.upgrade import upgradestep +from bika.lims.upgrade.utils import UpgradeUtils +from bika.lims.config import PROJECTNAME as product + +version = '1.0.0' +profile = 'profile-{0}:default'.format(product) + + +@upgradestep(product, version) +def upgrade(tool): + portal = aq_parent(aq_inner(tool)) + setup = portal.portal_setup + ut = UpgradeUtils(portal) + ver_from = ut.getInstalledVersion(product) + + # Since this upgrade is precisely meant to establish a version regardless + # of the version numbering at bikalims/bika.lims, we don't want this check + # to be performed. + #if ut.isOlderVersion(product, version): + # logger.info("Skipping upgrade of {0}: {1} > {2}".format( + # product, ufrom, version)) + # # The currently installed version is more recent than the target + # # version of this upgradestep + # return True + + logger.info("Upgrading {0}: {1} -> {2}".format(product, ver_from, version)) + + # Do nothing, we just only want the profile version to be 1.0.0 + logger.info("{0} upgraded to version {1}".format(product, version)) + return True diff --git a/bika/lims/upgrade/v3_2_0_1704.py b/bika/lims/upgrade/v3_2_0_1704.py deleted file mode 100644 index cef34403c7..0000000000 --- a/bika/lims/upgrade/v3_2_0_1704.py +++ /dev/null @@ -1,42 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2017 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. -from Acquisition import aq_inner -from Acquisition import aq_parent - -from bika.lims import logger -from bika.lims.catalog import getCatalogDefinitions, setup_catalogs -from bika.lims.upgrade import upgradestep -from bika.lims.upgrade.utils import UpgradeUtils - -product = 'bika.lims' -version = '3.2.0.1704' - - -@upgradestep(product, version) -def upgrade(tool): - portal = aq_parent(aq_inner(tool)) - ut = UpgradeUtils(portal) - ufrom = ut.getInstalledVersion(product) - if ut.isOlderVersion(product, version): - logger.info("Skipping upgrade of {0}: {1} > {2}".format( - product, ufrom, version)) - # The currently installed version is more recent than the target - # version of this upgradestep - return True - - logger.info("Upgrading {0}: {1} -> {2}".format(product, ufrom, version)) - - setup = portal.portal_setup - setup.runImportStepFromProfile('profile-bika.lims:default', 'toolset') - - # Updating lims catalogs if there is any change in them - logger.info("Updating catalogs if needed...") - catalog_definitions = getCatalogDefinitions() - # Updating health catalogs if there is any change in them - setup_catalogs(portal, catalog_definitions) - logger.info("Catalogs updated") - - logger.info("{0} upgraded to version {1}".format(product, version)) - return True diff --git a/bika/lims/upgrade/v3_2_0_1705.py b/bika/lims/upgrade/v3_2_0_1705.py deleted file mode 100644 index 6b126b50b5..0000000000 --- a/bika/lims/upgrade/v3_2_0_1705.py +++ /dev/null @@ -1,876 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2017 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. -from Acquisition import aq_inner -from Acquisition import aq_parent - -from DateTime import DateTime -from Products.Archetypes.config import REFERENCE_CATALOG -from Products.CMFCore.utils import getToolByName -from Products.DCWorkflow.Transitions import TRIGGER_AUTOMATIC, \ - TRIGGER_USER_ACTION -from Products.ZCatalog.interfaces import ICatalogBrain -from bika.lims import logger -from bika.lims.catalog import CATALOG_ANALYSIS_LISTING -from bika.lims.catalog import CATALOG_ANALYSIS_REQUEST_LISTING -from bika.lims.catalog import CATALOG_WORKSHEET_LISTING -from bika.lims.catalog import getCatalogDefinitions, setup_catalogs -from bika.lims.catalog.catalog_utilities import _cleanAndRebuildIfNeeded -from bika.lims.interfaces import IWorksheet -from bika.lims.upgrade import upgradestep -from bika.lims.upgrade.utils import UpgradeUtils -from bika.lims.upgrade.utils import migrate_to_blob -from plone.api.portal import get_tool - -product = 'bika.lims' -version = '3.2.0.1705' - - -@upgradestep(product, version) -def upgrade(tool): - portal = aq_parent(aq_inner(tool)) - ut = UpgradeUtils(portal) - ufrom = ut.getInstalledVersion(product) - if ut.isOlderVersion(product, version): - logger.info('Skipping upgrade of {0}: {1} > {2}'.format( - product, ufrom, version)) - # The currently installed version is more recent than the target - # version of this upgradestep - return True - - logger.info('Upgrading {0}: {1} -> {2}'.format(product, ufrom, version)) - - setup = portal.portal_setup - setup.runImportStepFromProfile('profile-bika.lims:default', 'toolset') - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'controlpanel') - - # Updating catalogs from dependant add-ons (health) if there are changes - # This block copied from 1704. Running 1704 is not advised at this point, - # 1705 should do the job of both. - logger.info("Updating catalog structures from bika.lims...") - catalog_definitions = getCatalogDefinitions() - clean_and_rebuild = setup_catalogs( - portal, catalog_definitions, force_no_reindex=True) - logger.info("Catalogs updated (not rebuilt or refreshed)") - - UpdateIndexesAndMetadata(ut) - - # Remove duplicate attachments made by instrument imports - remove_attachment_duplicates() - - # Migrating ataip.FileField to blob.FileField - migrateFileFields(portal) - - # Deleting 'Html' field from ARReport objects. - removeHtmlFromAR(portal) - - RemoveARPriorities(portal) - - BaseAnalysisRefactoring() - - RemoveVersionableTypes() - - FixBrokenActionExpressions() - - # Remove workflow automatic transtions no longer used, fix problem with - # action_name in transitions, target states replacement and removal of - # unused guards - fix_workflows(portal) - - # Adding two indexes in order to delete getBackreference in reflex rules - reflex_rules(ut) - - # Changing some indexes types - change_UUIDIndex(ut) - - # Refresh affected catalogs - _cleanAndRebuildIfNeeded(portal, clean_and_rebuild) - ut.refreshCatalogs() - - logger.info("{0} upgraded to version {1}".format(product, version)) - return True - - -def fix_workflows(portal): - # Remove workflow automatic transitions no longer used - removeWorkflowsAutoTransitions(portal) - - # Fix problem with empty actbox_name in transitions - fixWorkflowsActBoxName(portal) - - # Set all transitions to be triggered manually - to_manual_transitions(portal) - - # Remove unused guard expressions from some transitions - remove_guard_expressions(portal) - - # Replace target states from some transitions - replace_target_states(portal) - - # Force the update of workflow permissions, cause we want those objects - # that reached a given state without being transitioned acquire the - # permissions in accordance with the workflow definition. Othwerwise, - # the transition of those old objects will fail. - logger.info("Updating role mappings...") - wf = getToolByName(portal, 'portal_workflow') - wf.updateRoleMappings() - - -def FixBrokenActionExpressions(): - """These are fixed in the xml, but I'm fixing them manually here. - """ - pt = get_tool('portal_types') - for t in pt: - actions = t.listActions() if hasattr(t, 'listActions') else [] - for a in actions: - expr = a.getActionExpression() - if 'object/aq_parent/absolute_url' in expr: - # This is from Campbell 2012 and makes problems. - logger.info("%s.setActioExpression('string:${object_url}')") - a.setActionExpression('string:${object_url}') - - -def RemoveVersionableTypes(): - # Remove versionable typesa - logger.info("Removing versionable types...") - portal_repository = get_tool('portal_repository') - non_versionable = ['AnalysisSpec', - 'ARPriority', - 'Method', - 'SamplePoint', - 'SampleType', - 'StorageLocation', - 'WorksheetTemplate', ] - versionable = list(portal_repository.getVersionableContentTypes()) - vers = [ver for ver in versionable if ver not in non_versionable] - portal_repository.setVersionableContentTypes(vers) - logger.info("Versionable types updated: {0}".format(', '.join(vers))) - - -def UpdateIndexesAndMetadata(ut): - - # Add getDepartmentUIDs to CATALOG_WORKSHEET_LISTING - ut.addIndexAndColumn( - CATALOG_WORKSHEET_LISTING, 'getDepartmentUIDs', 'KeywordIndex') - - # Removed ARPriority completely - ut.delColumn(CATALOG_ANALYSIS_LISTING, 'getPriority') - ut.delColumn(CATALOG_ANALYSIS_REQUEST_LISTING, 'getPriority') - ut.delIndex(CATALOG_WORKSHEET_LISTING, 'getPriority') - - # Add getId column to bika_catalog - ut.addColumn(CATALOG_ANALYSIS_LISTING, 'getNumberOfVerifications') - # Add SearchableText index to analysis requests catalog - ut.addIndex( - CATALOG_ANALYSIS_REQUEST_LISTING, 'SearchableText', 'ZCTextIndex') - # For reference samples - ut.addColumn(CATALOG_ANALYSIS_LISTING, 'getParentUID') - ut.addColumn(CATALOG_ANALYSIS_LISTING, 'getDateSampled') - - # Reindexing bika_catalog_analysisrequest_listing in order to obtain the - # correct getDateXXXs - ut.addIndexAndColumn( - CATALOG_ANALYSIS_REQUEST_LISTING, 'getDateVerified', 'DateIndex') - - # Reindexing bika_analysis_catalog in order to fix busted date indexes - ut.addIndexAndColumn( - CATALOG_ANALYSIS_LISTING, 'getDueDate', 'DateIndex') - - # Unify naming and cleanup of Method/Instrument indexes - ut.delColumn(CATALOG_ANALYSIS_LISTING, 'getAllowedInstrumentsUIDs') - ut.delColumn(CATALOG_ANALYSIS_LISTING, 'getAllowedMethodsUIDs') - ut.addColumn(CATALOG_ANALYSIS_LISTING, 'getAllowedInstrumentUIDs') - ut.addColumn(CATALOG_ANALYSIS_LISTING, 'getAllowedMethodUIDs') - ut.addIndex('bika_setup_catalog', 'getAvailableMethodUIDs', 'KeywordIndex') - ut.delColumn(CATALOG_ANALYSIS_LISTING, 'getAllowedMethodsAsTuples') - - # Added by myself and pau independently - ut.addColumn(CATALOG_ANALYSIS_LISTING, 'getNumberOfVerifications') - - # Renamed/refactored - ut.delColumn(CATALOG_ANALYSIS_LISTING, 'getResultOptionsFromService') - ut.addColumn(CATALOG_ANALYSIS_LISTING, 'getResultOptions') - - # Renamed/refactored - ut.delColumn(CATALOG_ANALYSIS_LISTING, 'getResultsRangeNoSpecs') - ut.addColumn(CATALOG_ANALYSIS_LISTING, 'getResultsRange') - - # these were kind of useless - ut.delColumn(CATALOG_ANALYSIS_LISTING, 'getServiceDefaultInstrumentTitle') - ut.delColumn(CATALOG_ANALYSIS_LISTING, 'getServiceDefaultInstrumentUID') - ut.delColumn(CATALOG_ANALYSIS_LISTING, 'getServiceDefaultInstrumentURL') - - # to replace a backreference for AnalysisSamplePartition - ut.addIndex(CATALOG_ANALYSIS_LISTING, 'getSamplePartitionUID', 'FieldIndex') - - # replaced by title of analysis, same as service title - ut.delIndexAndColumn(CATALOG_ANALYSIS_LISTING, 'getServiceTitle') - ut.delIndexAndColumn('bika_catalog', 'getServiceTitle') - ut.delIndexAndColumn('bika_setup_catalog', 'getServiceTitle') - - # Required in a few places. nihadness used getDeparthentTitle as a - # workaround which is fine, but not for long. - ut.delIndexAndColumn('bika_setup_catalog', 'getDepartmentUID') - - # factored out - ut.delIndexAndColumn('bika_catalog', 'getAnalysisCategory') - - # Try to avoid refreshing these two if not required. We can tell because - # using a None in a date index used as a sort_on key, causes these objects - # not to be returned at all. - query = {'query': [DateTime('1999/01/01 00:00'), - DateTime('2024/01/01 23:59')], - 'range': 'min:max'} - - cat = get_tool(CATALOG_ANALYSIS_LISTING) - brains = cat(portal_type='Analysis', review_state='received') - filtered = cat(portal_type='Analysis', review_state='received', - getDueDate=query) - if len(filtered) != len(brains) \ - and CATALOG_ANALYSIS_LISTING not in ut.refreshcatalog: - ut.refreshcatalog.append(CATALOG_ANALYSIS_LISTING) - - cat = get_tool(CATALOG_ANALYSIS_REQUEST_LISTING) - brains = cat(portal_type='AnalysisRequest', review_state='verified') - filtered = cat(portal_type='AnalysisRequest', review_state='verified', - getDateVerified=query) - if len(filtered) != len(brains) \ - and CATALOG_ANALYSIS_REQUEST_LISTING not in ut.refreshcatalog: - ut.refreshcatalog.append(CATALOG_ANALYSIS_REQUEST_LISTING) - - -def removeHtmlFromAR(portal): - """ - 'Html' StringField has been deleted from ARReport Schema. - Now removing this attribute from old objects to save some memory. - """ - uc = getToolByName(portal, 'uid_catalog') - ar_reps = uc(portal_type='ARReport') - f_name = 'Html' - counter = 0 - for ar in ar_reps: - obj = ar.getObject() - if hasattr(obj, f_name): - delattr(obj, f_name) - counter += 1 - - logger.info("'Html' attribute has been removed from %d ARReport objects." - % counter) - - -def BaseAnalysisRefactoring(): - """The relationship between AnalysisService and the various types of - Analysis has been refactored. The class heirarchy now looks like this: - - - AbstractBaseAnalysis(BaseObject) - Fields and methods common to to AnalysisService and all types of - analysis - - AbstractAnalysis(AbstractBaseAnalysis) - Fields and methods common to all types of Analysis. - - AbstractRoutineAnalysis(AbstractBaseAnalysis) - Fields and methods common to Routine Analyses (Analysis, Duplicate). - - AnalysisService(AbstractBaseAnalysis) - - ReferenceAnalysis(AbstractAnalysis) - - DuplicateAnalysis(AbstractRoutineAnalysis) - - Analysis(AbstractRoutineAnalysis) - In the final schema for Analysis objects, the following fields are - removed to be replaced by accessor methods on the class: - - Service - - ClientUID - - ClientTitle - - SampleTypeUID - - SamplePointUID - - CategoryUID - - MethodUID - - InstrumentUID - - DateReceived - - DateSampled - - InstrumentValid - - Many ReferenceFields and HistoryAwareReferenceFields were migrated to - UIDReferenceField which uses simple StringFields to store the UIDs. After - refactoring, the following references exist - - BaseAnalysis - ============ - Instrument (UIDReferenceField) - Method (UIDReferenceField) - Calculation (UIDReferenceField - Category (UIDReferenceField) - Department (UIDReferenceField) - AnalysisService - =============== - Preservation (UIDReferenceField) - Container (UIDReferenceField) - Instruments (UIDReferenceField) - Methods (UIDReferenceField) - DeferredCalculation -> removed - Analysis - ======== - Calculation (HistoryAwareReferenceField - Attachment (UIDReferenceField) - SamplePartition (UIDReferenceField) - OriginalReflexedAnalysis (UIDReferenceField) - ReflexAnalysisOf (UIDReferenceField) - ReferenceAnalysis - ================= - Service (UIDReferenceField) - Attachment (UIDReferenceField) - Instrument (UIDReferenceField) - Method (UIDReferenceField) - DuplicateAnalysis - ================= - Analysis (UIDReferenceField) - Attachment (UIDReferenceField) - Instrument (UIDReferenceField) - - The following references were also migrated: - Method -> Calculation (MethodCalculation) - Calculation -> DependentServices (CalculationAnalysisService) - Instrument -> Method (InstrumentMethod) - Instrument -> Analyses (InstrumentAnalyses) - Worksheet -> WorksheetTemplate (WorksheetAnalysisTemplate) - AnalysisSpec -> SampleType (AnalysisSpecSampleType) - AnalysisRequest -> Priority (AnalysisRequestPriority) - AnalysisRequest -> Contact (AnalysisRequestContact) - ARReport -> AnalysisRequest (ReportAnalysisRequest) - Attachment -> AttachmentType (AttachmentAttachmentType) - SamplePartition -> Analyses (SamplePartitionAnalysis) - field removed, added accessor method - """ - at = get_tool('archetype_tool') - - # XXX CAMPBELL PAU I need some help with OriginalAnalysisReflectedAnalysis. - - # I'm using the backreferences below for discovering objects to migrate. - # This will work, because reference_catalog has not been rebuilt yet. - - # Analysis Services - # ================= - bsc = get_tool('bika_setup_catalog') - brains = bsc(portal_type='AnalysisService') - for srv_brain in brains: - srv = srv_brain.getObject() - # migrate service refs first! - touidref(srv, srv, 'AnalysisServiceAnalysisCategory', 'Category') - touidref(srv, srv, 'AnalysisServiceDepartment', 'Department') - touidref(srv, srv, 'AnalysisServiceInstrument', 'Instrument') - touidref(srv, srv, 'AnalysisServiceMethod', 'Method') - - # Routine Analyses - # ================== - ans = srv.getBRefs(relationship='AnalysisAnalysisService') - if ans: - logger.info('Migrating schema of %s analyses of type %s' % - (len(ans), srv.Title())) - for an in ans: - # retain analysis Service in a newly named UIDReferenceField - an.setAnalysisService(srv.UID()) - # Set service references as analysis reference values - an.setCategory(srv.getCategory()) - an.setDepartment(srv.getDepartment()) - # Copy field values from service to analysis - copy_field_values(srv, an) - - # Duplicate Analyses - # ================== - dups = an.getBRefs(relationship='DuplicateAnalysisAnalysis') - if dups: - logger.info('Migrating schema for %s duplicates on %s' % - (len(dups), an)) - for dup in dups: - # retain analysis Service in a newly named UIDReferenceField - dup.setAnalysisService(srv) - # Copy field values from the migrated analysis to the duplicate - copy_field_values(an, dup) - - # Reference Analyses - # ================== - ans = srv.getBRefs(relationship='ReferenceAnalysisAnalysisService') - if ans: - logger.info('Migrating schema for %s references on %s' % - (len(ans), srv)) - for ran in ans: - # retain analysis Service in a newly named UIDReferenceField - ran.setAnalysisService(srv) - # Copy field values from service into reference analysis - copy_field_values(srv, ran) - - # Now migrate all AT ReferenceFeld -> UIDReferenceField. - - # The AnalysisInstrument and AnalysisMethod relations are used in fields - # on routine, reference and/or duplicate analyses. We are lucky - # that the fieldnames are Instrument and Method respectively in all - # applicable objects, so migrate_refs does not need to care about which - # portal_type is the target. - migrate_refs('AnalysisInstrument', 'Instrument') - migrate_refs('AnalysisMethod', 'Method') - - # The remaining reference relations are named correctly based on source - # and destination type: - migrate_refs('AnalysisAttachment', 'Attachment') - migrate_refs('AnalysisSamplePartition', 'SamplePartition') - migrate_refs('OriginalAnalysisReflectedAnalysis', - 'OriginalReflexedAnalysis') - migrate_refs('AnalysisReflectedAnalysis', 'ReflexAnalysisOf') - migrate_refs('DuplicateAnalysisAnalysis', 'Analysis') - migrate_refs('DuplicateAnalysisAttachment', 'Attachment') - migrate_refs('ReferenceAnalysisAnalysisService', 'Service') - migrate_refs('ReferenceAnalysisAttachment', 'Attachment') - migrate_refs('AnalysisServiceInstrument', 'Instrument') - migrate_refs('AnalysisServiceInstruments', 'Instruments') - migrate_refs('AnalysisServiceMethod', 'Method') - migrate_refs('AnalysisServiceMethods', 'Methods') - migrate_refs('AnalysisServiceCalculation', 'Calculation') - migrate_refs('AnalysisServiceAnalysisCategory', 'Category') - migrate_refs('AnalysisServiceDepartment', 'Department') - migrate_refs('AnalysisServicePreservation', 'Preservation') - migrate_refs('AnalysisServiceContainer', 'Container') - migrate_refs('MethodCalculation', 'Calculation') - migrate_refs('CalculationAnalysisService', 'DependentServices') - migrate_refs('InstrumentMethod', 'Method') - # InstrumentAnalyses gets deleted. Instruments can use the index - # 'getInstrumentUID' in bika_analysis_catalog for the same purposes. - # migrate_refs('InstrumentAnalyses', 'Analyses') - migrate_refs('WorksheetAnalysisTemplate', 'WorksheetTemplate') - migrate_refs('AnalysisSpecSampleType', 'SampleType') - migrate_refs('AnalysisRequestContact', 'Contact') - migrate_refs('ReportAnalysisRequest', 'AnalysisRequest') - migrate_refs('AttachmentAttachmentType', 'AttachmentType') - - refs_removed = 0 - for rel in ['AnalysisInstrument', - 'AnalysisMethod', - 'AnalysisAttachment', - 'AnalysisSamplePartition', - 'OriginalAnalysisReflectedAnalysis', - 'AnalysisReflectedAnalysis', - 'AnalysisAnalysisService', - 'AnalysisAnalysisPartition', - 'ReferenceAnalysisAnalysisService', - 'ReferenceAnalysisAttachment', - 'AnalysisInstrument', - 'AnalysisMethod', - 'AnalysisServiceAnalysisCategory', - 'AnalysisServiceDepartment', - 'AnalysisServiceInstruments', - 'AnalysisServiceInstruments', - 'AnalysisServiceInstrument', - 'AnalysisServiceMethods', - 'AnalysisServiceMethod', - 'AnalysisServiceCalculation', - 'AnalysisServiceDeferredCalculation', - 'AnalysisServicePreservation', - 'AnalysisServiceContainer', - 'DuplicateAnalysisAnalysis', - 'DuplicateAnalysisAttachment', - 'AnalysisInstrument', - 'MethodCalculation', - 'CalculationAnalysisService', - 'InstrumentMethod', - 'InstrumentAnalyses', - 'WorksheetAnalysisTemplate', - 'AnalysisSpecSampleType', - # AnalysisRequestPriority: field is removed completely. - 'AnalysisRequestPriority', - 'AnalysisRequestContact', - 'ReportAnalysisRequest', - 'AttachmentAttachmentType', - # SamplePartitionAnalysis: field is removed completely. - 'SamplePartitionAnalysis', - ]: - refs_removed += del_at_refs(rel) - if refs_removed: - logger.info("Total reference objects removed: %s" % refs_removed) - - -def RemoveARPriorities(portal): - # Throw out persistent broken bika_arpriorities. - logger.info('Removing bika_setup.bika_arpriorities') - bs = get_tool('bika_setup') - pc = get_tool('portal_catalog') - cpl = get_tool('portal_controlpanel') - - # This lets ARPriorities load with BaseObject code since - # bika_arpriorities.py has been eradicated. - # stub('bika.lims.controlpanel.bika_arpriorities', 'ARPriorities', - # BaseContent) - - if 'bika_arpriorities' in portal.bika_setup: - brain = pc(portal_type='ARPriorities')[0] - # manually unindex object -- pc.uncatalog_object(brain.UID()) - indexes = pc.Indexes.keys() - rid = brain.getRID() - for name in indexes: - x = pc.Indexes[name] - if hasattr(x, 'unindex_object'): - x.unindex_object(rid) - # Then remove as normal - bs.manage_delObjects(['bika_arpriorities']) - cpl.unregisterConfiglet('bika_arpriorities') - - -def touidref(src, dst, src_relation, fieldname): - """Convert an archetypes reference in src/src_relation to a UIDReference - in dst/fieldname. - """ - field = dst.getField(fieldname) - refs = src.getRefs(relationship=src_relation) - if len(refs) == 1: - value = get_uid(refs[0]) - elif len(refs) > 1: - value = filter(lambda x: x, [get_uid(ref) for ref in refs]) - else: - value = field.get(src) - if not value: - value = '' - if not field: - raise Exception('Cannot find field %s/%s' % (fieldname, src)) - if field.required and not value: - logger.error('Required %s field %s/%s has no value' % ( - src.portal_type, src, fieldname)) - field.set(src, value) - - -def migrate_refs(rel, fieldname, pgthreshold=100): - rc = get_tool(REFERENCE_CATALOG) - uc = get_tool('uid_catalog') - refs = rc(relationship=rel) - if refs: - logger.info('Migrating %s references of %s' % (len(refs), rel)) - for i, ref in enumerate(refs): - obj = uc(UID=ref[1]) - if obj: - obj = obj[0].getObject() - if i and not divmod(i, pgthreshold)[1]: - logger.info("%s/%s %s/%s" % (i, len(refs), obj, rel)) - touidref(obj, obj, rel, fieldname) - - -def del_at_refs(rel): - # Remove this relation from at_references - rc = get_tool(REFERENCE_CATALOG) - refs = rc(relationship=rel) - removed = 0 - size = 0 - if refs: - logger.info("Found %s refs for %s" % (len(refs), rel)) - ref_dict = {ref[0]: ref.getObject() for ref in refs} - for ref_id, ref_obj in ref_dict.items(): - removed += 1 - size += 1 - if ref_obj is not None: - ref_obj.aq_parent.manage_delObjects([ref_id]) - if removed: - logger.info("Performed %s deletions" % removed) - return removed - - -def copy_field_values(src, dst): - # These fields are not copied between objects. - IGNORE_FIELDNAMES = ['UID', 'id'] - IGNORE_FIELDTYPES = ['reference'] - - src_schema = src.Schema() - dst_schema = dst.Schema() - - for field in src_schema.fields(): - fieldname = field.getName() - if fieldname in IGNORE_FIELDNAMES \ - or field.type in IGNORE_FIELDTYPES \ - or fieldname not in dst_schema: - continue - value = field.get(src) - if value: - dst_schema[fieldname].set(dst, value) - - -def get_uid(value): - """Takes a brain or object and returns a valid UID. - In this case, the object may come from portal_archivist, so we will - need to do a catalog query to get the UID of the current version - """ - if not value: - return '' - # Is value a brain? - if ICatalogBrain.providedBy(value): - value = value.getObject() - # validate UID - uid = value.UID() - uc = get_tool('uid_catalog') - if uc(UID=uid): - # The object is valid - return uid - # Otherwise the object is an old version - brains = uc(portal_type=value.portal_type, Title=value.Title()) - if not brains: - # Cannot find UID - raise RuntimeError('The UID for %s/%s cannot be discovered in the ' - 'uid_catalog or in the portal_archivist ' - 'history!' % - (value.portal_type, value.Title())) - if len(brains) > 1: - # Found multiple objects, this is a failure - raise RuntimeError( - 'Searching for %s/%s returned multiple objects.' % - (value.portal_type, value.Title())) - return brains[0].UID - - -def migrateFileFields(portal): - """ - This function walks over all attachment types and migrates their FileField - fields. - """ - portal_types = [ - "Attachment", - "ARImport", - "Instrument", - "InstrumentCertification", - "Method", - "Multifile", - "Report", - "ARReport", - "SamplePoint"] - - for portal_type in portal_types: - # Do the migration - migrate_to_blob( - portal, - portal_type=portal_type, - remove_old_value=True) - - -def remove_attachment_duplicates(): - """Visit every worksheet attachment, and remove duplicates. - The duplicates are filtered by filename, but that's okay because the - instrument import routine used filenames when it made them. - """ - pc = get_tool('portal_catalog') - - # get all worksheets. - brains = pc(portal_type='Attachment') - - # primaries contains non-duplicate attachments. key is wsID:fn. - # key used for filtering duplicates; same filename permitted on - # separate worksheets. - primaries = {} # key -> primary_attachment - dup_ans = {} # key -> [dup_att,dup_att...] - dup_count = 0 - - for brain in brains: - att = brain.getObject() - if not IWorksheet.providedBy(att.aq_parent): - continue - ws = att.aq_parent - ws_id = ws.getId() - filename = att.getAttachmentFile().filename - if not filename: - continue - key = "%s:%s" % (ws_id, filename) - if key not in primaries: - # first instance of this file on this worksheet. Not a duplicate. - primaries[key] = att - continue - # we are a duplicate. - if key not in dup_ans: - dup_ans[key] = [] - dup_ans[key].append(att) - dup_count += 1 - - if dup_ans: - logger.info("Found {} duplicates of {} attachments".format( - dup_count, len(primaries))) - - # Now. - for key, dups in dup_ans.items(): - ws_id, filename = key.split(':') - logger.info("Removing {} duplicates of {} from {}".format( - len(dups), filename, ws_id)) - for dup in dups: - ans = dup.getBackReferences() - for an in ans: - # remove the dup from analysis.Attachment field if it's there - an_atts = [a for a in an.getAttachment() - if a.UID() != dup.UID()] - an.setAttachment(an_atts) - # manually delete references to this attachment in the Analysis - refs = an.at_references.objectValues() - for ref in refs: - if ref.targetUID == dup.UID(): - an.at_references.manage_delObjects(ref.id) - # force this object out of the catalogs - path_uid = '/'.join(dup.getPhysicalPath()) - pc.uncatalog_object(path_uid) - # Empty the file field valust just to be sure - dup.getField('AttachmentFile').unset(dup) - # Delete the attachment - dup.aq_parent.manage_delObjects(dup.getId()) - - -def fixWorkflowsActBoxName(portal): - """Walkthrough all the transitions from all workflows and sets actbox_name - if empty. Although being valid, those transitions without actbox_name will - never be returned by workflowtool.getTransitionsFor, so bika's workflow - machinery fails""" - logger.info('Fixing transition actbox_names...') - wtool = getToolByName(portal, 'portal_workflow') - workflowids = wtool.getWorkflowIds() - for wfid in workflowids: - workflow = wtool.getWorkflowById(wfid) - transitions = workflow.transitions - for transid in transitions.objectIds(): - transition = transitions[transid] - if not transition.actbox_name: - transition.actbox_name = transition.id - logger.info('Transition actbox_name fixed: {0}'.format(transid)) - - -def removeWorkflowsAutoTransitions(portal): - """Remove transitions that are triggered automatically, cause since this - version are all managed manually: auto_preservation_required and - auto_no_preservation_required - """ - logger.info('Removing automatic transitions no longer used...') - toremove = [{'id': 'auto_preservation_required', - 'replacement': 'to_be_preserved'}, - {'id': 'auto_no_preservation_required', - 'replacement': 'sample_due'}, ] - wtool = getToolByName(portal, 'portal_workflow') - workflowids = wtool.getWorkflowIds() - for wfid in workflowids: - workflow = wtool.getWorkflowById(wfid) - # Walkthrough states, remove the transitions from there and be sure the - # replacement (manual transition) is on place - states = workflow.states - for stateid in states.objectIds(): - state = states[stateid] - strans = list(state.transitions) - for remove in toremove: - if remove['id'] in strans: - msg = 'Dettaching transition {0} from state {1} in {2}' \ - .format(remove['id'], stateid, wfid) - logger.info(msg) - strans.remove(remove['id']) - if remove['replacement'] not in strans: - msg = 'Attaching transition {0} to state {1} from {2}' \ - .format(remove['replacement'], stateid, wfid) - logger.info(msg) - strans.append(remove['replacement']) - state.transitions = tuple(strans) - - # Now, remove the transitions itself - transitions = workflow.transitions - transids = transitions.objectIds() - for remove in toremove: - if remove['id'] in transids: - logger.info('Removing transition {0} from {1}'.format( - remove['id'], wfid)) - workflow.transitions.deleteTransitions([remove['id']]) - - -def to_manual_transitions(portal): - """Remove transitions that are triggered automatically, cause since this - version are all managed manually: auto_preservation_required and - auto_no_preservation_required - """ - logger.info('Setting auto transitions to manual...') - wtool = getToolByName(portal, 'portal_workflow') - workflowids = wtool.getWorkflowIds() - for wfid in workflowids: - workflow = wtool.getWorkflowById(wfid) - transitions = workflow.transitions - for transid in transitions.objectIds(): - transition = transitions[transid] - if transition.trigger_type == TRIGGER_AUTOMATIC: - transition.trigger_type = TRIGGER_USER_ACTION - logger.info("Transition '{0}' from workflow '{1}' set to manual" - .format(wfid, transid)) - - -def remove_guard_expressions(portal): - """Remove guard expressions from some workflow statuses - """ - logger.info('Removing unused guard expressions...') - toremove = ['bika_worksheetanalysis_workflow.assign', - 'bika_worksheetanalysis_workflow.unassign'] - wtool = get_tool('portal_workflow') - workflowids = wtool.getWorkflowIds() - for wfid in workflowids: - workflow = wtool.getWorkflowById(wfid) - transitions = workflow.transitions - for transid in transitions.objectIds(): - for torem in toremove: - tokens = torem.split('.') - if tokens[0] == wfid and tokens[1] == transid: - transition = transitions[transid] - transition.guard = None - logger.info("Guard from transition '{0}.{1}' reset to None" - .format(wfid, transid)) - - -def replace_target_states(portal): - """Replace target states from some worklow statuses - """ - logger.info('Replacing Target states for some workflow statuses...') - tochange = [ - {'wfid': 'bika_duplicateanalysis_workflow', - 'trid': 'submit', - 'target': 'to_be_verified'}, - - {'wfid': 'bika_referenceanalysis_workflow', - 'trid': 'submit', - 'target': 'to_be_verified'}, - - {'wfid': 'bika_worksheet_workflow', - 'trid': 'submit', - 'target': 'to_be_verified'} - ] - wtool = get_tool('portal_workflow') - workflowids = wtool.getWorkflowIds() - for wfid in workflowids: - workflow = wtool.getWorkflowById(wfid) - transitions = workflow.transitions - for transid in transitions.objectIds(): - for item in tochange: - itwfid = item.get('wfid', '') - ittrid = item.get('trid', '') - ittarg = item.get('target', '') - if itwfid == wfid and ittrid == transid and ittarg: - transition = transitions[transid] - oldstate = transition.new_state_id - transition.new_state_id = ittarg - logger.info( - "Replacing target state '{0}' from '{1}.{2}' to {3}" - .format(oldstate, wfid, transid, ittarg) - ) - - -def reflex_rules(ut): - """Adding two indexes. - """ - ut.addIndex( - CATALOG_WORKSHEET_LISTING, 'getAnalysesUIDs', 'KeywordIndex') - ut.addIndex( - CATALOG_ANALYSIS_LISTING, 'getOriginalReflexedAnalysisUID', 'UUIDIndex' - ) - - -def change_UUIDIndex(ut): - """ - UUIDIndex behaves like a FieldIndex, but can only store one document id - per value, so there's a 1:1 mapping from value to document id. An error - is logged if a different document id is indexed for an already taken value. - - Some UUIDIndexes need to be migarted to FieldIndexes because more than one - field could contain the same UID, for instance - getOriginalReflexedAnalysisUID field. - """ - ut.delIndex(CATALOG_ANALYSIS_LISTING, 'getOriginalReflexedAnalysisUID') - ut.addIndex( - CATALOG_ANALYSIS_LISTING, - 'getOriginalReflexedAnalysisUID', - 'FieldIndex' - ) diff --git a/bika/lims/upgrade/v3_2_0_1706.py b/bika/lims/upgrade/v3_2_0_1706.py deleted file mode 100644 index 1f109671b3..0000000000 --- a/bika/lims/upgrade/v3_2_0_1706.py +++ /dev/null @@ -1,128 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2017 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. -from Acquisition import aq_inner -from Acquisition import aq_parent - -from bika.lims import logger -from bika.lims.upgrade import upgradestep -from bika.lims.upgrade.utils import UpgradeUtils -from bika.lims.catalog import CATALOG_ANALYSIS_LISTING -from bika.lims.catalog import CATALOG_ANALYSIS_REQUEST_LISTING -from bika.lims.utils import changeWorkflowState -from bika.lims.workflow import getCurrentState -from bika.lims.workflow import wasTransitionPerformed -from plone.api.portal import get_tool - -product = 'bika.lims' -version = '3.2.0.1706' - - -@upgradestep(product, version) -def upgrade(tool): - portal = aq_parent(aq_inner(tool)) - ut = UpgradeUtils(portal) - ufrom = ut.getInstalledVersion(product) - if ut.isOlderVersion(product, version): - logger.info("Skipping upgrade of {0}: {1} > {2}".format( - product, ufrom, version)) - # The currently installed version is more recent than the target - # version of this upgradestep - return True - - logger.info("Upgrading {0}: {1} -> {2}".format(product, ufrom, version)) - - # Updating lims catalogs if there is any change in them - logger.info("Updating catalogs...") - change_UUIDIndex(ut) - ut.refreshCatalogs() - logger.info("Catalogs updated") - - # Fix ARs - Analyses in inconsistent state - # Transitioning Analysis Requests that were created before the upgrade - # step 17.05 to "received" state, their analyses remain in "sample_due" - # state. The analyses are therefore not available for assigning to - # worksheets or entering results. - # Note that after this issue happened, updateRoleMappings was added in - # v3.2.0.17.05 upgrade step as a safeguard. The fix in this upgrade should - # only work in those instances that were upgraded to 3.2.0.17.05 before - # updateRoleMappings was added (see commit 0931858) - fix_ar_analyses_statuses_inconsistences(portal) - - logger.info("{0} upgraded to version {1}".format(product, version)) - return True - - -def fix_ar_analyses_statuses_inconsistences(portal): - logger.info("Fixing Analysis Request-Analyses statuses inconsistences...") - - # Walkthrough 'received' analysis requests and find inconsistences: - # If Analysis Request's state is 'received', then: - # - Sample must be in received state too - # - Sample Partitions must be in received state too - # - Analyses must be in received state too - target_state = 'sample_received' - catalog = get_tool(CATALOG_ANALYSIS_REQUEST_LISTING) - brains = catalog(portal_type='AnalysisRequest', review_state=target_state) - for brain in brains: - analysisrequest = brain.getObject() - # Check Sample - sample = analysisrequest.getSample() - if sample: - sample_state = getCurrentState(sample) - if sample_state != target_state: - if not wasTransitionPerformed(sample, 'receive'): - # Do force the state to received - logger.info("{0}: '{1}' ({2}) -> {3}".format( - 'Sample', sample.getId(), sample_state, target_state)) - changeWorkflowState(sample, 'bika_sample_workflow', - target_state) - - # Check Sample partitions - parts = sample.objectValues('SamplePartition') - for part in parts: - part_state = getCurrentState(part) - if part_state != target_state: - if not wasTransitionPerformed(part, 'receive'): - # Do force the state to received - logger.info("{0}: '{1}' ({2}) -> {3}".format( - 'SamplePartition', part.getId(), part_state, - target_state)) - changeWorkflowState(part, 'bika_sample_workflow', - target_state) - - # Check analyses - analyses = analysisrequest.getAnalyses(full_objects=True) - for analysis in analyses: - an_state = getCurrentState(analysis) - if an_state != target_state: - if not wasTransitionPerformed(analysis, 'receive'): - # Do force the state to received - logger.info("{0}: '{1}' ({2}) -> {3}".format( - 'Analysis', analysis.getId(), an_state, target_state)) - changeWorkflowState(analysis, 'bika_analysis_workflow', - target_state) - - # Force the update of role mappings - logger.info("Updating role mappings...") - wf = get_tool('portal_workflow') - wf.updateRoleMappings() - - -def change_UUIDIndex(ut): - """ - UUIDIndex behaves like a FieldIndex, but can only store one document id - per value, so there's a 1:1 mapping from value to document id. An error - is logged if a different document id is indexed for an already taken value. - - Some UUIDIndexes need to be migrated to FieldIndexes because more than one - field could contain the same UID, for instance - getOriginalReflexedAnalysisUID field. - """ - ut.delIndex(CATALOG_ANALYSIS_LISTING, 'getOriginalReflexedAnalysisUID') - ut.addIndex( - CATALOG_ANALYSIS_LISTING, - 'getOriginalReflexedAnalysisUID', - 'FieldIndex' - ) diff --git a/bika/lims/upgrade/v3_2_0_1707.py b/bika/lims/upgrade/v3_2_0_1707.py deleted file mode 100644 index 45ed164d15..0000000000 --- a/bika/lims/upgrade/v3_2_0_1707.py +++ /dev/null @@ -1,191 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2017 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. -from Acquisition import aq_inner -from Acquisition import aq_parent - -from bika.lims import logger -from bika.lims.upgrade import upgradestep -from bika.lims.upgrade.utils import UpgradeUtils -from plone.api.portal import get_tool -from Products.CMFCore.utils import getToolByName -import transaction -from Products.CMFPlone.utils import _createObjectByType -from bika.lims.utils import tmpID -from bika.lims.catalog import CATALOG_ANALYSIS_REQUEST_LISTING -from bika.lims.catalog import CATALOG_ANALYSIS_LISTING - -from Products.CMFCore.Expression import Expression -from Products.CMFCore.utils import getToolByName - -from bika.lims.catalog.report_catalog import bika_catalog_report_definition -from bika.lims.catalog.report_catalog import CATALOG_REPORT_LISTING - -product = 'bika.lims' -version = '3.2.0.1707' - - -@upgradestep(product, version) -def upgrade(tool): - portal = aq_parent(aq_inner(tool)) - setup = portal.portal_setup - ut = UpgradeUtils(portal) - ufrom = ut.getInstalledVersion(product) - if ut.isOlderVersion(product, version): - logger.info("Skipping upgrade of {0}: {1} > {2}".format( - product, ufrom, version)) - # The currently installed version is more recent than the target - # version of this upgradestep - return True - - logger.info("Upgrading {0}: {1} -> {2}".format(product, ufrom, version)) - - # importing toolset in order to add bika_catalog_report - setup.runImportStepFromProfile('profile-bika.lims:default', 'toolset') - - # Renames some guard expressions from several transitions - set_guard_expressions(portal) - - # Remove 'Date Published' from AR objects - removeDatePublishedFromAR(portal) - - # Add missing Geo Columns to AR Catalog - ut.addColumn(CATALOG_ANALYSIS_REQUEST_LISTING, 'getDistrict') - ut.addColumn(CATALOG_ANALYSIS_REQUEST_LISTING, 'getProvince') - - # Add getClientTitle to Analyses catalog to enable filtering by Client. - ut.addIndex(CATALOG_ANALYSIS_LISTING, 'getClientTitle', 'FieldIndex') - - create_report_catalog(portal, ut) - ut.refreshCatalogs() - - # Replace 'None' Categories of Analysis Services with 'Unknown' - handle_AS_wo_category(portal) - - logger.info("{0} upgraded to version {1}".format(product, version)) - return True - - -def set_guard_expressions(portal): - """Rename guard expressions of some workflow transitions - """ - logger.info('Renaming guard expressions...') - torename = { - 'bika_ar_workflow.publish': 'python:here.guard_publish_transition()', - } - wtool = get_tool('portal_workflow') - workflowids = wtool.getWorkflowIds() - for wfid in workflowids: - workflow = wtool.getWorkflowById(wfid) - transitions = workflow.transitions - for transid in transitions.objectIds(): - for torenid, newguard in torename.items(): - tokens = torenid.split('.') - if tokens[0] == wfid and tokens[1] == transid: - transition = transitions[transid] - guard = transition.getGuard() - guard.expr = Expression(newguard) - transition.guard = guard - logger.info("Guard from transition '{0}' set to '{1}'" - .format(torenid, newguard)) - - -def removeDatePublishedFromAR(portal): - """ - DatePublished field has been removed from ARs' schema, because we didn't have setter and that field was always - empty. Instead we are adding ComputedField which calls old getDatePublished() but is StringField. - """ - uc = getToolByName(portal, 'uid_catalog') - ars = uc(portal_type='AnalysisRequest') - f_name = 'DatePublished' - counter = 0 - tot_counter = 0 - total = len(ars) - for ar in ars: - obj = ar.getObject() - if hasattr(obj, f_name): - delattr(obj, f_name) - counter += 1 - tot_counter += 1 - if tot_counter % 1000 == 0: - logger.info( - "Removing Date Published attribute from " - "ARs: %d of %d" % (tot_counter, total)) - transaction.commit() - logger.info( - "'DatePublished' attribute has been removed from %d " - "AnalysisRequest objects." % counter) - - -def handle_AS_wo_category(portal): - """ - Apparently, some of Analysis Services remained without category after migration. - Creating a new Category ('unknown') and assigning those AS'es to it. - """ - uc = getToolByName(portal, 'bika_setup_catalog') - services = uc(portal_type='AnalysisService', getCategoryUID=None) - if not services: - logger.info("SKIPPING. There is no Analysis Service without category.") - return - - # First , create a new 'Uknown' Category, if doesn't exist - uc = getToolByName(portal, 'uid_catalog') - acats = uc(portal_type='AnalysisCategory') - for acat in acats: - if acat.Title == 'Unknown': - logger.info("Category 'Uknown' already exists...") - category = acat.getObject() - break - else: - category = _createObjectByType("AnalysisCategory", portal.bika_setup.bika_analysiscategories, tmpID()) - category.setTitle("Unknown") - category._renameAfterCreation() - category.reindexObject() - logger.info("Category 'Uknown' was created...") - - counter = 0 - total = len(services) - for s in services: - obj = s.getObject() - obj.setCategory(category) - obj.reindexObject() - counter += 1 - logger.info("Assigning Analysis Services to 'unknown' Category: %d of %d" % (counter, total)) - - logger.info("Done! %d AnalysisServices were assigned to the Category 'unknown'." - % counter) - - -def create_report_catalog(portal, upgrade_utils): - logger.info('Creating Report catalog') - at = getToolByName(portal, 'archetype_tool') - catalog_dict = bika_catalog_report_definition.get(CATALOG_REPORT_LISTING, {}) - report_indexes = catalog_dict.get('indexes', {}) - report_columns = catalog_dict.get('columns', []) - # create report catalog indexes - for idx in report_indexes: - upgrade_utils.addIndex(CATALOG_REPORT_LISTING, idx, report_indexes[idx]) - # create report catalog columns - for col in report_columns: - upgrade_utils.addColumn(CATALOG_REPORT_LISTING, col) - # define objects to be catalogued - at.setCatalogsByType('Report', [CATALOG_REPORT_LISTING, ]) - # retrieve brains of objects to be catalogued from UID catalog - logger.info('Recovering reports to reindex') - bika_catalog = getToolByName(portal, 'bika_catalog') - reports_brains = bika_catalog(portal_type='Report') - i = 0 # already indexed objects counter - # reindex the found objects in report catalog and uncatalog them from bika_catalog - logger.info('Reindexing reports') - for brain in reports_brains: - if i % 100 == 0: - logger.info('Reindexed {}/{} reports'.format(i, len(reports_brains))) - report_obj = brain.getObject() - report_obj.reindexObject() - # uncatalog reports from bika_catalog - path_uid = '/'.join(report_obj.getPhysicalPath()) - bika_catalog.uncatalog_object(path_uid) - i += 1 - logger.info('Reindexed {}/{} reports'.format(len(reports_brains), len(reports_brains))) - diff --git a/bika/lims/upgrade/v3_2_0_1708.py b/bika/lims/upgrade/v3_2_0_1708.py deleted file mode 100644 index ae729052a6..0000000000 --- a/bika/lims/upgrade/v3_2_0_1708.py +++ /dev/null @@ -1,87 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2017 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. -from Acquisition import aq_inner -from Acquisition import aq_parent - -from bika.lims import logger -from bika.lims.upgrade import upgradestep -from bika.lims.upgrade.utils import UpgradeUtils -import transaction -from bika.lims.catalog import CATALOG_ANALYSIS_LISTING -from bika.lims.catalog import CATALOG_ANALYSIS_REQUEST_LISTING -from Products.CMFCore.utils import getToolByName - -product = 'bika.lims' -version = '3.2.0.1708' - - -@upgradestep(product, version) -def upgrade(tool): - portal = aq_parent(aq_inner(tool)) - setup = portal.portal_setup - ut = UpgradeUtils(portal) - ufrom = ut.getInstalledVersion(product) - if ut.isOlderVersion(product, version): - logger.info("Skipping upgrade of {0}: {1} > {2}".format( - product, ufrom, version)) - # The currently installed version is more recent than the target - # version of this upgradestep - return True - - logger.info("Upgrading {0}: {1} -> {2}".format(product, ufrom, version)) - - # Importing 'typeinfo' and 'cssregistry' due to changes on Department View. - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - setup.runImportStepFromProfile('profile-bika.lims:default', 'cssregistry') - - # importing toolset in order to add bika_catalog_report - setup.runImportStepFromProfile('profile-bika.lims:default', 'toolset') - - # 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() - - # Replace empty 'DateSampled' field with 'SamplingDate' of ARs, - # which will take care of Samples as well. - set_ar_date_sampled_fields(portal) - - logger.info("{0} upgraded to version {1}".format(product, version)) - return True - - -def set_ar_date_sampled_fields(portal): - """ - For old ARs has been created in Sampling Workflow Disabled mode, - 'Date Sampled' values are empty and 'Sampling Date' was "used" as 'Date Sampled'. - Copy 'SamplingDate' values to 'DateSampled' if necessary. - """ - uc = getToolByName(portal, CATALOG_ANALYSIS_REQUEST_LISTING) - ars = uc(portal_type='AnalysisRequest') - counter = 0 - tot_counter = 0 - total = len(ars) - for ar in ars: - # Only the ARS which has Sampling Date but not Date Sampled fields - if not ar.getSamplingWorkflowEnabled and ar.getSamplingDate \ - and not ar.getDateSampled: - obj = ar.getObject() - sd = obj.getSamplingDate() - obj.setDateSampled(sd) - obj.reindexObject() - counter += 1 - - tot_counter += 1 - if tot_counter % 500 == 0: - logger.info( - "Setting missing DateSampled values of " - "ARs: %d of %d" % (tot_counter, total)) - transaction.commit() - logger.info( - "Done! 'DateSampled' field has been updated for %d " - "AnalysisRequest objects." % counter) diff --git a/bika/lims/upgrade/v3_2_0_1709.py b/bika/lims/upgrade/v3_2_0_1709.py deleted file mode 100644 index 0a1e8ef79e..0000000000 --- a/bika/lims/upgrade/v3_2_0_1709.py +++ /dev/null @@ -1,70 +0,0 @@ -# This file is part of Bika LIMS -# -# Copyright 2011-2017 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. -from Acquisition import aq_inner -from Acquisition import aq_parent - -from Products.CMFCore import permissions - -from bika.lims import logger -from bika.lims.permissions import CancelAndReinstate -from bika.lims.upgrade import upgradestep -from bika.lims.upgrade.utils import UpgradeUtils - -product = 'bika.lims' -version = '3.2.0.1709' - - -@upgradestep(product, version) -def upgrade(tool): - portal = aq_parent(aq_inner(tool)) - setup = portal.portal_setup - ut = UpgradeUtils(portal) - ufrom = ut.getInstalledVersion(product) - if ut.isOlderVersion(product, version): - logger.info("Skipping upgrade of {0}: {1} > {2}".format( - product, ufrom, version)) - # The currently installed version is more recent than the target - # version of this upgradestep - return True - logger.info("Upgrading {0}: {1} -> {2}".format(product, ufrom, version)) - setup.runImportStepFromProfile('profile-bika.lims:default', 'typeinfo') - set_methods_folder_permission(portal) - set_laboratory_folder_permission(portal) - logger.info("{0} upgraded to version {1}".format(product, version)) - return True - - -def set_methods_folder_permission(portal): - """ - Modifying permissions for methods since anonymous users had access to them. - :param portal: portal object - :return: None - """ - logger.info("Modifying permissions for methods.") - mp = portal.methods.manage_permission - mp(CancelAndReinstate, ['Manager', 'LabManager'], 0) - mp(permissions.ListFolderContents, ['Member', 'Authenticated'], 0) - mp(permissions.AddPortalContent, ['Manager', 'LabManager'], 0) - mp(permissions.DeleteObjects, ['Manager', 'LabManager'], 0) - mp(permissions.View, ['Manager', 'Member', 'Authenticated'], 0) - mp(permissions.AccessContentsInformation, - ['Manager', 'Member', 'Authenticated'], 0) - portal.methods.reindexObject() - logger.info("Permissions for methods modified.") - - -def set_laboratory_folder_permission(portal): - """ - Modifying permissions for laboratory since anonymous users had access - to it. - :param portal: portal object - :return: None - """ - logger.info("Modifying permissions for laboratory.") - mp = portal.bika_setup.laboratory.manage_permission - mp(permissions.AccessContentsInformation, ['Authenticated'], 0) - mp(permissions.View, ['Authenticated'], 0) - portal.bika_setup.laboratory.reindexObject() - logger.info("Permissions for laboratory modified.") diff --git a/setup.py b/setup.py index 105bf9aa9b..a324ef0e6e 100644 --- a/setup.py +++ b/setup.py @@ -1,15 +1,15 @@ -# This file is part of Bika LIMS +# This file is part of Bika LIMS Evo # -# Copyright 2011-2016 by it's authors. -# Some rights reserved. See LICENSE.txt, AUTHORS.txt. +# Copyright 2017 by it's authors. +# Some rights reserved. See LICENSE.rst, CONTRIBUTORS.rst. from setuptools import setup, find_packages -version = '3.2.0.1710' +version = '1.0.0' setup(name='bika.lims', version=version, - description="Bika LIMS", + description="Bika LIMS Evo", long_description=open("README.rst").read() + "\n" + open("CHANGES.rst").read() + "\n", # Get more strings from