From a2bd5a754e56d0eca4420d6a55638d3037a24950 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Thu, 6 Jul 2017 17:08:00 -0400 Subject: [PATCH] serials: Allow scap deletion when there are no in-use issuances, and stop leaking cstores Signed-off-by: Mike Rylander --- Open-ILS/src/extras/ils_events.xml | 3 ++ .../src/perlmods/lib/OpenILS/Application/Serial.pm | 34 +++++++++++++++------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/Open-ILS/src/extras/ils_events.xml b/Open-ILS/src/extras/ils_events.xml index 8beb07ec9e..f55bc6bf70 100644 --- a/Open-ILS/src/extras/ils_events.xml +++ b/Open-ILS/src/extras/ils_events.xml @@ -1054,6 +1054,9 @@ The stream still has dependent objects + + The prediction pattern still has dependent objects + diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm index e6bca9fed8..73c8d5b778 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm @@ -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)); } } } -- 2.11.0