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
|
|
|
|