| Lines 553-619
          sub can_be_transferred {
      
      
        Link Here | 
        
          | 553 |  | 553 |  | 
        
          | 554 | } | 554 | } | 
        
          | 555 |  | 555 |  | 
            
              | 556 | =head3 _can_pickup_locations |  |  | 
            
              | 557 |  | 
            
              | 558 | $item->_can_pickup_locations({ to => $to_libraries, from => $from_library }) | 
            
              | 559 | Checks if an item can be transferred to given libraries. | 
            
              | 560 |  | 
            
              | 561 | This feature is controlled by two system preferences: | 
            
              | 562 | UseBranchTransferLimits to enable / disable the feature | 
            
              | 563 | BranchTransferLimitsType to use either an itemnumber or ccode as an identifier | 
            
              | 564 |                          for setting the limitations | 
            
              | 565 |  | 
            
              | 566 | Takes HASHref that can have the following parameters: | 
            
              | 567 |     MANDATORY PARAMETERS: | 
            
              | 568 |     $to   : Array of Koha::Libraries | 
            
              | 569 |     OPTIONAL PARAMETERS: | 
            
              | 570 |     $from : Koha::Library  # if not given, item holdingbranch | 
            
              | 571 |                            # will be used instead | 
            
              | 572 |  | 
            
              | 573 | Returns arry of Koha::Libraries that item can be transferred to $to_library and | 
            
              | 574 | are pickup_locations | 
            
              | 575 |  | 
            
              | 576 | If checking only one library please use $item->can_be_transferred. | 
            
              | 577 |  | 
            
              | 578 | =cut | 
            
              | 579 |  | 
            
              | 580 | sub _can_pickup_locations { | 
            
              | 581 |     my ($self, $params ) = @_; | 
            
              | 582 |  | 
            
              | 583 |     my $to   = $params->{to}; | 
            
              | 584 |     my $from = $params->{from}; | 
            
              | 585 |     $from = defined $from ? $from->branchcode : $self->holdingbranch; | 
            
              | 586 |  | 
            
              | 587 |     my @pickup_locations; | 
            
              | 588 |     my @destination_codes; | 
            
              | 589 |     foreach my $lib (@$to){ | 
            
              | 590 |         next unless $lib->pickup_location; | 
            
              | 591 |         push @destination_codes, $lib->branchcode; | 
            
              | 592 |         push @pickup_locations, $lib; | 
            
              | 593 |     } | 
            
              | 594 |  | 
            
              | 595 |     return \@pickup_locations unless C4::Context->preference('UseBranchTransferLimits'); | 
            
              | 596 |  | 
            
              | 597 |     my $limittype = C4::Context->preference('BranchTransferLimitsType'); | 
            
              | 598 |     my $limiter = $limittype eq 'itemtype' ? $self->effective_itemtype : $self->ccode; | 
            
              | 599 |  | 
            
              | 600 |     my $limits = Koha::Item::Transfer::Limits->search({ | 
            
              | 601 |                 fromBranch => $from, | 
            
              | 602 |                 $limittype => $limiter | 
            
              | 603 |             }); | 
            
              | 604 |     my @limits = $limits->get_column('toBranch'); | 
            
              | 605 |     return \@pickup_locations unless @limits; | 
            
              | 606 |  | 
            
              | 607 |     my @can_transfer = Koha::Libraries->search({ | 
            
              | 608 |         pickup_location => 1, | 
            
              | 609 |         branchcode => { | 
            
              | 610 |             -in => \@destination_codes, | 
            
              | 611 |             -not_in => \@limits, | 
            
              | 612 |         } | 
            
              | 613 |     }); | 
            
              | 614 |     return \@can_transfer; | 
            
              | 615 | } | 
            
              | 616 |  | 
        
          | 617 | =head3 pickup_locations | 556 | =head3 pickup_locations | 
        
          | 618 |  | 557 |  | 
        
          | 619 | $pickup_locations = $item->pickup_locations( {patron => $patron } ) | 558 | $pickup_locations = $item->pickup_locations( {patron => $patron } ) | 
  
    | Lines 633-668
          sub pickup_locations {
      
      
        Link Here | 
        
          | 633 |     my $branchitemrule = | 572 |     my $branchitemrule = | 
        
          | 634 |       C4::Circulation::GetBranchItemRule( $circ_control_branch, $self->itype ); | 573 |       C4::Circulation::GetBranchItemRule( $circ_control_branch, $self->itype ); | 
        
          | 635 |  | 574 |  | 
            
              | 636 |     my @libs; |  |  | 
        
          | 637 |     if(defined $patron) { | 575 |     if(defined $patron) { | 
          
            
              | 638 |         return \@libs if $branchitemrule->{holdallowed} == 3 && !$self->home_branch->validate_hold_sibling( {branchcode => $patron->branchcode} ); | 576 |         return Koha::Libraries->new()->empty if $branchitemrule->{holdallowed} == 3 && !$self->home_branch->validate_hold_sibling( {branchcode => $patron->branchcode} ); | 
            
              | 639 |         return \@libs if $branchitemrule->{holdallowed} == 1 && $self->home_branch->branchcode ne $patron->branchcode; | 577 |         return Koha::Libraries->new()->empty if $branchitemrule->{holdallowed} == 1 && $self->home_branch->branchcode ne $patron->branchcode; | 
        
          | 640 |     } | 578 |     } | 
          
            
              | 641 |  | 579 |   | 
            
              |  |  | 580 |     my $pickup_libraries = Koha::Libraries->search(); | 
        
          | 642 |     if ($branchitemrule->{hold_fulfillment_policy} eq 'holdgroup') { | 581 |     if ($branchitemrule->{hold_fulfillment_policy} eq 'holdgroup') { | 
          
            
              | 643 |         @libs  = $self->home_branch->get_hold_libraries; | 582 |         $pickup_libraries = $self->home_branch->get_hold_libraries; | 
            
              | 644 |         push @libs, $self->home_branch unless scalar(@libs) > 0; |  |  | 
        
          | 645 |     } elsif ($branchitemrule->{hold_fulfillment_policy} eq 'patrongroup') { | 583 |     } elsif ($branchitemrule->{hold_fulfillment_policy} eq 'patrongroup') { | 
        
          | 646 |         my $plib = Koha::Libraries->find({ branchcode => $patron->branchcode}); | 584 |         my $plib = Koha::Libraries->find({ branchcode => $patron->branchcode}); | 
          
            
              | 647 |         @libs  = $plib->get_hold_libraries; | 585 |         $pickup_libraries = $plib->get_hold_libraries; | 
            
              | 648 |         push @libs, $self->home_branch unless scalar(@libs) > 0; |  |  | 
        
          | 649 |     } elsif ($branchitemrule->{hold_fulfillment_policy} eq 'homebranch') { | 586 |     } elsif ($branchitemrule->{hold_fulfillment_policy} eq 'homebranch') { | 
          
            
              | 650 |         push @libs, $self->home_branch; | 587 |         $pickup_libraries = Koha::Libraries->search({ branchcode => $self->homebranch }); | 
        
          | 651 |     } elsif ($branchitemrule->{hold_fulfillment_policy} eq 'holdingbranch') { | 588 |     } elsif ($branchitemrule->{hold_fulfillment_policy} eq 'holdingbranch') { | 
          
            
              | 652 |         push @libs, $self->holding_branch; | 589 |         $pickup_libraries = Koha::Libraries->search({ branchcode => $self->holdingbranch }); | 
            
              | 653 |     } else { | 590 |     }; | 
            
              | 654 |         @libs = Koha::Libraries->search({ | 591 |      | 
            
              |  |  | 592 |     return $pickup_libraries->search( | 
            
              | 593 |         { | 
        
          | 655 |             pickup_location => 1 | 594 |             pickup_location => 1 | 
          
            
              | 656 |         }, { | 595 |         }, | 
            
              |  |  | 596 |         { | 
        
          | 657 |             order_by => ['branchname'] | 597 |             order_by => ['branchname'] | 
          
            
              | 658 |         })->as_list; | 598 |         } | 
            
              | 659 |     } | 599 |     ) unless C4::Context->preference('UseBranchTransferLimits'); | 
        
          | 660 |  | 600 |  | 
          
            
              | 661 |     my $pickup_locations = $self->_can_pickup_locations({ | 601 |     my $limittype = C4::Context->preference('BranchTransferLimitsType'); | 
            
              | 662 |         to => \@libs | 602 |     my $limiter = $limittype eq 'itemtype' ? $self->effective_itemtype : $self->ccode; | 
            
              | 663 |     }); | 603 |     my $limits = Koha::Item::Transfer::Limits->search( | 
            
              |  |  | 604 |         { | 
            
              | 605 |             fromBranch => $self->holdingbranch, | 
            
              | 606 |             $limittype => $limiter | 
            
              | 607 |         }, | 
            
              | 608 |         { columns => ['toBranch'] } | 
            
              | 609 |     ); | 
        
          | 664 |  | 610 |  | 
          
            
              | 665 |     return $pickup_locations; | 611 |     return $pickup_libraries->search( | 
            
              |  |  | 612 |         { | 
            
              | 613 |             pickup_location => 1, | 
            
              | 614 |             branchcode      => { | 
            
              | 615 |                 '-not_in' => $limits->_resultset->as_query | 
            
              | 616 |             } | 
            
              | 617 |         }, | 
            
              | 618 |         { | 
            
              | 619 |             order_by => ['branchname'] | 
            
              | 620 |         } | 
            
              | 621 |     ); | 
        
          | 666 | } | 622 | } | 
        
          | 667 |  | 623 |  | 
        
          | 668 | =head3 article_request_type | 624 | =head3 article_request_type |