On the staff side behaviour differs for default pickup location when placing a hold or
placing an overridden hold. Additionally, the behaviour has changed betwee master and stables
We should provide a consistent default, and allow the library to specify their choice
Note this only affects staff client as there is only a single dropdown on OPAC and it is not
tied to items
To test:
1 - Apply patch
2 - Update database
3 - Find a record with items from various branches, and at least one with a different home/holding branch
4 - Ensure there is an item that requires override to hold, and AllowHoldPolicyOverride is enabled
4 - Attempt to place hold
5 - Confirm all dropdowns default to logged in library
6 - Set DefaultHoldPickupLocation to item's home branch
7 - Refresh and confirm all dropdowns match item home library except biblio level hold - still logged in library
8 - Set DefaultHoldPickupLocation to item's holding branch
9 - Refresh and confirm defaults
10 - Mark one of the items holding library as 'not a pickup location' in Admin->Libraries
11 - Refresh and confirm dropdown is now empty for that item
Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
--- /dev/null
+use Modern::Perl;
+
+return {
+ bug_number => "23659",
+ description => "Add DefaultHoldPickupLocation syspref",
+ up => sub {
+ my ($args) = @_;
+ my ($dbh, $out) = @$args{qw(dbh out)};
+ # Do you stuffs here
+ $dbh->do(q{
+ INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES
+ ('DefaultHoldPickupLocation','loggedinlibrary','loggedinlibrary|homebranch|holdingbranch','Which branch should a hold pickup location default to. ','choice')
+ });
+ # Print useful stuff here
+ say $out "Added DefaultHoldPickupLocation syspref";
+ },
+};
('DefaultHoldExpirationdate','0','','Automatically set expiration date for holds','YesNo'),
('DefaultHoldExpirationdatePeriod','0','','How long into the future default expiration date is set to be.','integer'),
('DefaultHoldExpirationdateUnitOfTime','days','days|months|years','Which unit of time is used when setting the default expiration date. ','choice'),
+('DefaultHoldPickupLocation','loggedinlibrary','loggedinlibrary|homelibrary','Which branch should a hold pickup location default to. ','choice'),
('DefaultLanguageField008','','','Fill in the default language for field 008 Range 35-37 of MARC21 records (e.g. eng, nor, ger, see <a href=\"http://www.loc.gov/marc/languages/language_code.html\">MARC Code List for Languages</a>)','Free'),
('DefaultLongOverdueSkipLostStatuses', '', NULL, 'Skip these lost statuses by default in longoverdue.pl', 'Free'),
('DefaultLongOverdueChargeValue', '', NULL, "Charge a lost item to the borrower's account when the LOST value of the item changes to n.", 'integer'),
months: months
years: years
- from reserve date.
+ -
+ - When placing a hold via the staff client default the pickup location to the
+ - pref: DefaultHoldPickupLocation
+ default: loggedinlibrary
+ choices:
+ loggedinlibrary: "logged in library"
+ homebranch: "item's home branch"
+ holdingbranch: "item's holding branch"
Interlibrary loans:
-
- pref: ILLModule
$item->{item_level_holds} = Koha::CirculationRules->get_opacitemholds_policy( { item => $item_object, patron => $patron } );
+ my $default_hold_pickup_location_pref = C4::Context->preference('DefaultHoldPickupLocation');
+ my $default_pickup_branch;
+ if( $default_hold_pickup_location_pref eq 'homebranch' ){
+ $default_pickup_branch = $item->{homebranch};
+ } elsif ( $default_hold_pickup_location_pref eq 'holdingbranch' ){
+ $default_pickup_branch = $item->{holdingbranch};
+ } else {
+ $default_pickup_branch = C4::Context->userenv->{branch};
+ }
+
if (
!$item->{cantreserve}
&& !$exceeded_maxreserves
$num_items_available++;
$item->{available} = 1;
# pass the holding branch for use as default
- my $default_pickup_location = $pickup_locations->search({ branchcode => $item->{holdingbranch} })->next;
+ my $default_pickup_location = $pickup_locations->search({ branchcode => $default_pickup_branch })->next;
$item->{default_pickup_location} = $default_pickup_location;
}
else {
my $default_pickup_location;
- # Default to logged-in, if valid
- if ( C4::Context->userenv->{branch} ) {
- ($default_pickup_location) = grep { $_->branchcode eq C4::Context->userenv->{branch} } @pickup_locations;
- }
+ ($default_pickup_location) = grep { $_->branchcode eq $default_pickup_branch } @pickup_locations;
$item->{default_pickup_location} = $default_pickup_location;
}