LP#1331127 Repair sort logic of previous issuances
authorBill Erickson <berick@esilibrary.com>
Tue, 17 Jun 2014 19:14:12 +0000 (15:14 -0400)
committerDan Wells <dbw2@calvin.edu>
Thu, 18 Sep 2014 22:13:52 +0000 (18:13 -0400)
Ensure that the list of previous issuances is sorted correctly (on
date_published) when looking for the previous serial.unit to update its
copy location (when serial.prev_issuance_copy_location is enabled).

The data comes sorted from the DB, but the sorting was lost during the
process of unique-ifying the list.  Ultimately, it was relying on the
order of hash keys, which is undefined.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Dan Wells <dbw2@calvin.edu>
Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm

index 35bcc82..60b7383 100644 (file)
@@ -1497,8 +1497,14 @@ sub _issuances_received {
         }
     }) or return $e->die_event;
 
-    my $uniq = +{map { $_->{"issuance"} => 1 } @$results};
-    return [ map { $e->retrieve_serial_issuance($_) } keys %$uniq ];
+    my %seen;
+    my $issuances = [];
+    for my $iss_id (map { $_->{"issuance"} } @$results) {
+        next if $seen{$iss_id};
+        $seen{$iss_id} = 1;
+        push(@$issuances, $e->retrieve_serial_issuance($iss_id));
+    }
+    return $issuances;
 }
 
 # _prepare_unit populates the detailed_contents, summary_contents, and