diff --git a/C4/Reserves.pm b/C4/Reserves.pm index da7e13a75b..d86e9f46f9 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -2179,6 +2179,7 @@ sub ReserveSlip { my ($args) = @_; my $branchcode = $args->{branchcode}; my $reserve_id = $args->{reserve_id}; + my $itemnumber = $args->{itemnumber}; my $hold = Koha::Holds->find($reserve_id); return unless $hold; @@ -2197,7 +2198,7 @@ sub ReserveSlip { 'borrowers' => $reserve->{borrowernumber}, 'biblio' => $reserve->{biblionumber}, 'biblioitems' => $reserve->{biblionumber}, - 'items' => $reserve->{itemnumber}, + 'items' => $reserve->{itemnumber} || $itemnumber, }, ); } diff --git a/circ/circulation.pl b/circ/circulation.pl index 83d393d6c0..63ad77fdff 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -38,7 +38,7 @@ use C4::Circulation qw( barcodedecode CanBookBeIssued AddIssue ); use C4::Members; use C4::Biblio qw( TransformMarcToKoha ); use C4::Search qw( new_record_from_zebra ); -use C4::Reserves; +use C4::Reserves qw( ModReserveAffect ); use Koha::Holds; use C4::Context; use CGI::Session; @@ -69,6 +69,10 @@ my $override_high_holds_tmp = $query->param('override_high_holds_tmp'); my $sessionID = $query->cookie("CGISESSID") ; my $session = get_session($sessionID); +my $userenv = C4::Context->userenv; +my $branch = $userenv->{'branch'} // ''; +my $desk_id = $userenv->{"desk_id"} || ''; + my $barcodes = []; my $barcode = $query->param('barcode'); my $findborrower; @@ -88,6 +92,18 @@ if (C4::Context->preference("AutoSwitchPatron") && $barcode) { $findborrower ||= $query->param('findborrower') || q{}; $findborrower =~ s|,| |g; +if ( $query->param('confirm_hold') ) { + my $reserve_id = $query->param('confirm_hold'); + my $hold_branch = $query->param('hold_branch'); + my $hold_itemnumber = $query->param('hold_itemnumber'); + my $hold_borrowernumber = $query->param('hold_borrowernumber'); + my $diffBranchSend = ( $branch ne $hold_branch ); + + # diffBranchSend tells ModReserveAffect whether document is expected in this library or not, + # i.e., whether to apply waiting status + ModReserveAffect( $hold_itemnumber, $hold_borrowernumber, $diffBranchSend, $reserve_id, $desk_id ); +} + # Barcode given by user could be '0' if ( $barcode || ( defined($barcode) && $barcode eq '0' ) ) { $barcodes = [ $barcode ]; @@ -134,7 +150,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user ( my $logged_in_user = Koha::Patrons->find( $loggedinuser ); my $force_allow_issue = $query->param('forceallow') || 0; -if (!C4::Auth::haspermission( C4::Context->userenv->{id} , { circulate => 'force_checkout' } )) { +if (!C4::Auth::haspermission( $userenv->{id} , { circulate => 'force_checkout' } )) { $force_allow_issue = 0; } my $onsite_checkout = $query->param('onsite_checkout'); @@ -151,8 +167,6 @@ my @failedreturns = $query->multi_param('failedreturn'); our %return_failed = (); for (@failedreturns) { $return_failed{$_} = 1; } -my $branch = C4::Context->userenv->{'branch'}; - for my $barcode ( @$barcodes ) { $barcode = barcodedecode( $barcode ) if $barcode; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt index cdd223688f..5b31196b06 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -391,12 +391,16 @@ [% END # /IF ADDITIONAL_MATERIALS %] [% IF ( RESERVED or RESERVE_WAITING or TRANSFERRED or PROCESSING ) %] -
+ + + + + - +
[% END %] diff --git a/t/db_dependent/Reserves/ReserveSlip.t b/t/db_dependent/Reserves/ReserveSlip.t index 03b5731644..664f9a1b0c 100755 --- a/t/db_dependent/Reserves/ReserveSlip.t +++ b/t/db_dependent/Reserves/ReserveSlip.t @@ -19,7 +19,7 @@ use Modern::Perl; -use Test::More tests => 3; +use Test::More tests => 4; use t::lib::TestBuilder; use C4::Reserves qw( ReserveSlip ); @@ -111,6 +111,46 @@ is (ReserveSlip({ })->{content}, sprintf( "Hold found for %s: Please pick up %s with barcode %s at %s.", $patron->{firstname}, $biblio->title, $item1->barcode, $library->{branchcode}),"Hold slip contains correctly parsed content"); +subtest 'title level hold' => sub { + plan tests => 2; + + my $biblio = $builder->build_sample_biblio; + my $item = $builder->build_sample_item( + { + biblionumber => $biblio->biblionumber, + library => $library->{branchcode}, + } + ); + my $hold = $builder->build_object( + { + class => 'Koha::Holds', + value => { + branchcode => $library->{branchcode}, + borrowernumber => $patron->{borrowernumber}, + biblionumber => $biblio->id, + itemnumber => undef, + } + } + ); + + my $slip = ReserveSlip( + { + branchcode => $hold->branchcode, + reserve_id => $hold->id, + itemnumber => $item->id + } + ); + is( $slip->{code}, 'HOLD_SLIP', "We get expected letter" ); + is( + $slip->{content}, + sprintf( + "Hold found for %s: Please pick up %s with barcode %s at %s.", $patron->{firstname}, $biblio->title, + $item->barcode, $library->{branchcode} + ), + "Hold slip contents correctly use the passed item" + ); +}; + $schema->storage->txn_rollback; 1;