my $editor = new_editor(requestor => $reqr, xact => 1);
my $override = $self->api_name =~ /override/;
$evt = update_fleshed_copies($editor, $override, undef, $copies, $delete_stats);
- return $evt if $evt;
- $editor->finish;
+ if( $evt ) {
+ $logger->info("fleshed copy update failed with event: ".JSON->perl2JSON($evt));
+ $editor->rollback;
+ return $evt;
+ }
+ $editor->commit;
$logger->info("fleshed copy update successfully updated ".scalar(@$copies)." copies");
return 1;
}
return $editor->event unless $vol;
}
+ return $editor->event unless
+ $editor->allowed('UPDATE_COPY', $vol->owning_lib);
+
$copy->editor($editor->requestor->id);
$copy->edit_date('now');
if ref $copy->age_protect;
fix_copy_price($copy);
- return $editor->event unless
- $editor->update_asset_copy(
- $copy, {checkperm=>1, permorg=>$vol->owning_lib});
+ return $editor->event unless $editor->update_asset_copy($copy);
return remove_empty_objects($editor, $override, $orig_vol);
}
my( $editor, $override, $vol ) = @_;
if( title_is_empty($editor, $vol->record) ) {
- if( $override ) {
+ # disable the TITLE_LAST_COPY event for now
+ # if( $override ) {
+ if( 1 ) {
# delete this volume if it's not already marked as deleted
unless( $U->is_true($vol->deleted) || $vol->isdeleted ) {
$vol->deleted('t');
$vol->editor($editor->requestor->id);
$vol->edit_date('now');
- $editor->update_asset_call_number($vol, {checkperm=>0})
- or return $editor->event;
+ $editor->update_asset_call_number($vol) or return $editor->event;
}
# then delete the record this volume points to
unless( $U->is_true($rec->deleted) ) {
$rec->deleted('t');
$rec->active('f');
- $editor->update_biblio_record_entry($rec, {checkperm=>0})
- or return $editor->event;
+ $editor->update_biblio_record_entry($rec) or return $editor->event;
}
} else {
$copy->editor($editor->requestor->id);
$copy->edit_date('now');
- $editor->update_asset_copy(
- $copy, {checkperm=>1, permorg=>$vol->owning_lib})
- or return $editor->event;
+ $editor->update_asset_copy($copy) or return $editor->event;
# Delete any open transits for this copy
my $transits = $editor->search_action_transit_copy(
$copy->create_date('now');
fix_copy_price($copy);
- $editor->create_asset_copy(
- $copy, {checkperm=>1, permorg=>$vol->owning_lib})
- or return $editor->event;
-
+ $editor->create_asset_copy($copy) or return $editor->event;
return undef;
}
my $e = new_editor(authtoken => $auth, xact =>1);
return $e->event unless $e->checkauth;
- return $e->event unless $e->allowed('VOLUME_UPDATE');
+ return $e->event unless $e->allowed('VOLUME_UPDATE', $o_lib);
my $dorg = $e->retrieve_actor_org_unit($o_lib)
or return $e->event;
my @recs = keys %r;
my $reqr = $editor->requestor;
- $logger->activity("merge: user ".$reqr->id." merging bib records: @recs");
+ $logger->activity("merge: user ".$reqr->id." merging bib records: @recs with master = $master");
# -----------------------------------------------------------
# collect all of the volumes, merge any with duplicate
# -----------------------------------------------------------
my @volumes;
for (@recs) {
- my $vs = $editor->search_asset_call_number({record => $_});
+ my $vs = $editor->search_asset_call_number({record => $_, deleted=>'f'});
push( @volumes, @$vs );
}
my @trimmed;
# de-duplicate any volumes with the same label and owning_lib
+
+ my %seen_vols;
+
for my $v (@volumes) {
my $l = $v->label;
my $o = $v->owning_lib;
- my @dups = rgrep(
- sub { $_->label eq $l and $_->owning_lib == $o }, \@volumes );
+
+ if($seen_vols{$v->id}) {
+ $logger->debug("merge: skipping ".$v->id." since it's already been merged");
+ next;
+ }
+
+ $seen_vols{$v->id} = 1;
+
+ $logger->debug("merge: [".$v->id."] looking for dupes with label $l and owning_lib $o");
+
+ my @dups;
+ for my $vv (@volumes) {
+ if( $vv->label eq $v->label and $vv->owning_lib == $v->owning_lib ) {
+ $logger->debug("merge: pushing dupe volume ".$vv->id) if @dups;
+ push( @dups, $vv );
+ $seen_vols{$vv->id} = 1;
+ }
+ }
if( @dups == 1 ) {
+ $logger->debug("merge: pushing unique volume into trimmed volume set: ".$v->id);
push( @trimmed, @dups );
} else {
my($vol, $e) = merge_volumes($editor, \@dups);
return $e if $e;
+ $logger->debug("merge: pushing vol-merged volume into trimmed volume set: ".$vol->id);
push(@trimmed, $vol);
}
}
+ my $s = 'merge: trimmed volume set contains the following vols: ';
+ $s .= 'id = '.$_->id .' : record = '.$_->record.' | ' for @trimmed;
+ $logger->debug($s);
# make all the volumes point to the master record
my $stat;
$copy->call_number($bigcn);
$copy->editor($editor->requestor->id);
$copy->edit_date('now');
- $editor->update_asset_copy($copy, {checkperm=>1})
- or return (undef, $editor->event);
+ $editor->update_asset_copy($copy) or return (undef, $editor->event);
}
}
$_->deleted('t');
$_->editor($editor->requestor->id);
$_->edit_date('now');
- $editor->update_asset_call_number($_,{checkperm=>1})
- or return (undef, $editor->event);
+ return (undef,$editor->event) unless $editor->allowed('VOLUME_UPDATE', $_->owning_lib);
+ $editor->update_asset_call_number($_) or return (undef, $editor->event);
}
my ($mvol) = grep { $_->id == $bigcn } @$volumes;