diff --git a/CHANGES.rst b/CHANGES.rst index 462bd2746c..bbb913790d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -33,6 +33,7 @@ Changelog **Fixed** +- #1452 Fix missing error percentage calculation for reference samples - #1447 New Client contact has access to last client's Sample only - #1446 Parameter `group` in `contact._addUserToGroup` was not considered - #1444 Fixed Worksheet autofill of wide Iterims diff --git a/bika/lims/browser/referencesample.py b/bika/lims/browser/referencesample.py index b2a4cfb4b0..e217b3df74 100644 --- a/bika/lims/browser/referencesample.py +++ b/bika/lims/browser/referencesample.py @@ -348,6 +348,7 @@ def folderitem(self, obj, item, index): item["result"] = ref_result.get("result") item["min"] = ref_result.get("min") item["max"] = ref_result.get("max") + item["error"] = ref_result.get("error") # Icons after_icons = "" diff --git a/bika/lims/browser/widgets/referenceresultswidget.py b/bika/lims/browser/widgets/referenceresultswidget.py index 63d614b69a..9ba7161345 100644 --- a/bika/lims/browser/widgets/referenceresultswidget.py +++ b/bika/lims/browser/widgets/referenceresultswidget.py @@ -47,8 +47,6 @@ def __init__(self, context, request, fieldvalue=[], allow_edit=True): } self.context_actions = {} - - self.show_column_toggles = False self.show_select_column = True self.show_select_all_checkbox = True self.pagesize = 999999 @@ -162,6 +160,7 @@ def folderitem(self, obj, item, index): item["result"] = rr.get("result", "") item["min"] = rr.get("min", "") item["max"] = rr.get("max", "") + item["error"] = rr.get("error", "") # Icons after_icons = "" @@ -224,16 +223,24 @@ def process_form(self, instance, field, form, # If neither min nor max have been set, assume we only accept a # discrete result (like if % of error was 0). + s_err = self._get_spec_value(form, uid, "error") s_min = self._get_spec_value(form, uid, "min", result) s_max = self._get_spec_value(form, uid, "max", result) + # If an error percentage was given, calculate the min/max from the + # error percentage + if s_err: + s_min = float(result) * (1 - float(s_err)/100) + s_max = float(result) * (1 + float(s_err)/100) + service = api.get_object_by_uid(uid) values[uid] = { "keyword": service.getKeyword(), "uid": uid, "result": result, "min": s_min, - "max": s_max + "max": s_max, + "error": s_err } return values.values(), {} diff --git a/bika/lims/content/analysisspec.py b/bika/lims/content/analysisspec.py index 6029c3e8e9..790b13129f 100644 --- a/bika/lims/content/analysisspec.py +++ b/bika/lims/content/analysisspec.py @@ -221,6 +221,7 @@ def __init__(self, *arg, **kw): super(ResultsRangeDict, self).__init__(*arg, **kw) self["min"] = self.min self["max"] = self.max + self["error"] = self.error self["warn_min"] = self.warn_min self["warn_max"] = self.warn_max self["min_operator"] = self.min_operator @@ -234,6 +235,10 @@ def min(self): def max(self): return self.get("max", '') + @property + def error(self): + return self.get("error", '') + @property def warn_min(self): return self.get("warn_min", self.min)