Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed Worksheet autofill of wide Iterims #1444

Merged
merged 5 commits into from
Sep 20, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 15 additions & 5 deletions bika/lims/browser/js/bika.lims.worksheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
});
};

Expand Down
23 changes: 18 additions & 5 deletions bika/lims/browser/js/coffee/bika.lims.worksheet.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -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
10 changes: 0 additions & 10 deletions bika/lims/browser/worksheet/views/results.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand All @@ -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
Expand Down