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 |