From: Lebbeous Fogle-Weekley Date: Tue, 5 Mar 2013 22:20:07 +0000 (-0500) Subject: acq - add to purchase order - teach middle layer method to do many LIs at once X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=fb0852c22c68587604e6c07f645ac3d371f5f5a7;p=evergreen%2Fequinox.git acq - add to purchase order - teach middle layer method to do many LIs at once Signed-off-by: Lebbeous Fogle-Weekley --- 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 a297b74208..2b4752f45c 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm @@ -3456,7 +3456,7 @@ __PACKAGE__->register_method( params => [ {desc => 'Authentication token', type => 'string'}, {desc => 'The purchase order id', type => 'number'}, - {desc => 'The lineitem ID', type => 'number'}, + {desc => 'The lineitem ID (or an array of them)', type => 'mixed'}, ], return => {desc => 'Streams a total versus completed counts object, event on error'} } @@ -3473,9 +3473,6 @@ sub add_li_to_po { my $po = $e->retrieve_acq_purchase_order($po_id) or return $e->die_event; - my $li = $e->retrieve_acq_lineitem($li_id) - or return $e->die_event; - return $e->die_event unless $e->allowed('CREATE_PURCHASE_ORDER', $po->ordering_agency); @@ -3484,16 +3481,32 @@ sub add_li_to_po { return {success => 0, po => $po, error => 'bad-po-state'}; } - unless ($li->state =~ /new|order-ready|pending-order/) { - $e->rollback; - return {success => 0, li => $li, error => 'bad-li-state'}; + my $lis; + + if (ref $li_id eq "ARRAY") { + $li_id = [ map { int($_) } @$li_id ]; + return $e->die_event(new OpenILS::Event("BAD_PARAMS")) unless @$li_id; + + $lis = $e->search_acq_lineitem({id => $li_id}) + or return $e->die_event; + } else { + $lis = []; + push @$lis, $e->retrieve_acq_lineitem(int($li_id)) + or return $e->die_event; + } + + foreach my $li (@$lis) { + unless ($li->state =~ /new|order-ready|pending-order/) { + $e->rollback; + return {success => 0, li => $li, error => 'bad-li-state'}; + } + + $li->provider($po->provider); + $li->purchase_order($po_id); + $li->state('pending-order'); + update_lineitem($mgr, $li) or return $e->die_event; } - $li->provider($po->provider); - $li->purchase_order($po_id); - $li->state('pending-order'); - update_lineitem($mgr, $li) or return $e->die_event; - $e->commit; return {success => 1}; } diff --git a/Open-ILS/src/templates/acq/common/add_to_po.tt2 b/Open-ILS/src/templates/acq/common/add_to_po.tt2 index 6d167bb17f..354bf879d6 100644 --- a/Open-ILS/src/templates/acq/common/add_to_po.tt2 +++ b/Open-ILS/src/templates/acq/common/add_to_po.tt2 @@ -1,4 +1,3 @@ -[%# We require add_to_po.js to be included, but can't do it ourselves. %]