# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
-use strict;
-use warnings;
+use Modern::Perl;
require Exporter;
use Carp;
use C4::Context;
use C4::Debug;
+
+use Koha::DateUtils qw( dt_from_string );
+use Koha::Statistics;
+use Koha::PseudonymizedTransactions;
+
use vars qw(@ISA @EXPORT);
our $debug;
@ISA = qw(Exporter);
@EXPORT = qw(
&UpdateStats
- &TotalPaid
);
}
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.
# 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_keys = qw (type branch amount other itemnumber itemtype borrowernumber 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 @invalid_params = ();
for my $myparam (keys %$params ) {
- push @invalid_params, $myparam unless grep (/^$myparam$/, @allowed_keys);
+ push @invalid_params, $myparam unless grep { $_ eq $myparam } @allowed_keys;
}
if (scalar @invalid_params > 0 ) {
croak ("UpdateStats received invalid param(s): ".join (", ",@invalid_params ));
my $branch = $params->{branch};
my $type = $params->{type};
my $borrowernumber = exists $params->{borrowernumber} ? $params->{borrowernumber} : '';
- my $itemnumber = exists $params->{itemnumber} ? $params->{itemnumber} : '';
+ 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
- );
-}
-
-=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
- }
- 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";
- }
- $debug and warn "TotalPaid query: $query";
- my $sth = $dbh->prepare($query);
- $sth->execute();
- return @{$sth->fetchall_arrayref({})};
+ my $dtf = Koha::Database->new->schema->storage->datetime_parser;
+ my $statistic = Koha::Statistic->new(
+ {
+ datetime => $dtf->format_datetime( dt_from_string ),
+ branch => $branch,
+ type => $type,
+ value => $amount,
+ other => $other,
+ itemnumber => $itemnumber,
+ itemtype => $itemtype,
+ location => $location,
+ borrowernumber => $borrowernumber,
+ ccode => $ccode,
+ }
+ )->store;
+
+ Koha::PseudonymizedTransaction->new_from_statistic($statistic)->store
+ if C4::Context->preference('Pseudonymization')
+ && $borrowernumber # Not a real transaction if the patron does not exist
+ # For instance can be a transfer, or hold trigger
+ && grep { $_ eq $params->{type} } qw(renew issue return onsite_checkout);
}
1;