Completed
Pull Request — 2.x (#1792)
by Ramon
05:23
created

senaite.core.browser.modals.remarks   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 33
dl 0
loc 43
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 14 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 pologgb.lims import logger
7
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
8
from senaite.core.browser.modals import Modal
9
10
11
class SetAnalysisRemarksModal(Modal):
12
    template = ViewPageTemplateFile("templates/set_analysis_remarks.pt")
13
14
    def __init__(self, context, request):
15
        super(SetAnalysisRemarksModal, self).__init__(context, request)
16
17
    def __call__(self):
18
        if self.request.form.get("submitted", False):
19
            self.handle_submit(REQUEST=self.request)
20
        return self.template()
21
22
    def handle_submit(self, REQUEST=None):
23
        analyses = map(api.get_object_by_uid, self.uids)
24
        remarks = self.request.get("remarks")
25
        overwrite = self.request.form.get("overwrite") or False
26
        for analysis in analyses:
27
            self.set_remarks_for(analysis, remarks, overwrite=overwrite)
28
29
    def set_remarks_for(self, analysis, remarks, overwrite=True):
30
        """Set the remarks on the given analyses
31
        """
32
        logger.info("Set remarks for analysis '{}' to {}"
33
                    .format(analysis.getId(), remarks))
34
        if not check_permission(FieldEditAnalysisRemarks, analysis):
35
            logger.warn("Not allowed to set remarks for {}"
36
                        .format(analysis.getId()))
37
            return False
38
        if not overwrite:
39
            remarks = "{}\n{}".format(analysis.getRemarks(), remarks)
40
        analysis.setRemarks(api.safe_unicode(remarks))
41
        analysis.reindexObject()
42
        return True
43