@@ -, +, @@ on same biblio or use info from reserves, e.g. reserve_id in the HOLD_SLIP t/db_dependent/Reserves/ReserveSlip.t --- C4/Reserves.pm | 8 +- circ/hold-transfer-slip.pl | 4 +- .../prog/en/modules/circ/circulation.tt | 4 +- .../intranet-tmpl/prog/en/modules/circ/returns.tt | 2 +- t/db_dependent/Reserves/ReserveSlip.t | 130 +++++++++++++++++++++ 5 files changed, 141 insertions(+), 7 deletions(-) create mode 100644 t/db_dependent/Reserves/ReserveSlip.t --- a/C4/Reserves.pm +++ a/C4/Reserves.pm @@ -2339,7 +2339,7 @@ sub GetReserveId { =head2 ReserveSlip - ReserveSlip($branchcode, $borrowernumber, $biblionumber) + ReserveSlip($branchcode, $borrowernumber, $biblionumber [, $itemnumber, $barcode ]) Returns letter hash ( see C4::Letters::GetPreparedLetter ) or undef @@ -2356,13 +2356,15 @@ available within the slip: =cut sub ReserveSlip { - my ($branch, $borrowernumber, $biblionumber) = @_; + my ($branch, $borrowernumber, $biblionumber, $itemnumber, $barcode) = @_; # return unless ( C4::Context->boolean_preference('printreserveslips') ); + my $item = C4::Items::GetItem($itemnumber, $barcode); my $reserve_id = GetReserveId({ biblionumber => $biblionumber, - borrowernumber => $borrowernumber + borrowernumber => $borrowernumber, + itemnumber => $item->{itemnumber} }) or return; my $reserve = GetReserveInfo($reserve_id) or return; --- a/circ/hold-transfer-slip.pl +++ a/circ/hold-transfer-slip.pl @@ -38,6 +38,8 @@ my $session = get_session($sessionID); my $biblionumber = $input->param('biblionumber'); my $borrowernumber = $input->param('borrowernumber'); +my $itemnumber = $input->param('itemnumber'); +my $barcode = $input->param('barcode'); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { @@ -52,7 +54,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( my $userenv = C4::Context->userenv; my ($slip, $is_html); -if ( my $letter = ReserveSlip ($session->param('branch') || $userenv->{branch}, $borrowernumber, $biblionumber) ) { +if ( my $letter = ReserveSlip ($session->param('branch') || $userenv->{branch}, $borrowernumber, $biblionumber, $itemnumber, $barcode) ) { $slip = $letter->{content}; $is_html = $letter->{is_html}; } --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -372,7 +372,7 @@ $(document).ready(function() { - + [% END %] @@ -382,7 +382,7 @@ $(document).ready(function() { - + [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt @@ -45,7 +45,7 @@ $(document).ready(function () { }); [% IF print_slip %] - Dopop('hold-transfer-slip.pl?borrowernumber=[% borrowernumber %]&biblionumber=[% biblionumber %]'); + Dopop('hold-transfer-slip.pl?borrowernumber=[% borrowernumber %]&biblionumber=[% biblionumber %]&itemnumber=[% itemnumber %]'); [% END %] var columns_settings = [% ColumnsSettings.GetColumns( 'circ', 'returns', 'checkedintable', 'json' ) %] --- a/t/db_dependent/Reserves/ReserveSlip.t +++ a/t/db_dependent/Reserves/ReserveSlip.t @@ -0,0 +1,130 @@ +#!/usr/bin/perl + +# Copyright 2016 Oslo Public Library +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use Test::More tests => 5; +use t::lib::TestBuilder; + +use C4::Reserves qw( ReserveSlip ); +use C4::Context; +use Koha::Database; +use Koha::Holds; +my $schema = Koha::Database->new->schema; +$schema->storage->txn_begin; + +my $dbh = C4::Context->dbh; +$dbh->do(q|DELETE FROM letter|); + +my $builder = t::lib::TestBuilder->new(); +my $library = $builder->build( + { + source => 'Branch', + } +); + +my $patron = $builder->build( + { + source => 'Borrower', + value => { + branchcode => $library->{branchcode}, + }, + } +); + +my $letter = Koha::Database->new()->schema()->resultset('Letter')->new( + { + module => 'circulation', + code => 'HOLD_SLIP', + content => 'Hold found for <>: Please pick up <> with barcode <> at <>.', + message_transport_type => 'email', + + } +)->insert; + +my $biblio = $builder->build( + { + source => 'Biblio', + value => { + title => 'Title 1', + }, + } +); +my $item1 = $builder->build( + { + source => 'Item', + value => { + biblionumber => $biblio->{biblionumber}, + homebranch => $library->{branchcode}, + holdingbranch => $library->{branchcode}, + }, + } +); + +my $item2 = $builder->build( + { + source => 'Item', + value => { + biblionumber => $biblio->{biblionumber}, + homebranch => $library->{branchcode}, + holdingbranch => $library->{branchcode}, + }, + } +); + +my $hold1 = Koha::Hold->new( + { + biblionumber => $biblio->{biblionumber}, + itemnumber => $item1->{itemnumber}, + waitingdate => '2000-01-01', + borrowernumber => $patron->{borrowernumber}, + branchcode => $library->{branchcode}, + } +)->store; + +my $hold2 = Koha::Hold->new( + { + biblionumber => $biblio->{biblionumber}, + itemnumber => $item2->{itemnumber}, + waitingdate => '2000-01-01', + borrowernumber => $patron->{borrowernumber}, + branchcode => $library->{branchcode}, + } +)->store; + +is ( ReserveSlip(), undef, "No hold slip returned if invalid or undef borrowernumber and/or biblionumber" ); +is ( ReserveSlip($library->{branchcode}, $patron->{borrowernumber}, $biblio->{biblionumber})->{code}, + 'HOLD_SLIP', "Get a hold slip from library, patron and biblio" ); + +is (ReserveSlip($library->{branchcode}, $patron->{borrowernumber}, $biblio->{biblionumber})->{content}, + "Hold found for $patron->{firstname}: Please pick up $biblio->{title} with barcode $item1->{barcode} at $library->{branchcode}.", "Hold slip contains correctly parsed content"); + +is_deeply( + ReserveSlip($library->{branchcode}, $patron->{borrowernumber}, $biblio->{biblionumber}), + ReserveSlip($library->{branchcode}, $patron->{borrowernumber}, $biblio->{biblionumber}, $item1->{itemnumber}, $item1->{barcode}), + "No item as param generate hold slip from first item in reserves"); + +isnt ( + ReserveSlip($library->{branchcode}, $patron->{borrowernumber}, $biblio->{biblionumber})->{content}, + ReserveSlip($library->{branchcode}, $patron->{borrowernumber}, $biblio->{biblionumber}, $item2->{itemnumber}, $item2->{barcode})->{content}, + "Item and/or barcode as params return correct pickup item in hold slip"); + +$schema->storage->txn_rollback; + +1; --