Bug 14811: Don't update permanent_location with CART or PROC
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 14 Sep 2015 15:01:48 +0000 (16:01 +0100)
committerTomas Cohen Arazi <tomascohen@unc.edu.ar>
Fri, 2 Oct 2015 17:24:11 +0000 (14:24 -0300)
The permanent_location should not be set to CART or PROC when the item
is edited.
Otherwise we lost an important info.

Test plan:
0/ Set the ReturnToShelvingCart pref
1/ Create an item with location "on_my_shelf"
2/ Check the item in and out
3/ Look at the DB values, location should be "CART" and
permanent_location unchanged (on_my_shelf)
4/ Edit the item, add a note for instance
5/ Without this patch, the permanent_location is erased with 'CART' and
you have definitely lost the info.
With this patch, the permanent_location is unchanged.

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@unc.edu.ar>
C4/Items.pm
t/db_dependent/Items.t

index fe6905c..e11aa1b 100644 (file)
@@ -2048,7 +2048,11 @@ sub _do_column_fixes_for_mod {
         (not defined $item->{'withdrawn'} or $item->{'withdrawn'} eq '')) {
         $item->{'withdrawn'} = 0;
     }
-    if (exists $item->{'location'} && !$item->{'permanent_location'}) {
+    if (exists $item->{location}
+        and $item->{location} ne 'CART'
+        and $item->{location} ne 'PROC'
+        and not $item->{permanent_location}
+    ) {
         $item->{'permanent_location'} = $item->{'location'};
     }
     if (exists $item->{'timestamp'}) {
index f96e4d3..f453aa3 100755 (executable)
@@ -41,7 +41,7 @@ my $location = 'My Location';
 
 subtest 'General Add, Get and Del tests' => sub {
 
-    plan tests => 10;
+    plan tests => 14;
 
     # Start transaction
     $dbh->{AutoCommit} = 0;
@@ -78,6 +78,16 @@ subtest 'General Add, Get and Del tests' => sub {
     is( $getitem->{location}, $location, "The location should not have been modified" );
     is( $getitem->{permanent_location}, 'my permanent location', "The permanent_location should not have modified" );
 
+    ModItem({ location => $location }, $bibnum, $itemnumber);
+    $getitem = GetItem($itemnumber);
+    is( $getitem->{location}, $location, "The location should have been set to correct location" );
+    is( $getitem->{permanent_location}, $location, "The permanent_location should have been set to location" );
+
+    ModItem({ location => 'CART' }, $bibnum, $itemnumber);
+    $getitem = GetItem($itemnumber);
+    is( $getitem->{location}, 'CART', "The location should have been set to CART" );
+    is( $getitem->{permanent_location}, $location, "The permanent_location should not have been set to CART" );
+
     $dbh->rollback;
 };