Bug 18098: Add an index with the count of not onloan items

This patch adds a numeric index 'not-onloan-count' containing the value
of 999$x. This subfield is filled by 'rebuild_zebra.pl' by making use of
(bug's 18208) 'EmbedItemsAvailability' filter.

bib1.att and indexes definitions are updated accordingly.

To test:
- Apply the patch
- Pick the right biblio-zebra-indexdefs.xsl file for your setup and
  replace the one your Zebra uses [1]
- Replace your bib1.att
- Replace your ccl.properties
- Have at least one record with more than one item, checkout some
  item(s) from that record(s).
- Rebuild zebra's indexes:
  $ sudo koha-shell kohadev
 k$ cd kohaclone
 k$ misc/migration_tools/rebuild_zebra.pl -r -b -v -k
 (notice the dump directory is kept, you can try the XSLT yourself
  running:
    $ xsltproc \
       etc/zebradb/marc_defs/marc21/biblios/biblio-zebra-indexdefs.xsl \
       /tmp/the_dump_dir/biblios/exported_records | less
=> SUCCESS: There are records with the not-onloan-count index, and the
            value is correct!
- Check Zebra yourself:
  $ yaz-client unix:/var/run/koha/kohadev/bibliosocket
 Z> base biblios
 Z> find @attr 1=9013 @attr 2=5 @attr 4=109 0
=> SUCCESS: The search matches the amount of records with not-onloan
            items.
 Z> s 1+1
=> SUCCESS: Records with 999$x having a value higher than 0 are rendered
- Sign off :-D

Note: While this work is complete on its purpose, it is part of an
attempt to create a better way of filtering by availability.

Sponsored-by: ByWater Solutions

 [1] In kohadevbox this would be
/etc/koha/zebradb/marc_defs/marc21/biblios/biblio-zebra-indexdefs.xsl

Edit: Added the missing XSLT changes for UNIMARC and NORMARC

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Tomas Cohen Arazi 2017-03-03 18:32:06 -03:00 committed by Kyle M Hall
parent d16bcb70e7
commit 5ef1b6710e
9 changed files with 52 additions and 8 deletions

View File

@ -220,6 +220,7 @@ att 9009 cn-prefix
att 9010 cn-suffix
att 9011 Suppress
att 9012 Identifier-other
att 9013 not-onloan-count
# Items Index
att 8001 withdrawn

View File

@ -994,6 +994,7 @@ date-entered-on-file 1=date-entered-on-file
extent 1=Extent
llength 1=llength
Summary 1=Summary
not-onloan-count 1=9013 4=109
###
# Items Index

View File

@ -1370,6 +1370,10 @@
<target_index>Note:p</target_index>
</index_subfields>
<index_subfields tag="999" subfields="x">
<target_index>not-onloan-count:n</target_index>
</index_subfields>
<facet tag="100" subfields="a">
<target_index>au:0</target_index>
</facet>

View File

@ -1242,6 +1242,13 @@ definition file (probably something like {biblio,authority}-koha-indexdefs.xml)
</z:index>
</xslo:if>
</xslo:for-each>
<xslo:for-each select="marc:subfield">
<xslo:if test="contains('x', @code)">
<z:index name="not-onloan-count:n">
<xslo:value-of select="."/>
</z:index>
</xslo:if>
</xslo:for-each>
</xslo:template>
<xslo:template mode="index_subfields" match="marc:datafield[@tag='942']">
<xslo:for-each select="marc:subfield">

View File

@ -969,6 +969,10 @@
<target_index>itype:w</target_index>
</index_subfields>
<index_subfields tag="999" subfields="x">
<target_index>not-onloan-count:n</target_index>
</index_subfields>
<facet tag="100" subfields="a">
<target_index>au:0</target_index>
</facet>

View File

@ -760,6 +760,13 @@ definition file (probably something like {biblio,authority}-koha-indexdefs.xml)
</z:index>
</xslo:if>
</xslo:for-each>
<xslo:for-each select="marc:subfield">
<xslo:if test="contains('x', @code)">
<z:index name="not-onloan-count:n">
<xslo:value-of select="."/>
</z:index>
</xslo:if>
</xslo:for-each>
</xslo:template>
<xslo:template mode="index_subfields" match="marc:datafield[@tag='942']">
<xslo:for-each select="marc:subfield">

View File

@ -1444,6 +1444,10 @@
<target_index>totalissues:s</target_index>
</index_subfields>
<index_subfields tag="999" subfields="x">
<target_index>not-onloan-count:n</target_index>
</index_subfields>
<facet tag="225" subfields="a">
<target_index>se:0</target_index>
</facet>

View File

@ -1880,6 +1880,15 @@ definition file (probably something like {biblio,authority}-koha-indexdefs.xml)
</xslo:if>
</xslo:for-each>
</xslo:template>
<xslo:template mode="index_subfields" match="marc:datafield[@tag='999']">
<xslo:for-each select="marc:subfield">
<xslo:if test="contains('x', @code)">
<z:index name="not-onloan-count:n">
<xslo:value-of select="."/>
</z:index>
</xslo:if>
</xslo:for-each>
</xslo:template>
<xslo:template mode="index_data_field" match="marc:datafield[@tag='700']">
<z:index name="Author:w Personal-name:w Author:p Personal-name:p Personal-name:p">
<xslo:variable name="raw_heading">

View File

@ -635,19 +635,26 @@ sub generate_deleted_marc_records {
}
sub get_corrected_marc_record {
my ($record_type, $record_number) = @_;
my ( $record_type, $record_number ) = @_;
my $marc = get_raw_marc_record($record_type, $record_number);
my $marc = get_raw_marc_record( $record_type, $record_number );
if (defined $marc) {
if ( defined $marc ) {
fix_leader($marc);
if ($record_type eq 'authority') {
fix_authority_id($marc, $record_number);
} elsif ($record_type eq 'biblio' && C4::Context->preference('IncludeSeeFromInSearches')) {
my $normalizer = Koha::RecordProcessor->new( { filters => 'EmbedSeeFromHeadings' } );
if ( $record_type eq 'authority' ) {
fix_authority_id( $marc, $record_number );
}
elsif ( $record_type eq 'biblio' ) {
my @filters;
push @filters, 'EmbedItemsAvailability';
push @filters, 'IncludeSeeFromInSearches'
if C4::Context->preference('IncludeSeeFromInSearches');
my $normalizer = Koha::RecordProcessor->new( { filters => \@filters } );
$marc = $normalizer->process($marc);
}
if (C4::Context->preference("marcflavour") eq "UNIMARC") {
if ( C4::Context->preference("marcflavour") eq "UNIMARC" ) {
fix_unimarc_100($marc);
}
}