acq - add to purchase order - teach middle layer method to do many LIs at once
authorLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Tue, 5 Mar 2013 22:20:07 +0000 (17:20 -0500)
committerLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Mon, 11 Mar 2013 18:00:52 +0000 (14:00 -0400)
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
Open-ILS/src/templates/acq/common/add_to_po.tt2

index 29080f4..c4828c7 100644 (file)
@@ -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};
 }
index 6d167bb..354bf87 100644 (file)
@@ -1,4 +1,3 @@
-[%# We require add_to_po.js to be included, but can't do it ourselves. %]
         <div dojoType="dijit.Dialog" jsId='addToPoDialog'>
             <script type="dojo/connect" event="execute">
                 var dia = this;