Bug 7611: Show the NOT_LOAN authorised values for item status in XSLT OPAC search...
authorMehdi Hamidi <mehdi.hamidi@inlibro.com>
Fri, 3 Mar 2017 19:33:29 +0000 (14:33 -0500)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 17 Feb 2020 11:20:52 +0000 (11:20 +0000)
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.

Sponsored-by: CCSR ( http://www.ccsr.qc.ca )
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

C4/XSLT.pm
koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl

index 37023cd..0c35a5e 100644 (file)
@@ -315,8 +315,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';
@@ -339,6 +343,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 )
@@ -364,6 +373,7 @@ sub buildKohaItemsNamespace {
           . "<location>$location</location>"
           . "<ccode>$ccode</ccode>"
           . "<status>".( $status // q{} )."</status>"
+          . "<substatus>$substatus</substatus>"
           . "<itemcallnumber>$itemcallnumber</itemcallnumber>"
           . "<stocknumber>$stocknumber</stocknumber>"
           . "</item>";
index 14f8b17..c4061cd 100644 (file)
@@ -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/>
                        </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>