serials: Allow scap deletion when there are no in-use issuances, and stop leaking...
authorMike Rylander <mrylander@gmail.com>
Thu, 6 Jul 2017 21:08:00 +0000 (17:08 -0400)
committerMike Rylander <mrylander@gmail.com>
Thu, 6 Jul 2017 21:08:00 +0000 (17:08 -0400)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/extras/ils_events.xml
Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm

index 8beb07e..f55bc6b 100644 (file)
     <event code='11009' textcode='SERIAL_STREAM_NOT_EMPTY'>
         <desc xml:lang="en-US">The stream still has dependent objects</desc>
     </event>
+    <event code='11010' textcode='SERIAL_CAPTION_AND_PATTERN_NOT_EMPTY'>
+        <desc xml:lang="en-US">The prediction pattern still has dependent objects</desc>
+    </event>
 </ils_events>
 
 
index e6bca9f..73c8d5b 100644 (file)
@@ -2549,10 +2549,10 @@ sub safe_delete {
 
         foreach my $sitem (@{$sstr->items}) {
             if ($sitem->status ne 'Expected') {
-                return OpenILS::Event->new('SERIAL_STREAM_NOT_EMPTY', payload=>$id);
+                return $e->die_event(OpenILS::Event->new('SERIAL_STREAM_NOT_EMPTY', payload=>$id));
             }
             if ($sitem->unit && !$U->is_true($sitem->unit->deleted)) {
-                return OpenILS::Event->new('SERIAL_STREAM_NOT_EMPTY', payload=>$id);
+                return $e->die_event(OpenILS::Event->new('SERIAL_STREAM_NOT_EMPTY', payload=>$id));
             }
         }
 
@@ -2575,10 +2575,10 @@ sub safe_delete {
         foreach my $sstr (@{$sdist->streams}) {
             foreach my $sitem (@{$sstr->items}) {
                 if ($sitem->status ne 'Expected') {
-                    return OpenILS::Event->new('SERIAL_DISTRIBUTION_NOT_EMPTY', payload=>$id);
+                    return $e->die_event(OpenILS::Event->new('SERIAL_DISTRIBUTION_NOT_EMPTY', payload=>$id));
                 }
                 if ($sitem->unit && !$U->is_true($sitem->unit->deleted)) {
-                    return OpenILS::Event->new('SERIAL_DISTRIBUTION_NOT_EMPTY', payload=>$id);
+                    return $e->die_event(OpenILS::Event->new('SERIAL_DISTRIBUTION_NOT_EMPTY', payload=>$id));
                 }
             }
         }
@@ -2594,12 +2594,26 @@ sub safe_delete {
         return $e->die_event unless
             $e->allowed("ADMIN_SERIAL_CAPTION_PATTERN", $scap->subscription->owning_lib);
 
-        my $siss = $e->search_serial_issuance({
+        my $issuances = $e->search_serial_issuance([{
             caption_and_pattern => $id
-        });
+        },{
+            flesh => 2,
+            flesh_fields => {
+                siss  => ['items'],
+                sitem => ['unit']
+            }
+        }]);
 
-        return OpenILS::Event->new('SERIAL_CAPTION_AND_PATTERN_HAS_ISSUANCES', payload=>$id)
-            if (@$siss);
+        foreach my $siss (@$issuances) {
+            foreach my $sitem (@{$siss->items}) {
+                if ($sitem->status ne 'Expected') {
+                    return $e->die_event(OpenILS::Event->new('SERIAL_CAPTION_AND_PATTERN_NOT_EMPTY', payload=>$id));
+                }
+                if ($sitem->unit && !$U->is_true($sitem->unit->deleted)) {
+                    return $e->die_event(OpenILS::Event->new('SERIAL_CAPTION_AND_PATTERN_NOT_EMPTY', payload=>$id));
+                }
+            }
+        }
 
         $obj = $scap;
 
@@ -2622,10 +2636,10 @@ sub safe_delete {
             foreach my $sstr (@{$sdist->streams}) {
                 foreach my $sitem (@{$sstr->items}) {
                     if ($sitem->status ne 'Expected') {
-                        return OpenILS::Event->new('SERIAL_SUBSCRIPTION_NOT_EMPTY', payload=>$id);
+                        return $e->die_event(OpenILS::Event->new('SERIAL_SUBSCRIPTION_NOT_EMPTY', payload=>$id));
                     }
                     if ($sitem->unit && !$U->is_true($sitem->unit->deleted)) {
-                        return OpenILS::Event->new('SERIAL_SUBSCRIPTION_NOT_EMPTY', payload=>$id);
+                        return $e->die_event(OpenILS::Event->new('SERIAL_SUBSCRIPTION_NOT_EMPTY', payload=>$id));
                     }
                 }
             }