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:
parent
d16bcb70e7
commit
5ef1b6710e
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue