Bug 9948: fix creation/updating of items when partially receiving an order
authorJacek Ablewicz <abl@biblos.pk.edu.pl>
Sat, 14 Dec 2013 11:07:11 +0000 (12:07 +0100)
committerGalen Charlton <gmc@esilibrary.com>
Mon, 23 Dec 2013 16:02:32 +0000 (16:02 +0000)
Problem summary: when doing partial receives for the given order -
1) if AcqCreateItem is set to 'ordering', various item data (price,
dateaccessioned, replacementprice, replacementpricedate) are getting
erroneously updated on the wrong (yet to be received == not the ones
being currently received) item records
2) if AcqCreateItem is set to 'receiving', newly received
item records are being created without the aforementioned fields
set to the proper values

This (trivial) patch should deal with both cases, hopefully without
breaking enything else.

To test:
- apply the patch,
- create some orders with 2+ quantity
- test partial & non-partial receives for those orders
- ensure the received item records are getting modified
(for AcqCreateItem set to 'ordering') and/or created (for AcqCreateItem
set to 'receiving') correctly for both partial and non-partial receives
- receiving orders with quantity = 1 / receiving orders in non-partial
mode should be still working fine for 1) & 2) scenarios (i.e.,
AcqCreateItem set to 'ordering' / AcqCreateItem set to 'receiving')

Signed-off-by: Nicole C. Engard <nengard@bywatersolutions.com>
Works as I'd expect now! Awesome patch.

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Passes all tests and QA script.
Also: t/db_dependent/Acquisition/
      t/db_dependent/Acquisition.t

Created 2 orders with 3 items each for both settings
of AcqCreateItem (on receive, on order) with the patches
applied. No regressions found.

Closed baskets and received shipments for each, with
AcqCreateItem set according to how the order was created.

First recreated the problem without the patches, reloaded
database and confirmed that the patch fixes it.

No problems found.

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

index ea9c9a2..aeb4394 100755 (executable)
@@ -56,6 +56,7 @@ my $rrp              = $input->param('rrp');
 my $note             = $input->param("note");
 my $bookfund         = $input->param("bookfund");
 my $order            = GetOrder($ordernumber);
+my $new_ordernumber  = $ordernumber;
 
 #need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
 if ($quantityrec > $origquantityrec ) {
@@ -97,7 +98,6 @@ if ($quantityrec > $origquantityrec ) {
         }
     }
 
-    my $new_ordernumber = $ordernumber;
     # save the quantity received.
     if ( $quantityrec > 0 ) {
         ($datereceived, $new_ordernumber) = ModReceiveOrder(
@@ -163,6 +163,6 @@ ModItem(
     },
     $biblionumber,
     $_
-) foreach GetItemnumbersFromOrder($ordernumber);
+) foreach GetItemnumbersFromOrder($new_ordernumber);
 
 print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid");