From 37df4eec4b22080834bab73b1fb6381e5b8844c2 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, 31 insertions(+), 1 deletion(-)

diff --git a/C4/XSLT.pm b/C4/XSLT.pm
index b757f8f..2a8dd11 100644
--- a/C4/XSLT.pm
+++ b/C4/XSLT.pm
@@ -284,9 +284,11 @@ sub buildKohaItemsNamespace {
     my $location = "";
     my $ccode = "";
     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 = '';
         my ( $transfertwhen, $transfertfrom, $transfertto ) = C4::Circulation::GetTransfers($item->{itemnumber});
 
         my $reservestatus = C4::Reserves::GetReserveStatus( $item->{itemnumber} );
@@ -299,6 +301,11 @@ sub buildKohaItemsNamespace {
             if ( $item->{itemnotforloan} > 0 || $item->{notforloan} > 0 || $itemtypes->{ $item->{itype} }->{notforloan} == 1 ) {
                 $status = "reference";
             }
+            if ($item->{itemnotforloan} > 0 || $item->{notforloan} > 0 ){
+                $status = "reallynotforloan";
+                $substatus = $descs{$item->{notforloan}} || '';
+                $substatus = $substatus->{opac_description} if $substatus;
+            }
             if ($item->{onloan}) {
                 $status = "Checked out";
             }
@@ -333,6 +340,7 @@ sub buildKohaItemsNamespace {
           . "<location>$location</location>"
           . "<ccode>$ccode</ccode>"
           . "<status>$status</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 7349b81..99b1457 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/>
@@ -1249,6 +1250,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>
-- 
1.9.1