ACQ order upload use copy location from owner
authorBill Erickson <berick@esilibrary.com>
Fri, 28 Sep 2012 19:00:37 +0000 (15:00 -0400)
committerJason Stephenson <jstephenson@mvlc.org>
Fri, 14 Dec 2012 17:44:50 +0000 (12:44 -0500)
When uploading an ACQ MARC order record, attempt to match copy locations
to copies based on the copy owning location instead of the upload
context org unit.  This allows one branch to order copies for another
and have the copies use the copy location of the other (owning) branch
(when they exist) instead of the ordering branch (or parent org).

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Signed-off-by: Jason Stephenson <jstephenson@mvlc.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm

index 7c66162..a297b74 100644 (file)
@@ -1649,17 +1649,28 @@ sub extract_lineitem_detail_data {
     # ---------------------------------------------------------------------
     # Shelving Location
     if( my $name = $compiled{copy_location}) {
-        my $loc = $mgr->cache($base_org, "copy_loc.$name");
+
+        my $cp_base_org = $base_org;
+
+        if ($compiled{owning_lib}) {
+            # start looking for copy locations at the copy 
+            # owning lib instaed of the upload context org
+            $cp_base_org = $compiled{owning_lib};
+        }
+
+        my $loc = $mgr->cache($cp_base_org, "copy_loc.$name");
         unless($loc) {
-            for my $org (@$org_path) {
+            my $org = $cp_base_org;
+            while ($org) {
                 $loc = $mgr->editor->search_asset_copy_location(
                     {owning_lib => $org, name => $name}, {idlist => 1})->[0];
                 last if $loc;
+                $org = $mgr->editor->retrieve_actor_org_unit($org)->parent_ou;
             }
         }
         return $killme->("Invalid copy location $name") unless $loc;
         $compiled{copy_location} = $loc;
-        $mgr->cache($base_org, "copy_loc.$name", $loc);
+        $mgr->cache($cp_base_org, "copy_loc.$name", $loc);
     }
 
     return \%compiled;