acq - prevent create/add to purchase order from stealing lineitems
authorLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Wed, 6 Mar 2013 19:25:58 +0000 (14:25 -0500)
committerLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Mon, 11 Mar 2013 18:00:52 +0000 (14:00 -0400)
that is, lineitem from other POs

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm

index 62909f6..da3e5c1 100644 (file)
@@ -1781,6 +1781,14 @@ sub create_purchase_order_api {
                 {flesh => 1, flesh_fields => {jub => ['attributes']}}
             ]) or return $e->die_event;
 
+            return $e->die_event(
+                new OpenILS::Event(
+                    "BAD_PARAMS", payload => $li,
+                        note => "acq.lineitem #" . $li->id .
+                        ": purchase_order #" . $li->purchase_order
+                )
+            ) if $li->purchase_order;
+
             $li->provider($po->provider);
             $li->purchase_order($po->id);
             $li->state('pending-order');
@@ -3553,7 +3561,8 @@ sub add_li_to_po {
     }
 
     foreach my $li (@$lis) {
-        unless ($li->state =~ /new|order-ready|pending-order/) {
+        if ($li->state !~ /new|order-ready|pending-order/ or
+            $li->purchase_order) {
             $e->rollback;
             return {success => 0, li => $li, error => 'bad-li-state'};
         }