From 056331386c9cadb734198d3730764f468ca48ab6 Mon Sep 17 00:00:00 2001 From: Lari Taskula Date: Thu, 16 Nov 2017 14:24:52 +0200 Subject: [PATCH] Bug 19636: Hold priority changes incorrectly via dropdown select This patch sorts holds in UI after priority is changed via "Priority" dropdown. It fixes confusion where the form is posted and each row is individually processed one by one - and due to conflict in priority value, the latter row always gets the chosen value instead of what the user actually might have wanted to change. To reproduce: 1. Place 3 holds on a record 2. See existing holds (cgi-bin/koha/reserve/request.pl?biblionumber=XXX) 3. By using the dropdown menu under "Priority" column, change the first hold's priority to last (3). Do not touch other priorities. 4. Click Update hold(s) 5. Observe the hold did not get your selected priority 3, but 2 instead. To test: 1. Apply patch 2. Place 3 holds on a record 3. See existing holds (cgi-bin/koha/reserve/request.pl?biblionumber=XXX) 4. By using the dropdown menu under "Priority" column, change the first hold's priority to last (3). Do not touch other priorities. 5. Observe this hold was automatically moved to the last row in the user interface. 6. Click Update hold(s) 7. Observe the hold has your selected priority 3. --- .../intranet-tmpl/prog/en/modules/reserve/request.tt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt index 02c50b9..4f71a12 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -161,6 +161,26 @@ function checkMultiHold() { $("#requestany").prop("checked",true); } }); + var prev_rank_request; + $("select[name=rank-request]").on("focus", function() { + prev_rank_request = $(this).val(); + }).change(function() { + var row = $(this).parents("tr:first"); + var value = parseInt($(this).val()); + var after = row.parent().find("tr:nth-child("+(value+1)+")"); + + if (prev_rank_request > value) { + row.insertBefore(after); + } else { + row.insertAfter(after); + } + + var next_priority = 1; + $("select[name=rank-request]").each(function () { + $(this).val(next_priority); + next_priority++; + }); + }); $(".clear-date").on("click",function(e){ e.preventDefault(); -- 2.7.4