Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New sample fields: Diagnosis, Additional Notes, Case Status, Case Outcome #5

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Changelog
1.1.0 (unreleased)
------------------

- #5 New sample fields: Diagnosis, Additional Notes, Case Status, Case Outcome

1.0.1 (2024-01-16)
------------------
Expand Down
1 change: 1 addition & 0 deletions src/senaite/diagnosis/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from config import PRODUCT_NAME

messageFactory = MessageFactory(PRODUCT_NAME)
_ = messageFactory
logger = logging.getLogger(PRODUCT_NAME)


Expand Down
1 change: 1 addition & 0 deletions src/senaite/diagnosis/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<include package=".patches"/>
<include package=".subscribers"/>
<include package=".upgrade"/>
<include package=".vocabularies"/>

<!-- Default profile -->
<genericsetup:registerProfile
Expand Down
100 changes: 100 additions & 0 deletions src/senaite/diagnosis/content/analysisrequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,26 @@

from archetypes.schemaextender.interfaces import IBrowserLayerAwareExtender
from archetypes.schemaextender.interfaces import ISchemaExtender
from bika.lims.browser.widgets import SelectionWidget
from bika.lims.interfaces import IAnalysisRequest
from Products.Archetypes.Widget import TextAreaWidget
from Products.CMFCore.permissions import View
from senaite.core.browser.widgets import DateTimeWidget
from senaite.core.browser.widgets import ReferenceWidget
from senaite.core.catalog import SETUP_CATALOG
from senaite.diagnosis import messageFactory as _
from senaite.diagnosis import permissions
from senaite.diagnosis.content.fields import ExtDateTimeField
from senaite.diagnosis.content.fields import ExtStringField
from senaite.diagnosis.content.fields import ExtTextField
from senaite.diagnosis.content.fields import ExtUIDReferenceField
from senaite.diagnosis.interfaces import ISenaiteDiagnosisLayer
from senaite.diagnosis.permissions import FieldEditAdditionalNotes
from senaite.diagnosis.permissions import FieldEditCaseOutcome
from senaite.diagnosis.permissions import FieldEditCaseStatus
from senaite.diagnosis.permissions import FieldEditDiagnosis
from senaite.diagnosis.vocabularies.case import CASE_OUTCOMES_VOCABULARY_ID
from senaite.diagnosis.vocabularies.case import CASE_STATUSES_VOCABULARY_ID
from zope.component import adapter
from zope.interface import implementer

Expand Down Expand Up @@ -170,6 +180,96 @@
)
),

ExtTextField(
"Diagnosis",
read_permission=View,
write_permission=FieldEditDiagnosis,
widget=TextAreaWidget(
label=_(
u"label_sample_diagnosis",
default=u"Diagnosis",
),
description=_(
u"description_sample_diagnosis",
default=u"Assessment or identification of the disease, "
u"condition, or injury affecting the patient, based "
u"on observed signs and reported symptoms",
),
render_own_label=True,
visible={
"add": "edit",
},
rows=4,
)
),

ExtTextField(
"AdditionalNotes",
read_permission=View,
write_permission=FieldEditAdditionalNotes,
widget=TextAreaWidget(
label=_(
u"label_sample_additional_notes",
default=u"Additional notes",
),
description=_(
u"description_sample_additional_notes",
default=u"Additional details about the patient's condition or "
u"other relevant information that may assist with "
u"diagnosis and interpretation",
),
render_own_label=True,
visible={
"add": "edit",
},
rows=4,
)
),

ExtStringField(
"CaseStatus",
read_permission=View,
write_permission=FieldEditCaseStatus,
vocabulary_factory=CASE_STATUSES_VOCABULARY_ID,
widget=SelectionWidget(
label=_(
u"label_sample_case_status",
default=u"Case status",
),
description=_(
u"description_sample_case_status",
default=u"Classification of the case based on its context or "
u"investigation type"
),
format="select",
visible={
"add": "edit",
},
)
),

ExtStringField(
"CaseOutcome",
read_permission=View,
write_permission=FieldEditCaseOutcome,
vocabulary_factory=CASE_OUTCOMES_VOCABULARY_ID,
widget=SelectionWidget(
label=_(
u"label_sample_case_outcome",
default=u"Case outcome",
),
description=_(
u"description_sample_case_outcome",
default=u"Result of the case based on the patient's condition "
u"or treatment outcome"
),
format="select",
visible={
"add": "edit",
},
)
),

]


Expand Down
23 changes: 22 additions & 1 deletion src/senaite/diagnosis/content/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,22 @@
# Copyright 2022-2024 by it's authors.
# Some rights reserved, see README and LICENSE.

from archetypes.schemaextender.field import ExtensionField
from archetypes.schemaextender.field import ExtensionField as ATExtensionField
from bika.lims.browser.fields import UIDReferenceField
from Products.Archetypes.Field import StringField
from Products.Archetypes.public import TextField
from senaite.core.browser.fields.datetime import DateTimeField


class ExtensionField(ATExtensionField):
"""Mix-in class to make Archetypes fields not depend on generated accessors
and mutators, and use AnnotationStorage by default
"""

def __init__(self, *args, **kwargs):
super(ExtensionField, self).__init__(*args, **kwargs)


class ExtUIDReferenceField(ExtensionField, UIDReferenceField):
"""Field Extender of core's UIDReferenceField for AT types
"""
Expand All @@ -31,3 +42,13 @@ class ExtUIDReferenceField(ExtensionField, UIDReferenceField):
class ExtDateTimeField(ExtensionField, DateTimeField):
"""Field extender of core's DateTimeField
"""


class ExtStringField(ExtensionField, StringField):
"""Field extender of StringField
"""


class ExtTextField(ExtensionField, TextField):
"""Extended Text Field
"""
48 changes: 48 additions & 0 deletions src/senaite/diagnosis/patches/content/analysisrequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,3 +94,51 @@ def setEtiologicAgents(self, value): # noqa camelcase
"""Sets the etiologic agents to the sample
"""
self.getField("EtiologicAgents").set(self, value)


def getDiagnosis(self): # noqa camelcase
"""Returns the determined diagnosis
"""
return self.getField("Diagnosis").get(self)


def setDiagnosis(self, value): # noqa camelcase
"""Sets the determined diagnosis
"""
self.getField("Diagnosis").set(self, value)


def getAdditionalNotes(self): # noqa camelcase
"""Returns the additional information provided for this sample
"""
return self.getField("AdditionalNotes").get(self)


def setAdditionalNotes(self, value): # noqa camelcase
"""Sets the additional information provided for this sample
"""
self.getField("AdditionalNotes").set(self, value)


def getCaseStatus(self): # noqa camelcase
"""Returns the case status of this sample
"""
return self.getField("CaseStatus").get(self)


def setCaseStatus(self, value): # noqa camelcase
"""Sets the case status for this sample
"""
self.getField("CaseStatus").set(self, value)


def getCaseOutcome(self): # noqa camelcase
"""Returns the case outcome of this sample
"""
return self.getField("CaseOutcome").get(self)


def setCaseOutcome(self, value): # noqa camelcase
"""Sets the case outcome for this sample
"""
self.getField("CaseOutcome").set(self, value)
48 changes: 48 additions & 0 deletions src/senaite/diagnosis/patches/content/analysisrequest.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,52 @@
ignoreOriginal="True"
replacement=".analysisrequest.setEtiologicAgents" />

<monkey:patch
class="bika.lims.content.analysisrequest.AnalysisRequest"
original="getDiagnosis"
ignoreOriginal="True"
replacement=".analysisrequest.getDiagnosis" />

<monkey:patch
class="bika.lims.content.analysisrequest.AnalysisRequest"
original="setDiagnosis"
ignoreOriginal="True"
replacement=".analysisrequest.setDiagnosis" />

<monkey:patch
class="bika.lims.content.analysisrequest.AnalysisRequest"
original="getAdditionalNotes"
ignoreOriginal="True"
replacement=".analysisrequest.getAdditionalNotes" />

<monkey:patch
class="bika.lims.content.analysisrequest.AnalysisRequest"
original="setAdditionalNotes"
ignoreOriginal="True"
replacement=".analysisrequest.setAdditionalNotes" />

<monkey:patch
class="bika.lims.content.analysisrequest.AnalysisRequest"
original="getCaseStatus"
ignoreOriginal="True"
replacement=".analysisrequest.getCaseStatus" />

<monkey:patch
class="bika.lims.content.analysisrequest.AnalysisRequest"
original="setCaseStatus"
ignoreOriginal="True"
replacement=".analysisrequest.setCaseStatus" />

<monkey:patch
class="bika.lims.content.analysisrequest.AnalysisRequest"
original="getCaseOutcome"
ignoreOriginal="True"
replacement=".analysisrequest.getCaseOutcome" />

<monkey:patch
class="bika.lims.content.analysisrequest.AnalysisRequest"
original="setCaseOutcome"
ignoreOriginal="True"
replacement=".analysisrequest.setCaseOutcome" />

</configure>
4 changes: 4 additions & 0 deletions src/senaite/diagnosis/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,7 @@
FieldEditEtiologicAgents = "senaite.diagnosis: Field: Edit Etiologic Agents"
FieldEditDiseases = "senaite.diagnosis: Field: Edit Diseases"
FieldEditSymptoms = "senaite.diagnosis: Field: Edit Symptoms"
FieldEditDiagnosis = "senaite.diagnosis: Field: Edit Diagnosis"
FieldEditAdditionalNotes = "senaite.diagnosis: Field: Edit Additional Notes"
FieldEditCaseStatus = "senaite.diagnosis: Field: Edit Case Status"
FieldEditCaseOutcome = "senaite.diagnosis: Field: Edit Case Outcome"
4 changes: 4 additions & 0 deletions src/senaite/diagnosis/permissions.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,9 @@
<permission id="senaite.diagnosis.permissions.FieldEditDiseases" title="senaite.diagnosis: Field: Edit Diseases"/>
<permission id="senaite.diagnosis.permissions.FieldEditEtiologicAgents" title="senaite.diagnosis: Field: Edit Etiologic Agents"/>
<permission id="senaite.diagnosis.permissions.FieldEditSymptoms" title="senaite.diagnosis: Field: Edit Symptoms"/>
<permission id="senaite.diagnosis.permissions.FieldEditDiagnosis" title="senaite.diagnosis: Field: Edit Diagnosis"/>
<permission id="senaite.diagnosis.permissions.FieldEditAdditionalNotes" title="senaite.diagnosis: Field: Edit Additional Notes"/>
<permission id="senaite.diagnosis.permissions.FieldEditCaseStatus" title="senaite.diagnosis: Field: Edit Case Status"/>
<permission id="senaite.diagnosis.permissions.FieldEditCaseOutcome" title="senaite.diagnosis: Field: Edit Case Outcome"/>

</configure>
2 changes: 1 addition & 1 deletion src/senaite/diagnosis/profiles/default/metadata.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
dependencies before installing this add-on own profile.
-->
<metadata>
<version>1100</version>
<version>1101</version>

<!-- Be sure to install the following dependencies if not yet installed -->
<dependencies>
Expand Down
24 changes: 24 additions & 0 deletions src/senaite/diagnosis/profiles/default/rolemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,30 @@
<role name="Manager"/>
<role name="Client"/>
</permission>
<permission name="senaite.diagnosis: Field: Edit Diagnosis" acquire="False">
<role name="LabClerk"/>
<role name="LabManager"/>
<role name="Manager"/>
<role name="Client"/>
</permission>
<permission name="senaite.diagnosis: Field: Edit Additional Notes" acquire="False">
<role name="LabClerk"/>
<role name="LabManager"/>
<role name="Manager"/>
<role name="Client"/>
</permission>
<permission name="senaite.diagnosis: Field: Edit Case Status" acquire="False">
<role name="LabClerk"/>
<role name="LabManager"/>
<role name="Manager"/>
<role name="Client"/>
</permission>
<permission name="senaite.diagnosis: Field: Edit Case Outcome" acquire="False">
<role name="LabClerk"/>
<role name="LabManager"/>
<role name="Manager"/>
<role name="Client"/>
</permission>

</permissions>

Expand Down
Loading