added volume transfering interface, fixed some boolean check logic errors
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 3 Aug 2006 03:54:34 +0000 (03:54 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 3 Aug 2006 03:54:34 +0000 (03:54 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@5238 dcc99617-32d9-48b4-a31d-7c20da2025e4

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

index 278626c..a01d888 100644 (file)
@@ -15,7 +15,7 @@ use XML::LibXML;
 use Unicode::Normalize;
 use Data::Dumper;
 use OpenILS::Utils::FlatXML;
-use OpenILS::Utils::Editor q/:funcs/;
+use OpenILS::Utils::CStoreEditor q/:funcs/;
 use OpenILS::Perm;
 use OpenSRF::Utils::SettingsClient;
 use OpenSRF::Utils::Logger qw($logger);
@@ -1024,7 +1024,7 @@ sub delete_copy {
                if( $override ) {
 
                        # delete this volume if it's not already marked as deleted
-                       if(!$vol->deleted || $vol->deleted =~ /f/io || ! $vol->isdeleted) {
+                       unless( $U->is_true($vol->deleted) || $vol->isdeleted ) {
                                $vol->deleted('t');
                                $editor->update_asset_call_number($vol, {checkperm=>0})
                                        or return $editor->event;
@@ -1034,7 +1034,7 @@ sub delete_copy {
                        my $rec = $editor->retrieve_biblio_record_entry($vol->record)
                                or return $editor->event;
 
-                       if( !$rec->deleted ) {
+                       unless( $U->is_true($rec->deleted) ) {
                                $rec->deleted('t');
                                $rec->active('f');
                                $editor->update_biblio_record_entry($rec, {checkperm=>0})
@@ -1168,6 +1168,70 @@ sub create_volume {
 }
 
 
+__PACKAGE__->register_method (
+       method => 'batch_volume_transfer',
+       api_name => 'open-ils.cat.asset.volume.batch.transfer',
+);
+
+sub batch_volume_transfer {
+       my( $self, $conn, $auth, $args ) = @_;
+
+       my $evt;
+       my $rec         = $$args{docid};
+       my $o_lib       = $$args{lib};
+       my $vol_ids = $$args{volumes};
+
+       $logger->info("merge: transferring volumes to lib=$o_lib and record=$rec");
+
+       my $e = new_editor(authtoken => $auth, xact =>1);
+       return $e->event unless $e->checkauth;
+       return $e->event unless $e->allowed('VOLUME_UPDATE');
+
+       my $vols = $e->batch_retrieve_asset_call_number($vol_ids);
+
+       my @seen;
+       for my $vol (@$vols) {
+               next unless $vol;
+               next if grep { $vol->id == $_ } @seen;
+
+               my @all = grep { $_->label eq $vol->label } @$vols;
+               push( @seen, $_->id ) for @all;
+
+               if( @all > 1 ) {
+                       $logger->info("merge: found collisions in volume transfer");
+                       ($vol, $evt) = 
+                               OpenILS::Application::Cat::Merge::merge_volumes($e, \@all, $vol);
+                       return $evt if $evt;
+               } 
+               
+               $vol->owning_lib($o_lib);
+               $vol->record($rec);
+               $vol->editor($e->requestor->id);
+               $vol->edit_date('now');
+
+               $logger->info("merge: updating volume ".$vol->id);
+
+               $e->update_asset_call_number($vol) or return $e->event;
+
+               my $copies = $e->search_asset_copy({call_number=>$vol->id});
+
+               # update circ lib on the copies - make this a method flag?
+               for my $copy (@$copies) {
+                       $logger->info("merge: transfer moving circ lib on copy ".$copy->id);
+                       $copy->circ_lib($o_lib);
+                       $copy->editor($e->requestor->id);
+                       $copy->edit_date('now');
+                       $e->update_asset_copy($copy) or return $e->event;
+               }
+
+       }
+
+       $logger->info("merge: transfer succeeded");
+       $e->commit;
+       return 1;
+}
+
+
 
 
 
index 76d57c6..0f4ca08 100644 (file)
@@ -87,12 +87,8 @@ sub merge_records {
                                $vol->id." from record ".$vol->record. " to $master");
 
                        $vol->record( $master );
-                       $editor->update_asset_call_number(
-                               $vol, { 
-                                       permorg => $vol->owning_lib, 
-                                       checkperm => 1 
-                               }
-                       ) or return $editor->event;
+                       $editor->update_asset_call_number($vol)
+                               or return $editor->event;
                }
        }
 
@@ -107,7 +103,7 @@ sub merge_records {
 
                if( $rec == $master ) {
                        # make sure the master record is not deleted
-                       if( $record->deleted and $record->deleted ne 'f' ) {
+                       if( $U->is_true($record->deleted) ) {
                                $logger->info("merge: master record is marked as deleted...un-deleting.");
                                $record->deleted('f');
                                $record->editor($reqr->id);