From fe7d630c1cc9dc44f63c6dd77d87049eb256f5f3 Mon Sep 17 00:00:00 2001
From: Mehdi Hamidi <mehdi.hamidi@inlibro.com>
Date: Fri, 3 Mar 2017 14:33:29 -0500
Subject: [PATCH] Bug 7611: Show the NOT_LOAN authorised values for item status
 in XSLT OPAC search results

Added : Call number for all not for loan status

XSLT Results template improvement : Use the NOT_LOAN authorised values

Improvement : Use the NOT_LOAN authorised values when showing items status in the OPAC search results.
Before this patch, these items were only considered as "unavailable".

Note : This patch only affects the OPAC XSLT search results template for MARC21 records. This patch was not tested on UNIMARC or NORMARC records. I won't be able to support these formats, so I'm hoping someone could do the same for these other record formats.

Patch sponsored by the CCSR ( http://www.ccsr.qc.ca )
---
 C4/XSLT.pm                                         | 10 ++++++++++
 .../bootstrap/en/xslt/MARC21slim2OPACResults.xsl   | 22 ++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/C4/XSLT.pm b/C4/XSLT.pm
index 173d4e0da7..160252a5ff 100644
--- a/C4/XSLT.pm
+++ b/C4/XSLT.pm
@@ -310,8 +310,12 @@ sub buildKohaItemsNamespace {
 
     my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search->unblessed } };
     my $xml = '';
+    my %descs = map { $_->{authorised_value} => $_ } Koha::AuthorisedValues->get_descriptions_by_koha_field( { kohafield => 'items.notforloan' } );
+
     for my $item (@items) {
         my $status;
+        my $substatus = '';
+<<<<<<< HEAD
 
         if ($item->has_pending_hold) {
             $status = 'Pending hold';
@@ -334,6 +338,11 @@ sub buildKohaItemsNamespace {
         elsif ($item->onloan) {
             $status = "Checked out";
         }
+        elsif ( $item->notforloan > 0 ) {
+                $status = "reallynotforloan";
+                $substatus = $descs{$item->{notforloan}} || '';
+                $substatus = $substatus->{opac_description} if $substatus;
+        }
         elsif ( $item->notforloan && $item->notforloan > 0
             || exists $itemtypes->{ $item->effective_itemtype }
             && $itemtypes->{ $item->effective_itemtype }->{notforloan} == 1 )
@@ -359,6 +368,7 @@ sub buildKohaItemsNamespace {
           . "<location>$location</location>"
           . "<ccode>$ccode</ccode>"
           . "<status>".( $status // q{} )."</status>"
+          . "<substatus>$substatus</substatus>"
           . "<itemcallnumber>$itemcallnumber</itemcallnumber>"
           . "<stocknumber>$stocknumber</stocknumber>"
           . "</item>";
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
index 14f8b17144..c4061cda99 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
@@ -12,6 +12,7 @@
     <xsl:key name="item-by-status" match="items:item" use="items:status"/>
     <xsl:key name="item-by-status-and-branch-home" match="items:item" use="concat(items:status, ' ', items:homebranch)"/>
     <xsl:key name="item-by-status-and-branch-holding" match="items:item" use="concat(items:status, ' ', items:holdingbranch)"/>
+    <xsl:key name="item-by-substatus-and-branch" match="items:item" use="concat(items:substatus, ' ', items:homebranch)"/>
 
     <xsl:template match="/">
             <xsl:apply-templates/>
@@ -1334,6 +1335,27 @@
                        </xsl:when></xsl:choose>
                    </xsl:when> </xsl:choose>
 
+                   <xsl:if test="count(key('item-by-status', 'available'))=0">
+                       <span class="available"><xsl:value-of select="items:homebranch"/><xsl:text>: </xsl:text></span>
+                   </xsl:if>
+
+                   <xsl:choose>
+                       <xsl:when test="count(key('item-by-status', 'reallynotforloan'))>0">
+                          <span class="unavailable">
+                              <br />
+                             <xsl:variable name="reference_items" select="key('item-by-status', 'reallynotforloan')"/>
+                             <xsl:for-each select="$reference_items[generate-id() = generate-id(key('item-by-substatus-and-branch', concat(items:substatus, ' ', items:homebranch))[1])]">
+                                  <xsl:value-of select="items:substatus"/>
+                                  <xsl:if test="items:itemcallnumber != '' and items:itemcallnumber"> [<span class="LabelCallNumber">Call number: </span><xsl:value-of select="items:itemcallnumber"/>]</xsl:if>
+                                  <xsl:text> (</xsl:text>
+                                  <xsl:value-of select="count(key('item-by-substatus-and-branch', concat(items:substatus, ' ', items:homebranch)))"/>
+                                  <xsl:text>)</xsl:text>
+                                  <xsl:choose><xsl:when test="position()=last()"><xsl:text>. </xsl:text></xsl:when><xsl:otherwise><xsl:text>, </xsl:text></xsl:otherwise></xsl:choose>
+                              </xsl:for-each>
+                           </span>
+                       </xsl:when>
+                   </xsl:choose>
+
                    <xsl:if test="count(key('item-by-status', 'Checked out'))>0">
                    <span class="unavailable">
                        <xsl:text>Checked out (</xsl:text>
-- 
2.11.0