moving toward fixing SIP hold titles user/jboyer/lp1525394_more_sip_hold_titles_2
authorJason Boyer <JBoyer@eoli.info>
Tue, 24 Sep 2019 11:03:56 +0000 (07:03 -0400)
committerJason Boyer <JBoyer@equinoxOLI.org>
Mon, 19 Jul 2021 17:17:33 +0000 (13:17 -0400)
Signed-off-by: Jason Boyer <JBoyer@eoli.info>
Open-ILS/src/perlmods/lib/OpenILS/SIP/Patron.pm

index ef487c3..0ca8fc0 100644 (file)
@@ -635,6 +635,40 @@ sub find_copy_for_hold {
         {call_number => $hold->target, deleted => 'f'}, 
         {limit => 1}])->[0] if $hold->hold_type eq 'V';
 
+    return $e->json_query(
+        {
+            select => { acp => ['id'] },
+            from => {
+                acp => {
+                    acpm => {
+                        field => 'target_copy',
+                        fkey => 'id',
+                        filter => { part => $hold->target }
+                    }
+                }
+           },
+           where => { '+acp' => { deleted => 'f' } },
+           limit => 1
+       })->[0]->{id} if $hold->hold_type eq 'P';
+
+
+    return $e->json_query(
+        {
+            select => { acp => ['id'] },
+            from => {
+                acp => {
+                    sitem => {
+                        field => 'unit',
+                        fkey => 'id',
+                        filter => { issuance => $hold->target }
+                    }
+                }
+           },
+           where => { '+acp' => { deleted => 'f' } },
+           limit => 1
+       })->[0]->{id} if $hold->hold_type eq 'I';
+
+
     my $bre_ids = [$hold->target];
 
     if ($hold->hold_type eq 'M') {
@@ -697,6 +731,25 @@ sub find_hold_from_copy {
     return $hold if $hold = $run_hold_query->(
         target => $map->metarecord, hold_type => 'M');
 
+
+    # part holds
+    my $part = $e->search_asset_copy_part_map(
+        { target_copy => $copy->id })->[0];
+
+    if ($part) {
+        return $hold if $hold = $run_hold_query->(
+            target => $part->id, hold_type => 'P');
+    }
+
+    # issuance holds
+    my $iss = $e->search_serial_item(
+        { unit => $copy->id })->[0];
+
+    if ($iss) {
+        return $hold if $hold = $run_hold_query->(
+            target => $iss->id, hold_type => 'I');
+    }
+
     # volume holds
     return $hold if $hold = $run_hold_query->(
         target => $copy->call_number->id, hold_type => 'V');