LP#1730470 Restore XUL serial receive compatibility
authorDan Wells <dbw2@calvin.edu>
Wed, 27 Dec 2017 13:36:23 +0000 (08:36 -0500)
committerMike Rylander <mrylander@gmail.com>
Thu, 11 Jan 2018 19:14:54 +0000 (14:14 -0500)
The older XUL interface does not have quite the same fleshing as the
new web-staff, so adding the 'move previous' code into the unitize
function breaks the old interface.

Since we already are looking up the distribution to get the setting,
let's just tack it on when it is missing.

To test
-------
[1] Set up a serial subscription with predicted issuances, then from
    the XUL serials control view attempt to receive an issue. Note
    that there will be a crash.
[2] Apply the patch and repeat step #1; this time, the issuance
    receive should work.
[3] Verify that receiving issues via the web staff interface continues
    to work.

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm

index 04f79c0..3a9aaec 100644 (file)
@@ -1446,13 +1446,13 @@ sub unitize_items {
         return $evt if $evt;
 
         if ($mode eq 'receive') {
-            my $sdists = $editor->search_serial_distribution([
+            my $sdist = $editor->search_serial_distribution([
                 {"+sstr" => {"id" => $stream_id}},
                 {
                     "join" => {"sstr" => {}},
                     "flesh" => 1,
                     "flesh_fields" => {"sdist" => ["subscription"]}
-                }]);
+                }])->[0];
 
             #-------------------------------------------------------------------------
             # The following is copied from open-ils.serial.receive_items.one_unit_per
@@ -1462,6 +1462,13 @@ sub unitize_items {
             # issuance).  This will be used in up to two places: once when building
             # a summary, once when changing the copy location of the previous
             # issuance's copy.
+
+            # manually flesh distribution if not present
+            #
+            # this helps maintain compatiblity with XUL serial control receive
+            if (!ref($item->stream->distribution)) {
+                $item->stream->distribution($sdist);
+            }
             my $issuances_received = _issuances_received($editor, $item);
             if ($U->event_code($issuances_received)) {
                 $editor->rollback;
@@ -1469,7 +1476,7 @@ sub unitize_items {
             }
     
             # Find out if we need to to deal with previous copy location changing.
-            my $ou = $sdists->[0]->holding_lib;
+            my $ou = $sdist->holding_lib;
             unless (exists $prev_loc_setting_map->{$ou}) {
                 $prev_loc_setting_map->{$ou} = $U->ou_ancestor_setting_value(
                     $ou, "serial.prev_issuance_copy_location", $editor