Skip to content

Commit

Permalink
Added upgrade step to fix samples in registered status
Browse files Browse the repository at this point in the history
  • Loading branch information
xispa committed Nov 15, 2023
1 parent dc10d8b commit 865ee4a
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/senaite/core/profiles/default/metadata.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<metadata>
<version>2520</version>
<version>2521</version>
<dependencies>
<dependency>profile-Products.ATContentTypes:base</dependency>
<dependency>profile-Products.CMFEditions:CMFEditions</dependency>
Expand Down
70 changes: 68 additions & 2 deletions src/senaite/core/upgrade/v02_05_000.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@
import transaction
from Acquisition import aq_base
from bika.lims import api
from bika.lims.interfaces import IReceived
from bika.lims.utils import changeWorkflowState
from senaite.core import logger
from senaite.core.api import security
from senaite.core.api.catalog import add_index
from senaite.core.api.catalog import del_column
from senaite.core.api.catalog import del_index
Expand All @@ -34,17 +37,21 @@
from senaite.core.catalog import SETUP_CATALOG
from senaite.core.config import PROJECTNAME as product
from senaite.core.permissions import ManageBika
from senaite.core.permissions import TransitionReceiveSample
from senaite.core.registry import get_registry_record
from senaite.core.setuphandlers import CATALOG_MAPPINGS
from senaite.core.setuphandlers import _run_import_step
from senaite.core.setuphandlers import add_dexterity_items
from senaite.core.setuphandlers import CATALOG_MAPPINGS
from senaite.core.setuphandlers import setup_auditlog_catalog_mappings
from senaite.core.setuphandlers import setup_catalog_mappings
from senaite.core.setuphandlers import setup_core_catalogs
from senaite.core.setuphandlers import setup_portal_catalog
from senaite.core.upgrade import upgradestep
from senaite.core.upgrade.utils import UpgradeUtils
from senaite.core.upgrade.utils import uncatalog_brain
from senaite.core.upgrade.utils import UpgradeUtils
from senaite.core.workflow import ANALYSIS_WORKFLOW
from senaite.core.workflow import SAMPLE_WORKFLOW
from zope.interface import alsoProvides

PORTAL_CATALOG = "portal_catalog"

Expand Down Expand Up @@ -482,3 +489,62 @@ def reindex_control_analyses(tool):
obj._p_deactivate()

logger.info("Reindexing control analyses [DONE]")


def fix_samples_registered(tool):
"""Transitions the samples in "registered" status to a suitable status,
either "sample_due", "recieved", or "to_be_sampled"
"""
logger.info("Fixing samples in 'registered' status ...")

setup = api.get_setup()
auto_receive = setup.getAutoreceiveSamples()
query = {"review_state": "sample_registered"}
brains = api.search(query, SAMPLE_CATALOG)
total = len(brains)
for num, brain in enumerate(brains):
if num and num % 100 == 0:
logger.info("Fixing samples in 'registered' status: {}/{}"
.format(num, total))

sample = api.get_object(brain)

creator = sample.Creator()
if sample.getSamplingRequired():
# sample has not been collected yet
changeWorkflowState(sample, SAMPLE_WORKFLOW, "to_be_sampled",
actor=creator, action="to_be_sampled")
sample._p_deactivate()
continue

if auto_receive:
user = security.get_user(sample.creator())
if user.has_permission(TransitionReceiveSample, sample):
# Change status to sample_received
changeWorkflowState(sample, SAMPLE_WORKFLOW, "sample_received",
actor=creator, action="receive")

# Mark the secondary as received
alsoProvides(sample, IReceived)

# Set same received date as created
created = api.get_creation_date(sample)
sample.setDateReceived(created)

# Initialize analyses
for obj in sample.objectValues():
if obj.portal_type != "Analysis":
continue
if api.get_review_status(obj) != "registered":
continue
changeWorkflowState(obj, ANALYSIS_WORKFLOW, "unassigned",
actor=creator, action="initialize")
sample._p_deactivate()
continue

# sample_due is the default initial status of the sample
changeWorkflowState(sample, SAMPLE_WORKFLOW, "sample_due",
actor=creator, action="no_sampling_workflow")
sample._p_deactivate()

logger.info("Fixing samples in 'registered' status [DONE]")
8 changes: 8 additions & 0 deletions src/senaite/core/upgrade/v02_05_000.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="senaite.core">

<genericsetup:upgradeStep
title="SENAITE.CORE 2.5.0: Fix samples in registered status"
description="Fixes the status of samples in registere status"
source="2520"
destination="2521"
handler=".v02_05_000.fix_samples_registered"
profile="senaite.core:default"/>

<genericsetup:upgradeStep
title="SENAITE.CORE 2.5.0: Import Workflow"
description="Update Managed Permissions of Sample Workflow"
Expand Down

0 comments on commit 865ee4a

Please sign in to comment.