From 4171666515797c0460179e0c99ed185ead88d9df Mon Sep 17 00:00:00 2001 From: Katrin Fischer Date: Mon, 10 Nov 2014 22:30:16 +0100 Subject: [PATCH] Bug 12567: Make catalog statistics wizard publication year work for MARC21 Publication year was useless for MARC21, as it was using the biblioitems.publicationyear (UNIMARC) instead of biblio.copyrightdate (MARC21). This patch tries to fix the search options to work for both MARC flavours. To test: In Reports > Statistics wizards > Catalog: - Test the publication year search options on a UNIMARC and a MARC21 installation. - Make sure search results make sense for both. --- reports/catalogue_stats.pl | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/reports/catalogue_stats.pl b/reports/catalogue_stats.pl index a19334a..2719587 100755 --- a/reports/catalogue_stats.pl +++ b/reports/catalogue_stats.pl @@ -59,6 +59,12 @@ if(C4::Context->preference('item-level_itypes')) { } else { $item_itype = "itemtype"; } +if(C4::Context->preference('marcflavour') ne "UNIMARC" && ($line=~ /publicationyear/ )) { + $line = "copyrightdate"; +} +if(C4::Context->preference('marcflavour') ne "UNIMARC" && ($column =~ /publicationyear/ )) { + $column = "copyrightdate"; +} my ($template, $borrowernumber, $cookie) = get_template_and_user({template_name => $fullreportname, @@ -284,7 +290,8 @@ if($barcodefilter){ } my $strsth = "SELECT DISTINCTROW $linefield FROM biblioitems - INNER JOIN items USING (biblioitemnumber) + INNER JOIN items USING (biblioitemnumber) + INNER JOIN biblio ON (biblioitems.biblionumber = biblio.biblionumber) WHERE $line IS NOT NULL "; $strsth .= " AND barcode $not LIKE ? " if ($barcodefilter); if ( @linefilter ) { @@ -337,6 +344,8 @@ if($barcodefilter){ FROM biblioitems INNER JOIN items USING (biblioitemnumber) + INNER JOIN biblio + ON (biblioitems.biblionumber = biblio.biblionumber) WHERE $column IS NOT NULL "; $strsth2 .= " AND barcode $not LIKE ?" if $barcodefilter; @@ -386,7 +395,12 @@ if($barcodefilter){ } # preparing calculation - my $strcalc = "SELECT $linefield, $colfield, count(*) FROM biblioitems INNER JOIN items ON (items.biblioitemnumber = biblioitems.biblioitemnumber) WHERE 1 "; + my $strcalc = " + SELECT $linefield, $colfield, count(*) + FROM biblioitems + INNER JOIN items ON (items.biblioitemnumber = biblioitems.biblioitemnumber) + INNER JOIN biblio ON (biblioitems.biblionumber = biblio.biblionumber) + WHERE 1 "; $strcalc .= "AND barcode $not like ? " if ($barcodefilter); if (@$filters[0]){ @@ -429,11 +443,15 @@ if($barcodefilter){ } if (@$filters[8]){ @$filters[8]=~ s/\*/%/g; - $strcalc .= " AND publicationyear >" . @$filters[8]; + $strcalc .= " AND " . + (C4::Context->preference('marcflavour') eq 'UNIMARC' ? 'publicationyear' : 'copyrightdate') + . ">" . @$filters[8]; } if (@$filters[9]){ @$filters[9]=~ s/\*/%/g; - $strcalc .= " AND publicationyear <" . @$filters[9]; + $strcalc .= " AND " . + (C4::Context->preference('marcflavour') eq 'UNIMARC' ? 'publicationyear' : 'copyrightdate') + . "<" . @$filters[9]; } if (@$filters[10]){ @$filters[10]=~ s/\*/%/g; @@ -457,7 +475,6 @@ if($barcodefilter){ $dbcalc->execute(); } # warn "filling table"; - my $emptycol; while (my ($row, $col, $value) = $dbcalc->fetchrow) { # warn "filling table $row / $col / $value "; -- 1.9.1