From 7e82a31abc6ce824213499922d79f0c520f1b54b Mon Sep 17 00:00:00 2001
From: Aleisha Amohia <aleishaamohia@hotmail.com>
Date: Fri, 4 Dec 2020 16:00:31 +1300
Subject: [PATCH] Bug 16522: Adding 773 to cart and list displays and emails
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch adds a new subroutine get_host_item_entries in the
Koha::Biblio module which retrieves any 773 fields from the biblio
record. The subroutine is used to show a host item entry and a link to
the record in the following places:
- staff client list
- staff client cart
- staff client send list email
- staff client send cart email
- opac list
- opac cart
- opac send list email email
- opac send cart email

To test:

1. apply patch, restart services
2. log into the staff client and enable the syspref EasyAnalyticalRecords
3. find a record with an item. take note of the barcode.
4. go to another record (biblio 2). click Edit -> Link to host record
5. enter the barcode in the input and submit.
6. click the MARC tab and confirm the host record has been linked under
MARC field 773.
7. add biblio 2 to your cart, and to a list.
8. go to your cart. confirm you see the 'host item entry' link.
9. click on 'more details' and confirm you see the 'host item entries'
link.
10. click 'send' to email the cart. confirm the email contains the host
item entry and the link sends you to the catalogue page for the record
in the OPAC.
11. go to the list you added the record to. confirm you see the 'source'
link for the host item entry.
12. click 'send list' to email the list. confirm the email contains the
host item entry and the link sends you to the catalogue page for the
record in the OPAC.
13. log into the OPAC. repeat steps 7 to 12 on the OPAC and confirm they
all pass as expected.
14. confirm tests pass: t/db_dependent/Koha/Biblio.t

Sponsored-by: Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)
---
 Koha/Biblio.pm                                     | 19 ++++++++
 basket/basket.pl                                   |  1 +
 basket/sendbasket.pl                               |  2 +
 .../intranet-tmpl/prog/en/modules/basket/basket.tt | 28 +++++++++++
 .../prog/en/modules/basket/sendbasket.tt           | 14 ++++++
 .../prog/en/modules/virtualshelves/sendshelf.tt    | 14 ++++++
 .../prog/en/xslt/MARC21slim2intranetResults.xsl    | 54 ++++++++++++++++++++--
 .../opac-tmpl/bootstrap/en/modules/opac-basket.tt  | 29 ++++++++++++
 .../bootstrap/en/modules/opac-sendbasket.tt        | 14 ++++++
 .../bootstrap/en/modules/opac-sendshelf.tt         | 14 ++++++
 .../bootstrap/en/xslt/MARC21slim2OPACResults.xsl   | 54 ++++++++++++++++++++--
 opac/opac-basket.pl                                |  2 +
 opac/opac-sendbasket.pl                            |  2 +
 opac/opac-sendshelf.pl                             |  2 +
 t/db_dependent/Koha/Biblio.t                       | 34 +++++++++++++-
 virtualshelves/sendshelf.pl                        |  1 +
 16 files changed, 273 insertions(+), 11 deletions(-)

diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm
index a259db4bb7..f0d4c3c722 100644
--- a/Koha/Biblio.pm
+++ b/Koha/Biblio.pm
@@ -1081,6 +1081,25 @@ sub to_api {
     return { %$response, %$biblioitem };
 }
 
+=head2 get_host_item_entries
+
+    my @host_item_entries = $biblio->get_host_item_entries;
+
+Returns a list of MARC::Field objects of the 773 tag which contain host item entry information.
+Returns undef if no 773 defined.
+
+=cut
+
+sub get_host_item_entries {
+    my ( $self ) = @_;
+
+    my $record = $self->metadata->record;
+
+    my @host_item_entries = $record->field('773');
+
+    return ( @host_item_entries > 0 ) ? \@host_item_entries : undef;
+}
+
 =head3 to_api_mapping
 
 This method returns the mapping for representing a Koha::Biblio object
diff --git a/basket/basket.pl b/basket/basket.pl
index 80a30ecee5..578ad3cd45 100755
--- a/basket/basket.pl
+++ b/basket/basket.pl
@@ -107,6 +107,7 @@ foreach my $biblionumber ( @bibs ) {
     $dat->{MARCSERIES}  = $marcseriesarray;
     $dat->{MARCURLS}    = $marcurlsarray;
     $dat->{HASAUTHORS}  = $hasauthors;
+    $dat->{HOSTITEMENTRIES} = $biblio->get_host_item_entries;
 
     if ( C4::Context->preference("IntranetBiblioDefaultView") eq "normal" ) {
         $dat->{dest} = "/cgi-bin/koha/catalogue/detail.pl";
diff --git a/basket/sendbasket.pl b/basket/sendbasket.pl
index 3c53605069..b9a9945e62 100755
--- a/basket/sendbasket.pl
+++ b/basket/sendbasket.pl
@@ -75,6 +75,7 @@ if ( $email_add ) {
         my $record           = GetMarcBiblio({
             biblionumber => $biblionumber,
             embed_items => 1 });
+        my $biblio           = Koha::Biblios->find($biblionumber);
         my $marcauthorsarray = $biblio->get_marc_authors;
         my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour );
 
@@ -91,6 +92,7 @@ if ( $email_add ) {
         $dat->{HASAUTHORS}     = $hasauthors;
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = \@items;
+        $dat->{HOSTITEMENTRIES} = $biblio->get_host_item_entries;
 
         $iso2709 .= $record->as_usmarc();
 
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt
index 5c62dad4f1..b521c5ad06 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt
@@ -217,6 +217,23 @@
                                         </tr>
                                     [% END %]
 
+                                    [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                        <tr>
+                                            <th scope="row">Host item entries</th>
+                                            <td>
+                                                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                                    <p>
+                                                        [% IF entry.subfield('0') %]
+                                                            <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% entry.subfield('0') | uri %]">[% entry.subfield('t') | html %]</a>
+                                                        [% ELSE %]
+                                                            [% entry.subfield('t') | html %]
+                                                        [% END %]
+                                                    </p>
+                                                [% END %]
+                                            </td>
+                                        </tr>
+                                    [% END %]
+
                                     <tr>
                                         <th scope="row">Location(s)</th>
                                         <td>
@@ -281,6 +298,17 @@
                                             [% IF ( BIBLIO_RESULT.notes ) %]
                                                 <p>[% BIBLIO_RESULT.notes | html %]</p>
                                             [% END %]
+                                            [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                                    <p>Host item entry:
+                                                        [% IF entry.subfield('0') %]
+                                                            <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% entry.subfield('0') | uri %]">[% entry.subfield('t') | html %]</a>
+                                                        [% ELSE %]
+                                                            [% entry.subfield('t') | html %]
+                                                        [% END %]
+                                                    </p>
+                                                [% END %]
+                                            [% END %]
                                             <!-- COinS / Openurl -->
                                             <span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.au=[% BIBLIO_RESULT.author | html %]&amp;rft.btitle=[% BIBLIO_RESULT.title |url %]&amp;rft.date=[% BIBLIO_RESULT.publicationyear | html %]&amp;rft.tpages=[% BIBLIO_RESULT.item('size') | html %]&amp;rft.isbn=[% BIBLIO_RESULT.isbn |url %]&amp;rft.aucorp=&amp;rft.place=[% BIBLIO_RESULT.place | html %]&amp;rft.pub=[% BIBLIO_RESULT.publisher |url %]&amp;rft.edition=[% BIBLIO_RESULT.edition | html %]&amp;rft.series=[% BIBLIO_RESULT.series | html %]&amp;rft.genre="></span>
                                         </td>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/sendbasket.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/sendbasket.tt
index 6af47706d0..e342927fd6 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/sendbasket.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/sendbasket.tt
@@ -126,6 +126,20 @@ Your cart
                 LCCN: [% BIBLIO_RESULT.lccn | $raw %]
             </span><br/>
             [% END %]
+
+            [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
+                    <span>Host item entry:
+                        [% IF entry.subfield('0') %]
+                            <a href="[% OPACBaseURL | $raw %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% entry.subfield('0') | uri %]">[% entry.subfield('t') | html %]</a>
+                        [% ELSE %]
+                            [% entry.subfield('t') | html %]
+                        [% END %]
+                    </span>
+                    <br/>
+                [% END %]
+            [% END %]
+
             [% IF ( BIBLIO_RESULT.url ) %]
             <span>
                 URL: [% BIBLIO_RESULT.url | html %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/sendshelf.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/sendshelf.tt
index 0310e41c5b..17da2afb88 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/sendshelf.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/sendshelf.tt
@@ -132,6 +132,20 @@ Your list: [% shelfname | $raw %]
                 LCCN: [% BIBLIO_RESULT.lccn | $raw %]
             </span><br/>
             [% END %]
+
+            [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
+                    <span>Host item entry:
+                        [% IF entry.subfield('0') %]
+                            <a href="[% OPACBaseURL | $raw %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% entry.subfield('0') | uri %]">[% entry.subfield('t') | html %]</a>
+                        [% ELSE %]
+                            [% entry.subfield('t') | html %]
+                        [% END %]
+                    </span>
+                    <br/>
+                [% END %]
+            [% END %]
+
             [% IF ( BIBLIO_RESULT.url ) %]
             <span>
                 URL: [% BIBLIO_RESULT.url | html %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetResults.xsl b/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetResults.xsl
index ab6bbb9530..337acd7188 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetResults.xsl
+++ b/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetResults.xsl
@@ -926,13 +926,57 @@
     </span>
     </xsl:if>
 
+    <!-- 773 -->
     <xsl:if test="marc:datafield[@tag=773]">
         <xsl:for-each select="marc:datafield[@tag=773]">
-            <xsl:if test="marc:subfield[@code='t']">
-    <span class="results_summary source">
-    <span class="label">Source: </span>
-            <xsl:value-of select="marc:subfield[@code='t']"/>
-    </span>
+            <xsl:if test="@ind1 !=1">
+                <span class="results_summary in"><span class="label">
+                <xsl:choose>
+                    <xsl:when test="@ind2=' '">
+                        Source:
+                    </xsl:when>
+                    <xsl:when test="@ind2=8">
+                        <xsl:if test="marc:subfield[@code='i']">
+                            <xsl:value-of select="marc:subfield[@code='i']"/>
+                        </xsl:if>
+                    </xsl:when>
+                </xsl:choose>
+                </span>
+                <xsl:variable name="f773">
+                    <xsl:call-template name="chopPunctuation">
+                        <xsl:with-param name="chopString">
+                            <xsl:call-template name="subfieldSelect">
+                                <xsl:with-param name="codes">a_t</xsl:with-param>
+                            </xsl:call-template>
+                        </xsl:with-param>
+                    </xsl:call-template>
+                </xsl:variable>
+                <xsl:choose>
+                    <xsl:when test="$UseControlNumber = '1' and marc:subfield[@code='w']">
+                        <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=Control-number:<xsl:call-template name="extractControlNumber"><xsl:with-param name="subfieldW" select="marc:subfield[@code='w']"/></xsl:call-template></xsl:attribute>
+                        <xsl:value-of select="translate($f773, '()', '')"/>
+                        </a>
+                    </xsl:when>
+                    <xsl:when test="marc:subfield[@code='0']">
+                        <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/detail.pl?biblionumber=<xsl:value-of select="str:encode-uri(marc:subfield[@code='0'], true())"/></xsl:attribute>
+                        <xsl:value-of select="$f773"/>
+                        </a>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <a><xsl:attribute name="href">/cgi-bin/koha/catalogue/search.pl?q=ti,phr:<xsl:value-of select="str:encode-uri(translate($f773, '()', ''), true())"/></xsl:attribute>
+                        <xsl:value-of select="$f773"/>
+                        </a>
+                    </xsl:otherwise>
+                </xsl:choose>
+                <xsl:if test="marc:subfield[@code='g']">
+                    <xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/>
+                </xsl:if>
+                </span>
+
+                <xsl:if test="marc:subfield[@code='n']">
+                    <span class="results_summary in_note"><xsl:value-of select="marc:subfield[@code='n']"/></span>
+                </xsl:if>
+
             </xsl:if>
         </xsl:for-each>
     </xsl:if>
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt
index 5c3e6beaa9..86de5718ae 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt
@@ -234,6 +234,23 @@
                                             </tr>
                                         [% END %]
 
+                                        [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                            <tr>
+                                                <th scope="row">Host item entries</th>
+                                                <td>
+                                                    [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                                        <p>
+                                                            [% IF entry.subfield('0') %]
+                                                                <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% entry.subfield('0') | uri %]">[% entry.subfield('t') | html %]</a>
+                                                            [% ELSE %]
+                                                                [% entry.subfield('t') | html %]
+                                                            [% END %]
+                                                        </p>
+                                                    [% END %]
+                                                </td>
+                                            </tr>
+                                        [% END %]
+
                                         <tr>
                                             <th scope="row">Location(s) (Status)</th>
                                             <td>
@@ -292,6 +309,18 @@
                                                 [% IF ( TagsInputEnabled && loggedinusername ) %]
                                                 <span id="newtag[% BIBLIO_RESULT.biblionumber | html %]_status" class="tagstatus results_summary" style="display:none">Tag status here.</span>
                                                 [% END %]
+
+                                                [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                                    [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
+                                                        <p>Host item entry:
+                                                            [% IF entry.subfield('0') %]
+                                                                <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% entry.subfield('0') | uri %]">[% entry.subfield('t') | html %]</a>
+                                                            [% ELSE %]
+                                                                [% entry.subfield('t') | html %]
+                                                            [% END %]
+                                                        </p>
+                                                    [% END %]
+                                                [% END %]
                                             </td>
                                             <td>[% BIBLIO_RESULT.author | html %]</td>
                                             <td>
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendbasket.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendbasket.tt
index 823e0bf0a5..9b694daa1d 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendbasket.tt
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendbasket.tt
@@ -130,6 +130,20 @@ Your cart
                 LCCN: [% BIBLIO_RESULT.lccn | $raw %]
             </span><br/>
             [% END %]
+
+            [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
+                    <span>Host item entry:
+                        [% IF entry.subfield('0') %]
+                            <a href="[% OPACBaseURL | $raw %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% entry.subfield('0') | uri %]">[% entry.subfield('t') | html %]</a>
+                        [% ELSE %]
+                            [% entry.subfield('t') | html %]
+                        [% END %]
+                    </span>
+                    <br/>
+                [% END %]
+            [% END %]
+
             [% IF ( BIBLIO_RESULT.url ) %]
             <span>
                 URL: [% BIBLIO_RESULT.url | html %]
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendshelf.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendshelf.tt
index be952e2399..cf68dff123 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendshelf.tt
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendshelf.tt
@@ -133,6 +133,20 @@ Your list : [% shelfname | $raw %]
                 LCCN: [% BIBLIO_RESULT.lccn | $raw %]
             </span><br/>
             [% END %]
+
+            [% IF BIBLIO_RESULT.HOSTITEMENTRIES %]
+                [% FOREACH entry IN BIBLIO_RESULT.HOSTITEMENTRIES %]
+                    <span>Host item entry:
+                        [% IF entry.subfield('0') %]
+                            <a href="[% OPACBaseURL | $raw %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% entry.subfield('0') | uri %]">[% entry.subfield('t') | html %]</a>
+                        [% ELSE %]
+                            [% entry.subfield('t') | html %]
+                        [% END %]
+                    </span>
+                    <br/>
+                [% END %]
+            [% END %]
+
             [% IF ( BIBLIO_RESULT.url ) %]
             <span>
                 URL: [% BIBLIO_RESULT.url | html %]
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
index 59a2caba55..2aef2f5a5e 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
@@ -660,13 +660,57 @@
 	</span>
     </xsl:if>
 
+    <!-- 773 -->
     <xsl:if test="marc:datafield[@tag=773]">
         <xsl:for-each select="marc:datafield[@tag=773]">
-            <xsl:if test="marc:subfield[@code='t']">
-    <span class="results_summary source">
-    <span class="label">Source: </span>
-            <xsl:value-of select="marc:subfield[@code='t']"/>
-    </span>
+            <xsl:if test="@ind1 !=1">
+                <span class="results_summary in"><span class="label">
+                <xsl:choose>
+                    <xsl:when test="@ind2=' '">
+                        Source:
+                    </xsl:when>
+                    <xsl:when test="@ind2=8">
+                        <xsl:if test="marc:subfield[@code='i']">
+                            <xsl:value-of select="marc:subfield[@code='i']"/>
+                        </xsl:if>
+                    </xsl:when>
+                </xsl:choose>
+                </span>
+                <xsl:variable name="f773">
+                    <xsl:call-template name="chopPunctuation">
+                        <xsl:with-param name="chopString">
+                            <xsl:call-template name="subfieldSelect">
+                                <xsl:with-param name="codes">a_t</xsl:with-param>
+                            </xsl:call-template>
+                        </xsl:with-param>
+                    </xsl:call-template>
+                </xsl:variable>
+                <xsl:choose>
+                    <xsl:when test="$UseControlNumber = '1' and marc:subfield[@code='w']">
+                        <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=Control-number:<xsl:call-template name="extractControlNumber"><xsl:with-param name="subfieldW" select="marc:subfield[@code='w']"/></xsl:call-template></xsl:attribute>
+                        <xsl:value-of select="translate($f773, '()', '')"/>
+                        </a>
+                    </xsl:when>
+                    <xsl:when test="marc:subfield[@code='0']">
+                        <a><xsl:attribute name="href">/cgi-bin/koha/opac-detail.pl?biblionumber=<xsl:value-of select="str:encode-uri(marc:subfield[@code='0'], true())"/></xsl:attribute>
+                        <xsl:value-of select="$f773"/>
+                        </a>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <a><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=ti,phr:<xsl:value-of select="str:encode-uri(translate($f773, '()', ''), true())"/></xsl:attribute>
+                        <xsl:value-of select="$f773"/>
+                        </a>
+                    </xsl:otherwise>
+                </xsl:choose>
+                <xsl:if test="marc:subfield[@code='g']">
+                    <xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='g']"/>
+                </xsl:if>
+                </span>
+
+                <xsl:if test="marc:subfield[@code='n']">
+                    <span class="results_summary in_note"><xsl:value-of select="marc:subfield[@code='n']"/></span>
+                </xsl:if>
+
             </xsl:if>
         </xsl:for-each>
     </xsl:if>
diff --git a/opac/opac-basket.pl b/opac/opac-basket.pl
index ef137b95b0..a3a7cd583c 100755
--- a/opac/opac-basket.pl
+++ b/opac/opac-basket.pl
@@ -82,6 +82,7 @@ foreach my $biblionumber ( @bibs ) {
 
     # No filtering on the item records needed for the record itself
     # since the only reason item information is grabbed is because of branchcodes.
+    my $biblio = Koha::Biblios->find($biblionumber);
     my $record = &GetMarcBiblio({ biblionumber => $biblionumber });
     my $framework = &GetFrameworkCode( $biblionumber );
     $record_processor->options({
@@ -158,6 +159,7 @@ foreach my $biblionumber ( @bibs ) {
     $dat->{MARCSERIES}  = $marcseriesarray;
     $dat->{MARCURLS}    = $marcurlsarray;
     $dat->{HASAUTHORS}  = $hasauthors;
+    $dat->{HOSTITEMENTRIES} = $biblio->get_host_item_entries;
 
     if ( C4::Context->preference("BiblioDefaultView") eq "normal" ) {
         $dat->{dest} = "opac-detail.pl";
diff --git a/opac/opac-sendbasket.pl b/opac/opac-sendbasket.pl
index d77a5b5b34..b4e5a72150 100755
--- a/opac/opac-sendbasket.pl
+++ b/opac/opac-sendbasket.pl
@@ -84,6 +84,7 @@ if ( $email_add ) {
             embed_items  => 1,
             opac         => 1,
             borcat       => $borcat });
+        my $biblio = Koha::Biblios->find($biblionumber);
         my $marcauthorsarray = $biblio->get_marc_authors;
         my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour );
 
@@ -100,6 +101,7 @@ if ( $email_add ) {
         $dat->{HASAUTHORS}     = $hasauthors;
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = \@items;
+        $dat->{HOSTITEMENTRIES} = $biblio->get_host_item_entries;
 
         $iso2709 .= $record->as_usmarc();
 
diff --git a/opac/opac-sendshelf.pl b/opac/opac-sendshelf.pl
index 4b33d8ef97..19ae129cab 100755
--- a/opac/opac-sendshelf.pl
+++ b/opac/opac-sendshelf.pl
@@ -91,6 +91,7 @@ if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) {
             opac         => 1,
             borcat       => $borcat });
         next unless $record;
+        my $biblio           = Koha::Biblios->find($biblionumber);
         my $fw               = GetFrameworkCode($biblionumber);
 
         my $marcauthorsarray = $biblio->get_marc_authors;
@@ -104,6 +105,7 @@ if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) {
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = \@items;
         $dat->{HASAUTHORS}     = $dat->{'author'} || @$marcauthorsarray;
+        $dat->{HOSTITEMENTRIES} = $biblio->get_host_item_entries;
 
         $iso2709 .= $record->as_usmarc();
 
diff --git a/t/db_dependent/Koha/Biblio.t b/t/db_dependent/Koha/Biblio.t
index a2c0e52320..89d1b8b08f 100755
--- a/t/db_dependent/Koha/Biblio.t
+++ b/t/db_dependent/Koha/Biblio.t
@@ -17,7 +17,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 20;
+use Test::More tests => 21;
 use Test::Warn;
 
 use C4::Biblio qw( AddBiblio ModBiblio ModBiblioMarc );
@@ -746,6 +746,38 @@ subtest 'get_marc_notes() UNIMARC tests' => sub {
     is( $notes->[0]->{marcnote}, 'Note1', 'First note' );
     is( $notes->[1]->{marcnote}, 'Note2', 'Second note' );
     is( @$notes, 2, 'No more notes' );
+};
+
+subtest 'get_host_item_entries() tests' => sub {
+
+    plan tests => 2;
+
+    $schema->storage->txn_begin;
+
+    # Set up the host record and an item
+    my $host_biblio = $builder->build_sample_biblio;
+    my $host_item = $builder->build_sample_item({ biblionumber => $host_biblio->biblionumber });
+
+    # Set up the test record
+    my $test_biblio = $builder->build_sample_biblio;
+    my $record = $test_biblio->metadata->record;
+
+    # Link the host item to the test record
+    my $field = MARC::Field->new('245','','','a' => "Test title");
+    $record->append_fields( $field );
+    $field = MARC::Field->new('773','0','','0' => $host_biblio->biblionumber);
+    $record->append_fields( $field );
+    $field = MARC::Field->new('773','0','','9' => $host_item->itemnumber);
+    $record->append_fields( $field );
+
+    # Re-retrieve the record
+    C4::Biblio::ModBiblio( $record, $test_biblio->biblionumber );
+    $test_biblio = Koha::Biblios->find( $test_biblio->biblionumber );
+
+    my $host_items = $test_biblio->get_host_item_entries;
+    is( @{$host_items}, 1, "Correctly retrieved number of attached host item entries" );
+    my $test_host_biblionumber = @{$host_items}[0]->subfield('0');
+    is( $test_host_biblionumber, $host_biblio->biblionumber, "Correctly retrieved data about host item entry");
 
     $schema->storage->txn_rollback;
 };
diff --git a/virtualshelves/sendshelf.pl b/virtualshelves/sendshelf.pl
index 504481b6ca..e5c214b360 100755
--- a/virtualshelves/sendshelf.pl
+++ b/virtualshelves/sendshelf.pl
@@ -92,6 +92,7 @@ if ($to_address) {
         $dat->{'biblionumber'} = $biblionumber;
         $dat->{ITEM_RESULTS}   = \@items;
         $dat->{HASAUTHORS}     = $dat->{'author'} || @$marcauthorsarray;
+        $dat->{HOSTITEMENTRIES} = $biblio->get_host_item_entries;
 
         $iso2709 .= $record->as_usmarc();
 
-- 
2.11.0