From 0a7b3132d9265cad70416fab630e9c0928868f47 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Thu, 8 Dec 2011 11:52:28 -0500 Subject: [PATCH] acq vandelay : ML create po assets 2; cleanup Signed-off-by: Bill Erickson --- .../perlmods/lib/OpenILS/Application/Acq/Order.pm | 89 +++++++++++++++++----- 1 file changed, 71 insertions(+), 18 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm index 9b33e6d03a..63abd7f54c 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm @@ -295,9 +295,11 @@ sub delete_lineitem { # begins and commit transactions as it goes sub create_lineitem_list_assets { my($mgr, $li_ids, $vandelay) = @_; - return undef if check_import_li_marc_perms($mgr, $li_ids); - $logger->info("acq-vl: processing recs via Vandelay with args " . Dumper($vandelay)); + if (check_import_li_marc_perms($mgr, $li_ids)) { # event on error + $logger->error("acq-vl: user does not have permission to import acq records"); + return undef; + } my $res = import_li_bibs_via_vandelay($mgr, $li_ids, $vandelay); return undef unless $res; @@ -313,12 +315,28 @@ sub create_lineitem_list_assets { return $res; } +sub verify_vandelay_import_args { + my $vandelay = shift; -sub import_li_bibs_via_vandelay { - my ($mgr, $li_ids, $vandelay) = @_; - my $res = {li_ids => []}; - my $e = $mgr->editor; - $e->xact_begin; + # we need a queue + return 0 unless $vandelay and + ($vandelay->{queue_name} or $vandelay->{existing_queue}); + + # no-match import + return 1 if $vandelay->{import_no_match} and $vandelay->{bib_source}; + + # match-based merge/overlay import + return 1 if $vandelay->{merge_profile} and ( + $vandelay->{auto_overlay_exact} or + $vandelay->{auto_overlay_1match} or + $vandelay->{auto_overlay_best_match} + ); + + return 0; +} + +sub find_or_create_vandelay_queue { + my ($e, $vandelay) = @_; my $queue; if (my $name = $vandelay->{queue_name}) { @@ -341,22 +359,51 @@ sub import_li_bibs_via_vandelay { $queue->name($name); $queue->owner($e->requestor->id); $queue->match_set($vandelay->{match_set} || undef); # avoid '' - $queue = $e->create_vandelay_bib_queue($queue) or return $res; + $queue = $e->create_vandelay_bib_queue($queue) or return undef; } } else { - $queue = $e->retrieve_vandelay_queue($vandelay->{existing_queue}) + $queue = $e->retrieve_vandelay_bib_queue($vandelay->{existing_queue}) or return undef; } + + return $queue; +} + + +sub import_li_bibs_via_vandelay { + my ($mgr, $li_ids, $vandelay) = @_; + my $res = {li_ids => []}; + my $e = $mgr->editor; + $e->xact_begin; + + my $needs_importing = $e->search_acq_lineitem( + {id => $li_ids, eg_bib_id => undef}, + {idlist => 1} + ); + + if (!@$needs_importing) { + $logger->info("acq-vl: all records already imported. no Vandelay work to do"); + return {li_ids => $li_ids}; + } + + # add the already-imported records to the response list + push(@{$res->{li_ids}}, grep { $_ != @$needs_importing } @$li_ids); + $logger->info("acq-vl: processing recs via Vandelay with args: ".Dumper($vandelay)); - return $res unless $queue; + if (!verify_vandelay_import_args($vandelay)) { + $logger->error("acq-vl: invalid vandelay arguments for acq import"); + return $res; + } + + my $queue = find_or_create_vandelay_queue($e, $vandelay) or return $res; $mgr->{args}->{queue} = $queue; # load the lineitems into the queue for merge processing my @vqbr_ids; my @lis; - for my $li_id (@$li_ids) { + for my $li_id (@$needs_importing) { my $li = $e->retrieve_acq_lineitem($li_id) or return $res; @@ -400,7 +447,7 @@ sub import_li_bibs_via_vandelay { next; } - # "imported" here refers to the vqbr, not the + # "imported" refers to the vqbr id, not the # success/failure of the vqbr merge attempt next unless $stat->{imported}; @@ -415,14 +462,17 @@ sub import_li_bibs_via_vandelay { push(@success_lis, $li_id); $mgr->add_bib; $mgr->respond; - $logger->info("acq-vl: acq lineitem $li_id successfully imported"); + $logger->info("acq-vl: acq lineitem $li_id successfully merged/imported"); } } $ses->kill_me; $logger->info("acq-vl: successfully imported lineitems [@success_lis]"); - return {queue => $queue, li_ids => \@success_lis}; + # add the successfully imported lineitems to the already-imported lineitems + push (@{$res->{li_ids}}, @success_lis); + + return $res; } # returns event on error, undef on success @@ -1522,7 +1572,8 @@ __PACKAGE__->register_method( {desc => 'The purchase order id', type => 'number'}, ], return => {desc => 'Streams a total versus completed counts object, event on error'} - } + }, + max_chunk_count => 1 ); sub create_po_assets { @@ -1576,7 +1627,8 @@ __PACKAGE__->register_method( {desc => 'purchase_order to create', type => 'object'} ], return => {desc => 'The purchase order id, Event on failure'} - } + }, + max_chunk_count => 1 ); sub create_purchase_order_api { @@ -1620,7 +1672,7 @@ sub create_purchase_order_api { $e->xact_commit; if($li_ids and $vandelay) { - create_lineitem_list_assets($mgr, $li_ids) or return $e->die_event; + create_lineitem_list_assets($mgr, $li_ids, $vandelay) or return $e->die_event; } return $mgr->respond_complete; @@ -2280,7 +2332,8 @@ sub activate_purchase_order_impl { my $vl_resp; # imported li's and the queue the managing queue if (!$dry_run) { $e->rollback; # read-only thus far - $vl_resp = create_lineitem_list_assets($mgr, $li_ids, $vandelay) or return $e->die_event; + $vl_resp = create_lineitem_list_assets($mgr, $li_ids, $vandelay) + or return OpenILS::Event->new('ACQ_LI_IMPORT_FAILED'); $e->xact_begin; } -- 2.11.0