diff --git a/CHANGES.rst b/CHANGES.rst index b064d048ba..0af55a3d14 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -26,6 +26,7 @@ Changelog **Fixed** +- #1444 Fixed Worksheet autofill of wide Iterims - #1443 Fix non-saving checkbox values for manual Interims in Analysis Services - #1439 Fix global Auditlog when Analyses/Attachments were removed - #1426 Render HTML Texts in Info Popups correctly diff --git a/bika/lims/browser/js/bika.lims.worksheet.js b/bika/lims/browser/js/bika.lims.worksheet.js index 3ec8865361..575d770274 100644 --- a/bika/lims/browser/js/bika.lims.worksheet.js +++ b/bika/lims/browser/js/bika.lims.worksheet.js @@ -1113,22 +1113,32 @@ /* * Eventhandler when the wide interim apply button was clicked */ - var $el, analysis, empty_only, interim; + var $el, analysis, empty_only, interim, set_value, value; console.debug("°°° WorksheetManageResultsView::on_wideinterims_apply_click °°°"); event.preventDefault(); $el = $(event.currentTarget); analysis = $("#wideinterims_analyses").val(); interim = $("#wideinterims_interims").val(); empty_only = $("#wideinterims_empty").is(":checked"); - return $("tr td input[column_key='" + interim + "']").each(function(index, element) { + value = $("#wideinterims_value").val(); + set_value = function(input, value) { + var evt, nativeInputValueSetter; + nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set; + nativeInputValueSetter.call(input, value); + evt = new Event('input', { + bubbles: true + }); + return input.dispatchEvent(evt); + }; + return $("tr td input[column_key='" + interim + "']").each(function(index, input) { if (empty_only) { if ($(this).val() === "" || $(this).val().match(/\d+/) === "0") { - $(this).val($("#wideinterims_value").val()); + set_value(input, value); } } else { - $(this).val($("#wideinterims_value").val()); + set_value(input, value); } - return $(this).trigger("change"); + return true; }); }; diff --git a/bika/lims/browser/js/coffee/bika.lims.worksheet.coffee b/bika/lims/browser/js/coffee/bika.lims.worksheet.coffee index b035ae4d6b..3dfcefdb8b 100644 --- a/bika/lims/browser/js/coffee/bika.lims.worksheet.coffee +++ b/bika/lims/browser/js/coffee/bika.lims.worksheet.coffee @@ -1040,11 +1040,24 @@ class window.WorksheetManageResultsView analysis = $("#wideinterims_analyses").val() interim = $("#wideinterims_interims").val() empty_only = $("#wideinterims_empty").is(":checked") - - $("tr td input[column_key='#{interim}']").each (index, element) -> + value = $("#wideinterims_value").val() + + # N.B.: Workaround to notify the ReactJS listing component about the changed + # values + set_value = (input, value) -> + # Manually select the checkbox of this row + # https://github.com/senaite/senaite.core/issues/1202 + # https://stackoverflow.com/questions/23892547/what-is-the-best-way-to-trigger-onchange-event-in-react-js + # TL;DR: React library overrides input value setter + nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set + nativeInputValueSetter.call(input, value) + evt = new Event('input', {bubbles: true}) + input.dispatchEvent(evt) + + $("tr td input[column_key='#{interim}']").each (index, input) -> if empty_only if $(this).val() == "" or $(this).val().match(/\d+/) == "0" - $(this).val $("#wideinterims_value").val() + set_value input, value else - $(this).val $("#wideinterims_value").val() - $(this).trigger "change" + set_value input, value + return true diff --git a/bika/lims/browser/worksheet/views/results.py b/bika/lims/browser/worksheet/views/results.py index 9b095b0f55..0b93c3a0a4 100644 --- a/bika/lims/browser/worksheet/views/results.py +++ b/bika/lims/browser/worksheet/views/results.py @@ -164,10 +164,6 @@ def get_wide_interims(self): if analysis.getKeyword() in outdict.keys(): continue - calculation = analysis.getCalculation() - if not calculation: - continue - andict = { "analysis": analysis.Title(), "keyword": analysis.getKeyword(), @@ -179,12 +175,6 @@ def get_wide_interims(self): if field.get("wide", False): andict["interims"][field["keyword"]] = field - # Interims from calculation - for field in calculation.getInterimFields(): - if field["keyword"] not in andict["interims"].keys() \ - and field.get("wide", False): - andict["interims"][field["keyword"]] = field - if andict["interims"]: outdict[analysis.getKeyword()] = andict return outdict