Bug 7940 - Placing a hold on a single item from the staff cart causes errors
authorKyle M Hall <kyle@bywatersolutions.com>
Tue, 10 Apr 2012 15:36:36 +0000 (11:36 -0400)
committerPaul Poulain <paul.poulain@biblibre.com>
Thu, 12 Apr 2012 15:58:49 +0000 (17:58 +0200)
This is caused by the javascript function placeHold() in basket.pl
The cause of this error is thus: when a staff member uses the cart
to place holds on multiple items at once, the cart redirects to
reserver/request.pl with the params 'biblionumbers' ( a string of
biblionumbers separated by slashes ( e.g. '5/4/3/' ) and the param
multi_hold with a value of 1.

When multi_hold is enabled, request.pl splits the string 'biblionumbers'
on those slashes and works on that list.

In placeHold(), when only one item is checked, the system passes
the param biblionumbers with a single biblionumber ( e.g. '5/' )
and does *not* pass the multi_hold param. This causes request.pl
to not parse the biblionumbers param, and thus reserve.pl has
no biblionumber to work on ( hence our error here ).

There are two options to resolve this:
A) Add the multi_hold param even for a single hold from the cart.
B) In the event of a single hold being placed from the cart,
   switch to the standard single hold url ( i.e. request.pl?biblionumber=234 )

This commit resolves the situation using option B, as it seems more
logical than using the multi-holds system for a single hold.

Signed-off-by: Liz Rea <wizzyrea@gmail.com>
passes tests, works as advertised. Good catch!

Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt

index b575fe9..2fd8832 100644 (file)
@@ -29,15 +29,22 @@ function placeHold () {
         alert(MSG_NO_RECORD_SELECTED);
         return false;
     }
-    var bibs = "";
-    var badBibs = false;
-    $(checkedItems).each(function() {
-        var bib = $(this).val();
-        bibs += bib + "/";
-    });
-
-    var newloc = "/cgi-bin/koha/reserve/request.pl?biblionumbers=" + bibs;
-    if ($(checkedItems).size() > 1) { newloc += "&multi_hold=1"; }
+
+    var newloc;
+
+    if ($(checkedItems).size() > 1) {
+        var bibs = "";
+        $(checkedItems).each(function() {
+            var bib = $(this).val();
+            bibs += bib + "/";
+        });
+
+        newloc = "/cgi-bin/koha/reserve/request.pl?biblionumbers=" + bibs + "&multi_hold=1";
+    } else {
+        var bib = checkedItems[0].value;
+        newloc = "/cgi-bin/koha/reserve/request.pl?biblionumber=" + bib;
+    }
+
     window.opener.location = newloc;
     window.close();
 }