From 3882a66b09607961c75210f04a795b06ae0b5ca4 Mon Sep 17 00:00:00 2001 From: Lebbeous Fogle-Weekley Date: Tue, 5 Mar 2013 17:20:07 -0500 Subject: [PATCH] acq - add to purchase order - teach middle layer method to do many LIs at once Signed-off-by: Lebbeous Fogle-Weekley --- .../perlmods/lib/OpenILS/Application/Acq/Order.pm | 37 +++++++++++++++------- Open-ILS/src/templates/acq/common/add_to_po.tt2 | 1 - 2 files changed, 25 insertions(+), 13 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 29080f49f0..c4828c78a7 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm @@ -3513,7 +3513,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'} } @@ -3530,9 +3530,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); @@ -3541,16 +3538,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. %]