X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FStats.pm;h=04378184b35a0ffb93d3f5051e4894a1912301bc;hb=82ec758f18ba5b2600c065245fb68a3f177dcba8;hp=c973e8a08f12d9aede74abf2ceff8ba3964ddd7f;hpb=6897cec04dd39bf2758c8f5dc5994a0a4bd0894b;p=koha.git diff --git a/C4/Stats.pm b/C4/Stats.pm index c973e8a08f..04378184b3 100644 --- a/C4/Stats.pm +++ b/C4/Stats.pm @@ -1,220 +1,153 @@ -package C4::Stats; #assumes C4/Stats +package C4::Stats; + + +# Copyright 2000-2002 Katipo Communications +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY 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, see . use strict; +use warnings; require Exporter; -use DBI; -use C4::Database; -use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); +use Carp; +use C4::Context; +use C4::Debug; +use vars qw(@ISA @EXPORT); -# set the version for version checking -$VERSION = 0.01; +our $debug; -@ISA = qw(Exporter); -@EXPORT = qw(&UpdateStats &statsreport &Count &Overdues &TotalOwing -&TotalPaid &getcharges &Getpaidbranch &unfilledreserves); - -sub UpdateStats { - #module to insert stats data into stats table - my ($env,$branch,$type,$amount,$other,$itemnum,$itemtype,$borrowernumber)=@_; - my $dbh=C4Connect(); - if ($branch eq ''){ - $branch=$env->{'branchcode'}; - } - my $user = $env->{'usercode'}; - print $borrowernumber; - my $sth=$dbh->prepare("Insert into statistics - (datetime,branch,type,usercode,value, - other,itemnumber,itemtype,borrowernumber) - values (now(),'$branch','$type','$user','$amount', - '$other','$itemnum','$itemtype','$borrowernumber')"); - $sth->execute; - $sth->finish; - $dbh->disconnect; +BEGIN { + @ISA = qw(Exporter); + @EXPORT = qw( + &UpdateStats + ); } -sub statsreport { - #module to return a list of stats for a given day,time,branch type - #or to return search stats - my ($type,$time)=@_; - my @data; -# print "here"; -# if ($type eq 'issue'){ - @data=circrep($time,$type); -# } - return(@data); -} -sub circrep { - my ($time,$type)=@_; - my $dbh=C4Connect; - my $query="Select * from statistics"; - if ($time eq 'today'){ - $query=$query." where type='$type' and datetime - >=datetime('yesterday'::date)"; - } - my $sth=$dbh->prepare($query); - $sth->execute; - my $i=0; - my @results; - while (my $data=$sth->fetchrow_hashref){ - $results[$i]="$data->{'datetime'}\t$data->{'branch'}"; - $i++; - } - $sth->finish; -# print $query; - $dbh->disconnect; - return(@results); +=head1 NAME -} +C4::Stats - Update Koha statistics (log) -sub Count { - my ($type,$branch,$time,$time2)=@_; - my $dbh=C4Connect; - my $query="Select count(*) from statistics where type='$type'"; - $query.=" and datetime >= '$time' and datetime< '$time2' and branch='$branch'"; - my $sth=$dbh->prepare($query); - $sth->execute; - my $data=$sth->fetchrow_hashref; - $sth->finish; -# print $query; - $dbh->disconnect; - return($data->{'count(*)'}); -} +=head1 SYNOPSIS -sub Overdues{ - my $dbh=C4Connect; - my $query="Select count(*) from issues where date_due >= now()"; - my $sth=$dbh->prepare($query); - $sth->execute; - my $count=$sth->fetchrow_hashref; - $sth->finish; - $dbh->disconnect; - return($count->{'count(*)'}); -} + use C4::Stats; -sub TotalOwing{ - my ($type)=@_; - my $dbh=C4Connect; - my $query="Select sum(amountoutstanding) from accountlines"; - if ($type eq 'fine'){ - $query=$query." where accounttype='F' or accounttype='FN'"; - } - my $sth=$dbh->prepare($query); -# print $query; - $sth->execute; - my $total=$sth->fetchrow_hashref; - $sth->finish; - $dbh->disconnect; - return($total->{'sum(amountoutstanding)'}); -} +=head1 DESCRIPTION -sub TotalPaid { - my ($time)=@_; - my $dbh=C4Connect; - my $query="Select * from accountlines,borrowers where (accounttype = 'Pay' -or accounttype ='W') - and accountlines.borrowernumber = borrowers.borrowernumber"; - if ($time eq 'today'){ - $query=$query." and date = now()"; - } else { - $query.=" and date='$time'"; - } -# my $query="Select * from statistics,borrowers -# where statistics.borrowernumber= borrowers.borrowernumber -# and (statistics.type='payment' or statistics.type='writeoff') "; -# if ($time eq 'today'){ -# $query=$query." and datetime = now()"; -# } else { -# $query.=" and datetime > '$time'"; -# } - $query.=" order by timestamp"; -# print $query; - my $sth=$dbh->prepare($query); - $sth->execute; - my @results; - my $i=0; - while (my $data=$sth->fetchrow_hashref){ - $results[$i]=$data; - $i++; - } - $sth->finish; - $dbh->disconnect; -# print $query; - return(@results); -} +The functions of this module deals with statistics table of Koha database. -sub getcharges{ - my($borrowerno,$timestamp)=@_; - my $dbh=C4Connect; - my $timestamp2=$timestamp-1; - my $query="Select * from accountlines where borrowernumber=$borrowerno - and timestamp = '$timestamp' and accounttype <> 'Pay' and - accounttype <> 'W'"; - my $sth=$dbh->prepare($query); -# print $query,"
"; - $sth->execute; - my $i=0; - my @results; - while (my $data=$sth->fetchrow_hashref){ -# if ($data->{'timestamp'} == $timestamp){ - $results[$i]=$data; - $i++; -# } - } - $dbh->disconnect; - return(@results); -} +=head1 FUNCTIONS -sub Getpaidbranch{ - my($date,$borrno)=@_; - my $dbh=C4Connect; - my $query="select * from statistics where type='payment' and datetime - >'$date' and borrowernumber='$borrno'"; - my $sth=$dbh->prepare($query); - $sth->execute; -# print $query; - my $data=$sth->fetchrow_hashref; - $sth->finish; - $dbh->disconnect; - return($data->{'branch'}); -} +=head2 UpdateStats + + &UpdateStats($params); -sub unfilledreserves { - my $dbh=C4Connect; - my $query="select *,biblio.title from reserves,reserveconstraints,biblio,borrowers,biblioitems where found <> 'F' and cancellationdate -is NULL and biblio.biblionumber=reserves.biblionumber and -reserves.constrainttype='o' -and (reserves.biblionumber=reserveconstraints.biblionumber -and reserves.borrowernumber=reserveconstraints.borrowernumber) -and -reserves.borrowernumber=borrowers.borrowernumber and -biblioitems.biblioitemnumber=reserveconstraints.biblioitemnumber order by -biblio.title,reserves.reservedate"; - my $sth=$dbh->prepare($query); - $sth->execute; - my $i=0; - my @results; - while (my $data=$sth->fetchrow_hashref){ - $results[$i]=$data; - $i++; - } - $sth->finish; - $query="select *,biblio.title from reserves,biblio,borrowers where found <> 'F' and cancellationdate -is NULL and biblio.biblionumber=reserves.biblionumber and reserves.constrainttype='a' and -reserves.borrowernumber=borrowers.borrowernumber -order by -biblio.title,reserves.reservedate"; - $sth=$dbh->prepare($query); - $sth->execute; - while (my $data=$sth->fetchrow_hashref){ - @results[$i]=$data; - $i++; - } - $sth->finish; - $dbh->disconnect; - return($i,\@results); +Adds an entry to the statistics table in the Koha database, which acts as an activity log. + +C<$params> is an hashref whose expected keys are: + branch : the branch where the transaction occurred + type : the type of transaction (renew, issue, localuse, return, writeoff, payment + itemnumber : the itemnumber of the item + borrowernumber : the borrowernumber of the patron + amount : the amount of the transaction + other : sipmode + itemtype : the type of the item + accountno : the count + ccode : the collection code of the item + +type key is mandatory. +For types used in C4::Circulation (renew,issue,localuse,return), the following other keys are mandatory: +branch, borrowernumber, itemnumber, ccode, itemtype +For types used in C4::Accounts (writeoff, payment), the following other keys are mandatory: +branch, borrowernumber, itemnumber, ccode, itemtype +If an optional key is not provided, the value '' is used for this key. + +Returns undef if no C<$param> is given + +=cut + +sub UpdateStats { + my ($params) = @_; +# make some controls + return () if ! defined $params; +# change these arrays if new types of transaction or new parameters are allowed + my @allowed_keys = qw (type branch amount other itemnumber itemtype borrowernumber accountno ccode location); + my @allowed_circulation_types = qw (renew issue localuse return onsite_checkout); + my @allowed_accounts_types = qw (writeoff payment); + my @circulation_mandatory_keys = qw (type branch borrowernumber itemnumber ccode itemtype); + my @accounts_mandatory_keys = qw (type branch borrowernumber amount); + + my @mandatory_keys = (); + if (! exists $params->{type} or ! defined $params->{type}) { + croak ("UpdateStats did not received type param"); + } + if (grep ($_ eq $params->{type}, @allowed_circulation_types )) { + @mandatory_keys = @circulation_mandatory_keys; + } elsif (grep ($_ eq $params->{type}, @allowed_accounts_types )) { + @mandatory_keys = @accounts_mandatory_keys; + } else { + croak ("UpdateStats received forbidden type param: ".$params->{type}); + } + my @missing_params = (); + for my $mykey (@mandatory_keys ) { + push @missing_params, $mykey if !grep (/^$mykey/, keys %$params); + } + if (scalar @missing_params > 0 ) { + croak ("UpdateStats did not received mandatory param(s): ".join (", ",@missing_params )); + } + my @invalid_params = (); + for my $myparam (keys %$params ) { + push @invalid_params, $myparam unless grep (/^$myparam$/, @allowed_keys); + } + if (scalar @invalid_params > 0 ) { + croak ("UpdateStats received invalid param(s): ".join (", ",@invalid_params )); + } +# get the parameters + my $branch = $params->{branch}; + my $type = $params->{type}; + my $borrowernumber = exists $params->{borrowernumber} ? $params->{borrowernumber} : ''; + my $itemnumber = exists $params->{itemnumber} ? $params->{itemnumber} : undef; + my $amount = exists $params->{amount} ? $params->{amount} : 0; + my $other = exists $params->{other} ? $params->{other} : ''; + my $itemtype = exists $params->{itemtype} ? $params->{itemtype} : ''; + my $location = exists $params->{location} ? $params->{location} : undef; + my $accountno = exists $params->{accountno} ? $params->{accountno} : ''; + my $ccode = exists $params->{ccode} ? $params->{ccode} : ''; + + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare( + "INSERT INTO statistics + (datetime, + branch, type, value, + other, itemnumber, itemtype, location, + borrowernumber, proccode, ccode) + VALUES (now(),?,?,?,?,?,?,?,?,?,?)" + ); + $sth->execute( + $branch, $type, $amount, $other, + $itemnumber, $itemtype, $location, $borrowernumber, + $accountno, $ccode + ); } -END { } # module clean-up code here (global destructor) - - +1; +__END__ + +=head1 AUTHOR + +Koha Development Team + +=cut +