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 Carp; use C4::Context; use C4::Debug; use vars qw(@ISA @EXPORT); our $debug; BEGIN { @ISA = qw(Exporter); @EXPORT = qw( &UpdateStats ); } =head1 NAME C4::Stats - Update Koha statistics (log) =head1 SYNOPSIS use C4::Stats; =head1 DESCRIPTION The functions of this module deals with statistics table of Koha database. =head1 FUNCTIONS =head2 UpdateStats &UpdateStats($params); 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 ); } 1; __END__ =head1 AUTHOR Koha Development Team =cut