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