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'}
}
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);
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};
}