Change the logic for trigger multiple holds.
authorJason Stephenson <jason@sigio.com>
Sat, 9 Sep 2017 19:56:59 +0000 (15:56 -0400)
committerJason Stephenson <jason@sigio.com>
Fri, 29 Sep 2017 22:46:52 +0000 (18:46 -0400)
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm

index bfea5a1..174615c 100644 (file)
@@ -1004,7 +1004,7 @@ sub load_place_hold {
     my $num_copies = int($cgi->param('num_copies')); # if undefined, we get 0.
     if ($num_copies > 1) {
         # Only if we have 1 hold target and no parts.
-        if (scalar(@targets) == 1 && !scalar(@parts)) {
+        if (scalar(@targets) == 1 && !$parts[0]) {
             # Also, only for M and T holds.
             if ($ctx->{hold_type} eq 'M' || $ctx->{hold_type} eq 'T') {
                 # Add the extra holds to @targets. NOTE: We start with
@@ -1258,15 +1258,23 @@ sub load_place_hold {
         # like a real P-type hold.
         my (@p_holds, @t_holds);
 
-        for my $idx (0..$#parts) {
-            my $hdata = $hold_data[$idx];
-            if (my $part = $parts[$idx]) {
-                $hdata->{target_id} = $part;
-                $hdata->{selected_part} = $part;
-                push(@p_holds, $hdata);
-            } else {
-                push(@t_holds, $hdata);
+        # Now that we have the num_copies field for mutliple title and
+        # metarecord hold placement, the number of holds and parts
+        # arrays can get out of sync.  We only want to parse out parts
+        # if the numbers are equal.
+        if ($#hold_data == $#parts) {
+            for my $idx (0..$#parts) {
+                my $hdata = $hold_data[$idx];
+                if (my $part = $parts[$idx]) {
+                    $hdata->{target_id} = $part;
+                    $hdata->{selected_part} = $part;
+                    push(@p_holds, $hdata);
+                } else {
+                    push(@t_holds, $hdata);
+                }
             }
+        } else {
+            @t_holds = @hold_data;
         }
 
         $self->apache->log->warn("$#parts : @t_holds");