LP#1413352 Brief record price sets lineitem price
authorBill Erickson <berickxx@gmail.com>
Thu, 2 Jun 2016 19:27:06 +0000 (15:27 -0400)
committerMike Rylander <mrylander@gmail.com>
Wed, 7 Sep 2016 19:34:10 +0000 (15:34 -0400)
Propagate lineitem MARC 'price' attribute value to the lineitem
estimated_unit_price field.  This allows users to apply a lineitem
price directly from the ACQ Brief Record interface.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Lineitem.pm

index 925fc85..af491b6 100644 (file)
@@ -65,6 +65,12 @@ sub create_lineitem {
     $li->selector($e->requestor->id);
     $li = $e->create_acq_lineitem($li) or return $e->die_event;
 
+    # if no price is set, see if it can be extracted from the price attribute.
+    if (not defined $li->estimated_unit_price) { # '0' is valid
+        my $evt = set_li_price_from_attr($e, $li);
+        return $evt if $evt;
+    }
+
     if ($po) {
         # apply the default number of copies for this provider
         for (1 .. $po->provider->default_copy_count) {
@@ -79,6 +85,35 @@ sub create_lineitem {
     return $li->id;
 }
 
+# See if we have a value for the price attribute.  If so, apply the price 
+# value to the lineitem.
+# Returns undef on success, Event on error.
+sub set_li_price_from_attr {
+    my ($e, $li) = @_;
+
+    my $attr = $e->search_acq_lineitem_attr({
+        lineitem => $li->id,
+        attr_type => 'lineitem_marc_attr_definition',
+        attr_name  => 'price'
+    })->[0];
+
+    return unless $attr;
+
+    my $val = $attr->attr_value;
+
+    return unless defined $val; # '0' is valid
+
+    $li->estimated_unit_price($val);
+
+    if (!$e->update_acq_lineitem($li)) {
+        $e->rollback;
+        return OpenILS::Event->new('BAD_PARAMS', 
+            desc => "Invalid lineitem price value: '$val'") ;
+    }
+
+    return undef;
+}
+
 
 __PACKAGE__->register_method(
     method    => 'retrieve_lineitem',