X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FStats.pm;h=54e3a390be39e824867ec1f54a0f47e17049b7c1;hb=e1775fe1d5ffae3411d64c4d69fca75ad5641293;hp=745798398e1e4ea0f2429c4d13f3faa385f8e958;hpb=0d4acbba5c5db238eb42ed37dc9ba3dc2f36974b;p=koha.git diff --git a/C4/Stats.pm b/C4/Stats.pm index 745798398e..54e3a390be 100644 --- a/C4/Stats.pm +++ b/C4/Stats.pm @@ -5,31 +5,30 @@ package C4::Stats; # # 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 2 of the License, or (at your option) any later -# version. +# 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. +# 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, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# 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 Carp; use C4::Context; use C4::Debug; -use vars qw($VERSION @ISA @EXPORT); +use vars qw(@ISA @EXPORT); our $debug; BEGIN { - # set the version for version checking - $VERSION = 3.07.00.049; @ISA = qw(Exporter); @EXPORT = qw( &UpdateStats @@ -48,60 +47,128 @@ C4::Stats - Update Koha statistics (log) =head1 DESCRIPTION -The C<&UpdateStats> function adds an entry to the statistics table in -the Koha database, which acts as an activity log. +The functions of this module deals with statistics table of Koha database. =head1 FUNCTIONS -=over 2 +=head2 UpdateStats -=item UpdateStats + &UpdateStats($params); - &UpdateStats($branch, $type, $value, $other, $itemnumber, - $itemtype, $borrowernumber); +Adds an entry to the statistics table in the Koha database, which acts as an activity log. -Adds a line to the statistics table of the Koha database. In effect, -it logs an event. +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 -C<$branch>, C<$type>, C<$value>, C<$other>, C<$itemnumber>, -C<$itemtype>, and C<$borrowernumber> correspond to the fields of the -statistics table in the Koha database. +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); + 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} :''; + my $amount = exists $params->{amount} ? $params->{amount} :''; + my $other = exists $params->{other} ? $params->{other} :''; + my $itemtype = exists $params->{itemtype} ? $params->{itemtype} :''; + my $accountno = exists $params->{accountno} ? $params->{accountno} :''; + my $ccode = exists $params->{ccode} ? $params->{ccode} :''; - #module to insert stats data into stats table - my ( - $branch, $type, - $amount, $other, $itemnum, - $itemtype, $borrowernumber, $accountno - ) - = @_; my $dbh = C4::Context->dbh; my $sth = $dbh->prepare( "INSERT INTO statistics - (datetime, branch, type, value, - other, itemnumber, itemtype, borrowernumber, proccode) - VALUES (now(),?,?,?,?,?,?,?,?)" + (datetime, + branch, type, value, + other, itemnumber, itemtype, + borrowernumber, proccode, ccode) + VALUES (now(),?,?,?,?,?,?,?,?,?)" ); $sth->execute( - $branch, $type, $amount, - $other, $itemnum, $itemtype, $borrowernumber, - $accountno + $branch, $type, $amount, + $other, $itemnumber, $itemtype, + $borrowernumber, $accountno, $ccode ); } -# Otherwise, it'd need a POD. +=head2 TotalPaid + + @total = &TotalPaid ( $time, [$time2], [$spreadsheet ]); + +Returns an array containing the payments and writeoffs made between two dates +C<$time> and C<$time2>, or on a specific one, or from C<$time> onwards. + +C<$time> param is mandatory. +If C<$time> eq 'today', returns are limited to the current day +If C<$time2> eq '', results are returned from C<$time> onwards. +If C<$time2> is undef, returns are limited to C<$time> +C<$spreadsheet> param is optional and controls the sorting of the results. + +Returns undef if no param is given + +=cut + sub TotalPaid { my ( $time, $time2, $spreadsheet ) = @_; + return () unless (defined $time); $time2 = $time unless $time2; my $dbh = C4::Context->dbh; my $query = "SELECT * FROM statistics LEFT JOIN borrowers ON statistics.borrowernumber= borrowers.borrowernumber WHERE (statistics.type='payment' OR statistics.type='writeoff') "; if ( $time eq 'today' ) { +# FIXME wrong condition. Now() will not get all the payments of the day but of a specific timestamp $query .= " AND datetime = now()"; } else { $query .= " AND datetime > '$time'"; # FIXME: use placeholders @@ -109,6 +176,8 @@ sub TotalPaid { if ( $time2 ne '' ) { $query .= " AND datetime < '$time2'"; # FIXME: use placeholders } +# FIXME if $time2 is undef, query will be "AND datetime > $time AND AND datetime < $time" +# Operators should probably be <= and >= if ($spreadsheet) { $query .= " ORDER BY branch, type"; } @@ -121,8 +190,6 @@ sub TotalPaid { 1; __END__ -=back - =head1 AUTHOR Koha Development Team