@@ -, +, @@
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;
};
--