Passed
Push — 2.x ( 15b24b...cf7444 )
by Jordi
05:33
created

senaite.core.browser.modals.remarks   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 36
dl 0
loc 46
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A SetAnalysisRemarksModal.__call__() 0 4 2
A SetAnalysisRemarksModal.__init__() 0 2 1
A SetAnalysisRemarksModal.handle_submit() 0 6 2
A SetAnalysisRemarksModal.set_remarks_for() 0 15 3
1
# -*- coding: utf-8 -*-
2
3
from bika.lims import api
4
from bika.lims.api.security import check_permission
5
from bika.lims.permissions import FieldEditAnalysisRemarks
6
from Products.Archetypes.event import ObjectEditedEvent
7
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
8
from senaite.core import logger
9
from senaite.core.browser.modals import Modal
10
from zope import event
11
12
13
class SetAnalysisRemarksModal(Modal):
14
    template = ViewPageTemplateFile("templates/set_analysis_remarks.pt")
15
16
    def __init__(self, context, request):
17
        super(SetAnalysisRemarksModal, self).__init__(context, request)
18
19
    def __call__(self):
20
        if self.request.form.get("submitted", False):
21
            self.handle_submit(REQUEST=self.request)
22
        return self.template()
23
24
    def handle_submit(self, REQUEST=None):
25
        analyses = map(api.get_object_by_uid, self.uids)
26
        remarks = self.request.get("remarks")
27
        overwrite = self.request.form.get("overwrite") or False
28
        for analysis in analyses:
29
            self.set_remarks_for(analysis, remarks, overwrite=overwrite)
30
31
    def set_remarks_for(self, analysis, remarks, overwrite=True):
32
        """Set the remarks on the given analyses
33
        """
34
        logger.info("Set remarks for analysis '{}' to {}"
35
                    .format(analysis.getId(), remarks))
36
        if not check_permission(FieldEditAnalysisRemarks, analysis):
37
            logger.warn("Not allowed to set remarks for {}"
38
                        .format(analysis.getId()))
39
            return False
40
        if not overwrite:
41
            remarks = "{}\n{}".format(analysis.getRemarks(), remarks)
42
        analysis.setRemarks(api.safe_unicode(remarks))
43
        analysis.reindexObject()
44
        event.notify(ObjectEditedEvent(analysis))
45
        return True
46