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.

Signed-off-by: Owen Leonard <oleonard@myacpl.org>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Lari Taskula 2017-11-16 14:24:52 +02:00 committed by Jonathan Druart
parent dccb3a3414
commit f6574fa7dc
1 changed files with 20 additions and 0 deletions

View File

@ -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();