Bug 29807: Make Branches plugin handle empty pickup locations list
authorTomas Cohen Arazi <tomascohen@theke.io>
Thu, 6 Jan 2022 11:53:30 +0000 (08:53 -0300)
committerFridolin Somers <fridolin.somers@biblibre.com>
Wed, 19 Jan 2022 22:13:49 +0000 (12:13 -1000)
This patch makes the plugin handle empty Koha::Biblio->pickup_locations
and Koha::Item->pickup_locations correctly.

It does so by explicitly calling ->as_list. It also restores the logic
that was changed by 6cd1ffab4e491349c99769018a7df33dc8a8aabf so, now
that ->empty is handled correctly, it doesn't return ALL the pickup
locations when the item/biblio doesn't have valid pickup locations.

To test:
1. Apply the regression tests patch
2. Run:
   $ kshell
  k$ prove t/db_dependent/Template/Plugin/Branches.t
=> FAIL: Awful error
3. Apply this patch
4. Repeat 2
=> SUCCESS: Tests pass!
5. Sign off :-D

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
Koha/Template/Plugin/Branches.pm

index a4db89b..8f82e02 100644 (file)
@@ -111,33 +111,31 @@ sub pickup_locations {
     my $selected      = $params->{selected};
     my @libraries;
 
-    if(defined $search_params->{item} || defined $search_params->{biblio}) {
-        my $item = $search_params->{'item'};
+    if ( defined $search_params->{item} || defined $search_params->{biblio} ) {
+        my $item   = $search_params->{'item'};
         my $biblio = $search_params->{'biblio'};
         my $patron = $search_params->{'patron'};
 
-        unless (! defined $patron || ref($patron) eq 'Koha::Patron') {
+        unless ( !defined $patron || ref($patron) eq 'Koha::Patron' ) {
             $patron = Koha::Patrons->find($patron);
         }
 
         if ($item) {
             $item = Koha::Items->find($item)
               unless ref($item) eq 'Koha::Item';
-            @libraries = $item->pickup_locations( { patron => $patron } )
+            @libraries = $item->pickup_locations( { patron => $patron } )->as_list
               if defined $item;
-        }
-        elsif ($biblio) {
+        } elsif ($biblio) {
             $biblio = Koha::Biblios->find($biblio)
               unless ref($biblio) eq 'Koha::Biblio';
-            @libraries = $biblio->pickup_locations( { patron => $patron } )
+            @libraries = $biblio->pickup_locations( { patron => $patron } )->as_list
               if defined $biblio;
         }
+    } else {
+        @libraries = Koha::Libraries->search( { pickup_location => 1 }, { order_by => ['branchname'] } )
+          unless @libraries;
     }
 
-    @libraries = Koha::Libraries->search( { pickup_location => 1 },
-        { order_by => ['branchname'] } )
-      unless @libraries;
-
     @libraries = map { $_->unblessed } @libraries;
 
     for my $l (@libraries) {