X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;ds=sidebyside;f=reports%2Fcatalogue_stats.pl;h=11dff4d3cbef4a613762f8298a9438834c5662d9;hb=54d42771258681762b659a2685e2678dc6bd8ef6;hp=c5d5ce0198e457effa3b8a8593f2328bfb1782f5;hpb=b61e0833011c2dcab81c38b44e5b81b427b795f7;p=koha_gimpoz diff --git a/reports/catalogue_stats.pl b/reports/catalogue_stats.pl index c5d5ce0198..11dff4d3cb 100755 --- a/reports/catalogue_stats.pl +++ b/reports/catalogue_stats.pl @@ -14,11 +14,12 @@ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. use strict; +#use warnings; FIXME - Bug 2505 use C4::Auth; use CGI; use C4::Context; @@ -50,16 +51,21 @@ my $lccndigits = $input->param("lccndigits"); my $cotedigits = $input->param("cotedigits"); my $output = $input->param("output"); my $basename = $input->param("basename"); -my $mime = $input->param("MIME"); -our $sep = $input->param("sep"); +our $sep = $input->param("sep"); $sep = "\t" if ($sep eq 'tabulation'); +my $item_itype; +if(C4::Context->preference('item-level_itypes')) { + $item_itype = "items\.itype" +} else { + $item_itype = "itemtype"; +} my ($template, $borrowernumber, $cookie) = get_template_and_user({template_name => $fullreportname, query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => {reports => 1}, + flagsrequired => {reports => '*'}, debug => 1, }); $template->param(do_it => $do_it); @@ -133,48 +139,37 @@ if ($do_it) { # No need to test for data here. If you don't have itemcallnumbers, you probably know it. # FIXME: Hardcoding to 5 chars on itemcallnum. # - my $hascote = 1; - my $highcote = 5; - + my $hascote = 1; + my $highcote = 5; + $req = $dbh->prepare("select itemtype, description from itemtypes order by description"); $req->execute; my $CGIitemtype = $req->fetchall_arrayref({}); my $authvals = GetKohaAuthorisedValues("items.ccode"); my @authvals; - foreach (keys %$authvals) { + foreach (sort {$authvals->{$a} cmp $authvals->{$b} || $a cmp $b} keys %$authvals) { push @authvals, { code => $_, description => $authvals->{$_} }; } - - my $branches=GetBranches(); - my @branchloop; - foreach (keys %$branches) { - my $thisbranch = ''; # FIXME: populate $thisbranch to preselect one - my %row = (branchcode => $_, - selected => ($thisbranch eq $_ ? 1 : 0), - branchname => $branches->{$_}->{'branchname'}, - ); - push @branchloop, \%row; - } - my $locations = GetKohaAuthorisedValues("items.location"); my @locations; foreach (sort keys %$locations) { push @locations, { code => $_, description => "$_ - " . $locations->{$_} }; } - my @mime = ( map { +{type =>$_} } (split /[;:]/,C4::Context->preference("MIME")) ); + my @mime = ( map { +{type =>$_} } (split /[;:]/, 'CSV') ); # FIXME translation $template->param(hasdewey=>$hasdewey, haslccn => $haslccn, hascote => $hascote, CGIItemType => $CGIitemtype, - CGIBranch => \@branchloop, + CGIBranch => GetBranchesLoop(C4::Context->userenv->{'branch'}), locationloop => \@locations, authvals => \@authvals, CGIextChoice => \@mime, CGIsepChoice => GetDelimiterChoices, + item_itype => $item_itype ); } @@ -207,8 +202,6 @@ if($barcodefilter){ } # Change * to % $barcodefilter =~ s/\*/%/g; -}else{ - $barcodefilter = "%"; } # Filters @@ -249,7 +242,11 @@ if($barcodefilter){ $linefilter[1] = @$filters[3] if ($line =~ /lccn/ ) ; $linefilter[0] = @$filters[4] if ($line =~ /items\.itemcallnumber/ ) ; $linefilter[1] = @$filters[5] if ($line =~ /items\.itemcallnumber/ ) ; - $linefilter[0] = @$filters[6] if ($line =~ /itemtype/ ) ; + if (C4::Context->preference('item-level_itypes')) { + $linefilter[0] = @$filters[6] if ($line =~ /items\.itype/ ) ; + } else { + $linefilter[0] = @$filters[6] if ($line =~ /itemtype/ ) ; + } $linefilter[0] = @$filters[7] if ($line =~ /publishercode/ ) ; $linefilter[0] = @$filters[8] if ($line =~ /publicationyear/ ) ; $linefilter[1] = @$filters[9] if ($line =~ /publicationyear/ ) ; @@ -264,7 +261,11 @@ if($barcodefilter){ $colfilter[1] = @$filters[3] if ($column =~ /lccn/ ) ; $colfilter[0] = @$filters[4] if ($column =~ /items\.itemcallnumber/ ) ; $colfilter[1] = @$filters[5] if ($column =~ /items\.itemcallnumber/ ) ; - $colfilter[0] = @$filters[6] if ($column =~ /itemtype/ ) ; + if (C4::Context->preference('item-level_itypes')) { + $colfilter[0] = @$filters[6] if ($column =~ /items\.itype/ ) ; + } else { + $colfilter[0] = @$filters[6] if ($column =~ /itemtype/ ) ; + } $colfilter[0] = @$filters[7] if ($column =~ /publishercode/ ) ; $colfilter[0] = @$filters[8] if ($column =~ /publicationyear/ ) ; $colfilter[1] = @$filters[9] if ($column =~ /publicationyear/ ) ; @@ -284,27 +285,31 @@ if($barcodefilter){ $linefield .= $line; } - my $strsth; - $strsth .= "select distinctrow $linefield from biblioitems left join items on (items.biblioitemnumber = biblioitems.biblioitemnumber) where barcode $not LIKE ? AND $line is not null "; + my $strsth = "SELECT DISTINCTROW $linefield FROM biblioitems + INNER JOIN items USING (biblioitemnumber) + WHERE $line IS NOT NULL "; + $strsth .= " AND barcode $not LIKE ? " if ($barcodefilter); if ( @linefilter ) { if ($linefilter[1]){ - $strsth .= " and $line >= ? " ; - $strsth .= " and $line <= ? " ; + $strsth .= " AND $line >= ? " ; + $strsth .= " AND $line <= ? " ; } elsif ($linefilter[0]) { $linefilter[0] =~ s/\*/%/g; - $strsth .= " and $line LIKE ? " ; + $strsth .= " AND $line LIKE ? " ; } } - $strsth .=" order by $linefield"; + $strsth .=" ORDER BY $linefield"; $debug and print STDERR "catalogue_stats SQL: $strsth\n"; - + my $sth = $dbh->prepare( $strsth ); if (( @linefilter ) and ($linefilter[1])){ $sth->execute($barcodefilter,$linefilter[0],$linefilter[1]); } elsif ($barcodefilter,$linefilter[0]) { $sth->execute($barcodefilter,$linefilter[0]); - } else { + } elsif ($barcodefilter) { $sth->execute($barcodefilter); + }else{ + $sth->execute(); } while ( my ($celvalue) = $sth->fetchrow) { my %cell; @@ -332,24 +337,28 @@ if($barcodefilter){ my $strsth2 = " SELECT distinctrow $colfield FROM biblioitems - LEFT JOIN items - ON (items.biblioitemnumber = biblioitems.biblioitemnumber) - WHERE barcode $not LIKE ? AND $column IS NOT NULL "; + INNER JOIN items + USING (biblioitemnumber) + WHERE $column IS NOT NULL "; + $strsth2 .= " AND barcode $not LIKE ?" if $barcodefilter; + if (( @colfilter ) and ($colfilter[1])) { - $strsth2 .= " and $column> ? and $column< ?"; + $strsth2 .= " AND $column> ? AND $column< ?"; }elsif ($colfilter[0]){ $colfilter[0] =~ s/\*/%/g; - $strsth2 .= " and $column LIKE ? "; + $strsth2 .= " AND $column LIKE ? "; } - $strsth2 .= " order by $colfield"; + $strsth2 .= " ORDER BY $colfield"; $debug and print STDERR "SQL: $strsth2"; my $sth2 = $dbh->prepare( $strsth2 ); if ((@colfilter) and ($colfilter[1])) { $sth2->execute($barcodefilter,$colfilter[0],$colfilter[1]); } elsif ($colfilter[0]){ $sth2->execute($barcodefilter,$colfilter[0]); + } elsif ($barcodefilter){ + $sth2->execute($barcodefilter); } else { - $sth2->execute($barcodefilter); + $sth2->execute(); } while (my ($celvalue) = $sth2->fetchrow) { my %cell; @@ -379,7 +388,9 @@ if($barcodefilter){ } # preparing calculation - my $strcalc .= "SELECT $linefield, $colfield, count(*) FROM biblioitems LEFT JOIN items ON (items.biblioitemnumber = biblioitems.biblioitemnumber) WHERE 1 AND barcode $not like ? "; + my $strcalc = "SELECT $linefield, $colfield, count(*) FROM biblioitems INNER JOIN items ON (items.biblioitemnumber = biblioitems.biblioitemnumber) WHERE 1 "; + $strcalc .= "AND barcode $not like ? " if ($barcodefilter); + if (@$filters[0]){ @$filters[0]=~ s/\*/%/g; $strcalc .= " AND dewey >" . @$filters[0]; @@ -409,7 +420,7 @@ if($barcodefilter){ if (@$filters[6]){ @$filters[6]=~ s/\*/%/g; $strcalc .= " AND " . - (C4::Context::preference('Item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype') + (C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype') . " LIKE '" . @$filters[6] ."'"; } @@ -442,7 +453,11 @@ if($barcodefilter){ $strcalc .= " group by $linefield, $colfield order by $linefield,$colfield"; $debug and warn "SQL: $strcalc"; my $dbcalc = $dbh->prepare($strcalc); - $dbcalc->execute($barcodefilter); + if($barcodefilter){ + $dbcalc->execute($barcodefilter); + }else{ + $dbcalc->execute(); + } # warn "filling table"; my $emptycol;