repaired record auto-delete code which could leave un-deleted volumes attached to...
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 28 Aug 2008 18:34:48 +0000 (18:34 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 28 Aug 2008 18:34:48 +0000 (18:34 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@10472 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Cat.pm

index 7f13fe1..2f0f646 100644 (file)
@@ -880,19 +880,24 @@ sub merge_holds {
 
 
 # ---------------------------------------------------------------------------
+# returns true if the given title (id) has no un-deleted volumes or 
+# copies attached.  If a context volume is defined, a record
+# is considered empty only if the context volume is the only
+# remaining volume on the record.  
 # ---------------------------------------------------------------------------
-
-# returns true if the given title (id) has no un-deleted
-# copies attached
 sub title_is_empty {
-       my( $editor, $rid ) = @_;
+       my( $editor, $rid, $vol_id ) = @_;
 
        return 0 if $rid == OILS_PRECAT_RECORD;
 
        my $cnlist = $editor->search_asset_call_number(
                { record => $rid, deleted => 'f' }, { idlist => 1 } );
-       return 1 unless @$cnlist;
 
+       return 1 unless @$cnlist; # no attached volumes
+    return 0 if @$cnlist > 1; # multiple attached volumes
+    return 0 unless $$cnlist[0] == $vol_id; # attached volume is not the context vol.
+
+    # see if the sole remaining context volume has any attached copies
        for my $cn (@$cnlist) {
                my $copylist = $editor->search_asset_copy(
                        [
@@ -1112,7 +1117,7 @@ sub remove_empty_objects {
     my $aoe =  $U->ou_ancestor_setting_value(
         $editor->requestor->ws_ou, 'cat.bib.alert_on_empty', $editor);
 
-       if( title_is_empty($editor, $vol->record) ) {
+       if( title_is_empty($editor, $vol->record, $vol->id) ) {
 
         # delete this volume if it's not already marked as deleted
         unless( $U->is_true($vol->deleted) || $vol->isdeleted ) {