Bug 9224: Make acqui/finishreceive.pl Plack-compatible
authorJacek Ablewicz <abl@biblos.pk.edu.pl>
Wed, 16 Oct 2013 15:31:04 +0000 (17:31 +0200)
committerGalen Charlton <gmc@esilibrary.com>
Fri, 13 Dec 2013 18:23:26 +0000 (18:23 +0000)
Under Plack/mod_perl wrapping, sub update_item() will become a closure,
so after the 1st run it will retain its own private instances of the
following variables: $booksellerid, $datereceived, $unitprice, $rrp,
$biblionumber.

I.e., in case update_item() gets invoked 2nd+ time (inside
the same process, but for different-subsequent receives) it may
incorrectly flag the (old, wrong) biblionumber for Zebra reindexing,
and erronously modify the current item[s] with the previously
used (wrong) values.

This simple patch should make acqui/finishreceive.pl Plack-compatible.

Test plan:
Test patched acqui/finishreceive.pl script (create and receive some
orders w/ items, etc.). Ensure items are gettting added and/or modified
correctly during receiving process.

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Passes koha-qa.pl, works as advertised, no regressions found.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
acqui/finishreceive.pl

index 900733d..ea9c9a2 100755 (executable)
@@ -153,20 +153,16 @@ if ($quantityrec > $origquantityrec ) {
     }
 }
 
-update_item( $_ ) foreach GetItemnumbersFromOrder( $ordernumber );
-
-print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid");
-
-################################ End of script ################################
-
-sub update_item {
-    my ( $itemnumber ) = @_;
-
-    ModItem( {
+ModItem(
+    {
         booksellerid         => $booksellerid,
         dateaccessioned      => $datereceived,
         price                => $unitprice,
         replacementprice     => $rrp,
         replacementpricedate => $datereceived,
-    }, $biblionumber, $itemnumber );
-}
+    },
+    $biblionumber,
+    $_
+) foreach GetItemnumbersFromOrder($ordernumber);
+
+print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid");