use Koha::Exceptions::ClubHold;
use Koha::Club::Hold::PatronHold;
use Koha::Clubs;
+use Koha::Patrons;
use List::Util 'shuffle';
foreach my $enrollment (@enrollments) {
my $patron_id = $enrollment->borrowernumber;
+ my $pickup_id = $params->{pickup_library_id};
+
+ my $can_place_hold;
+ if($params->{default_patron_home}) {
+ my $patron = Koha::Patrons->find($patron_id);
+ my $patron_home = $patron->branchcode;
+ $can_place_hold = $params->{item_id}
+ ? C4::Reserves::CanItemBeReserved( $patron_id, $params->{item_id}, $patron_home )
+ : C4::Reserves::CanBookBeReserved( $patron_id, $params->{biblio_id}, $patron_home );
+ $pickup_id = $patron_home if $can_place_hold->{status} eq 'OK';
+ unless ( $can_place_hold->{status} eq 'OK' ) {
+ warn "Patron(".$patron_id.") Hold cannot be placed with patron's homebranch ($patron_home). Reason: " . $can_place_hold->{status};
+ }
+ }
- my $can_place_hold
- = $params->{item_id}
- ? C4::Reserves::CanItemBeReserved( $patron_id, $params->{club_id} )
- : C4::Reserves::CanBookBeReserved( $patron_id, $params->{biblio_id} );
+ unless ( defined $can_place_hold && $can_place_hold->{status} eq 'OK' ) {
+ $can_place_hold = $params->{item_id}
+ ? C4::Reserves::CanItemBeReserved( $patron_id, $params->{item_id}, $pickup_id )
+ : C4::Reserves::CanBookBeReserved( $patron_id, $params->{biblio_id}, $pickup_id );
+ }
unless ( $can_place_hold->{status} eq 'OK' ) {
warn "Patron(".$patron_id.") Hold cannot be placed. Reason: " . $can_place_hold->{status};
my $hold_id = C4::Reserves::AddReserve(
{
- branchcode => $params->{pickup_library_id},
+ branchcode => $pickup_id,
borrowernumber => $patron_id,
biblionumber => $params->{biblio_id},
priority => $priority,
error_message => "Could not create hold for Patron(".$patron_id.")"
})->store();
}
-
}
return $club_hold;
my $item_type = $body->{item_type};
my $expiration_date = $body->{expiration_date};
my $notes = $body->{notes};
+ my $default_patron_home = $body->{default_patron_home};
if ( $item_id and $biblio_id ) {
pickup_library_id => $pickup_library_id,
expiration_date => $expiration_date,
notes => $notes,
- item_type => $item_type
+ item_type => $item_type,
+ default_patron_home => $default_patron_home
});
return $c->render(
[% PROCESS options_for_libraries libraries => Branches.all({ selected => club.branchcode, search_params => { pickup_location => 1 } }) %]
</select>
</li>
+ <li>
+ <label for="default_patron_home">Pickup at patron's home library when possible</label>
+ <input type="checkbox" name="default_patron_home"/>
+ </li>
</ol>
<h2 style="padding: 0 1em;">Members</h2>
<ol>
if($('input[name="itemtype"]').length) {
data.item_type = $('input[name="itemtype"]').val()||null;
}
+ if($('input[name="default_patron_home"]:checked').length) {
+ data.default_patron_home = 1;
+ }
if($('input[name="biblionumbers"]').length) {
biblionumbers_text = $('input[name="biblionumbers"]').val();
biblionumbers = biblionumbers_text.replace(/\/$/, '').split('/')