@@ -, +, @@ sudo koha-shell kohadev perl misc/cronjobs/holds/build_holds_queue.pl --- C4/Items.pm | 3 +++ C4/XSLT.pm | 5 ++++- .../prog/en/modules/admin/preferences/circulation.pref | 2 +- koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc | 5 +++++ .../bootstrap/en/xslt/MARC21slim2OPACResults.xsl | 6 ++++++ t/db_dependent/Items.t | 15 ++++++++++++++- 6 files changed, 33 insertions(+), 3 deletions(-) --- a/C4/Items.pm +++ a/C4/Items.pm @@ -963,6 +963,7 @@ sub GetItemsInfo { holding.opac_info as holding_branch_opac_info, home.opac_info as home_branch_opac_info "; + $query .= ",IF(tmp_holdsqueue.itemnumber,1,0) AS pending_hold" if !C4::Context->preference('AllowItemsOnHoldCheckout'); $query .= " FROM items LEFT JOIN branches AS holding ON items.holdingbranch = holding.branchcode @@ -975,6 +976,8 @@ sub GetItemsInfo { LEFT JOIN serial USING (serialid) LEFT JOIN itemtypes ON itemtypes.itemtype = " . (C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype'); + $query .= " + LEFT JOIN tmp_holdsqueue USING (itemnumber)" if !C4::Context->preference('AllowItemsOnHoldCheckout'); $query .= q| LEFT JOIN localization ON itemtypes.itemtype = localization.code AND localization.entity = 'itemtypes' --- a/C4/XSLT.pm +++ a/C4/XSLT.pm @@ -293,7 +293,7 @@ sub buildKohaItemsNamespace { my $reservestatus = C4::Reserves::GetReserveStatus( $item->{itemnumber} ); if ( ( $item->{itype} && $itemtypes->{ $item->{itype} }->{notforloan} ) || $item->{notforloan} || $item->{onloan} || $item->{withdrawn} || $item->{itemlost} || $item->{damaged} || - (defined $transfertwhen && $transfertwhen ne '') || $item->{itemnotforloan} || (defined $reservestatus && $reservestatus eq "Waiting") ){ + (defined $transfertwhen && $transfertwhen ne '') || $item->{itemnotforloan} || (defined $reservestatus && $reservestatus eq "Waiting") || $item->{pending_hold} ){ if ( $item->{notforloan} < 0) { $status = "On order"; } @@ -318,6 +318,9 @@ sub buildKohaItemsNamespace { if (defined $reservestatus && $reservestatus eq "Waiting") { $status = 'Waiting'; } + if ($item->{pending_hold}) { + $status = 'Pending hold'; + } } else { $status = "available"; } --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref @@ -196,7 +196,7 @@ Circulation: choices: yes: Allow no: "Don't allow" - - checkouts of items reserved to someone else. If allowed do not generate RESERVE_WAITING and RESERVED warning. This allows self checkouts for those items. + - checkouts of items reserved to someone else. If allowed do not generate RESERVE_WAITING and RESERVED warning. This allows self checkouts for those items. If using the holds queue items with pending holds will be marked as "unavailable" if this set to "Don't Allow". - - pref: AllowItemsOnHoldCheckoutSCO choices: --- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc +++ a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc @@ -89,6 +89,11 @@ On order [% END %] +[% IF item.pending_hold %] + [% SET itemavailable = 0 %] + Pending hold +[% END %] + [% IF ( itemavailable ) %] [% IF NOT item.isa('Koha::Item') %][% SET restrictedvalueopac = item.restrictedvalueopac %][% END %] Available [% IF restrictedvalueopac %]([% restrictedvalueopac | html %])[% END %] --- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl +++ a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl @@ -1299,6 +1299,12 @@ ). + + + Pending hold ( + + ). + In transit ( --- a/t/db_dependent/Items.t +++ a/t/db_dependent/Items.t @@ -251,7 +251,7 @@ subtest 'GetHiddenItemnumbers tests' => sub { subtest 'GetItemsInfo tests' => sub { - plan tests => 7; + plan tests => 9; $schema->storage->txn_begin; @@ -313,6 +313,19 @@ subtest 'GetItemsInfo tests' => sub { is( $results[0]->{ restrictedvalueopac }, "Restricted Access OPAC", 'GetItemsInfo returns a restricted value description (OPAC)' ); + t::lib::Mocks::mock_preference( 'AllowItemsOnHoldCheckout', 0 ); + #place item into holds queue + my $dbh = C4::Context->dbh; + $dbh->do(q{INSERT INTO tmp_holdsqueue (biblionumber, itemnumber, surname, borrowernumber ) VALUES (?, ?, "Zorro", 42)}, undef, $item_bibnum, $itemnumber); + @results = GetItemsInfo( $biblio->biblionumber ); + is( $results[0]->{ pending_hold }, "1", + 'Hold marked as pending/unavailable if not AllowItemsOnHoldCheckout' ); + t::lib::Mocks::mock_preference( 'AllowItemsOnHoldCheckout', 1 ); + @results = GetItemsInfo( $biblio->biblionumber ); + is( $results[0]->{ pending_hold }, undef, + 'Hold not marked as pending/unavailable if AllowItemsOnHoldCheckout' ); + + $schema->storage->txn_rollback; }; --