View | Details | Raw Unified | Return to bug 37775
Collapse All | Expand All

(-)a/misc/cronjobs/update_totalissues.pl (-23 / +17 lines)
Lines 21-37 use strict; Link Here
21
use warnings;
21
use warnings;
22
22
23
use Getopt::Long qw( GetOptions );
23
use Getopt::Long qw( GetOptions );
24
use Pod::Usage qw( pod2usage );
24
use Pod::Usage   qw( pod2usage );
25
25
26
use Koha::Script -cron;
26
use Koha::Script -cron;
27
use Koha::DateUtils qw( dt_from_string );
27
use Koha::DateUtils qw( dt_from_string );
28
use C4::Context;
28
use C4::Context;
29
use C4::Biblio qw( UpdateTotalIssues );
29
use C4::Biblio qw( UpdateTotalIssues );
30
use C4::Log qw( cronlogaction );
30
use C4::Log    qw( cronlogaction );
31
use DateTime;
31
use DateTime;
32
use DateTime::Format::MySQL;
32
use DateTime::Format::MySQL;
33
use Time::HiRes qw( time );
33
use Time::HiRes qw( time );
34
use POSIX qw( ceil strftime );
34
use POSIX       qw( ceil strftime );
35
35
36
sub usage {
36
sub usage {
37
    pod2usage( -verbose => 2 );
37
    pod2usage( -verbose => 2 );
Lines 49-58 my $interval; Link Here
49
my $usestats    = 0;
49
my $usestats    = 0;
50
my $useitems    = 0;
50
my $useitems    = 0;
51
my $incremental = 0;
51
my $incremental = 0;
52
my $progress      = 100;
52
my $progress    = 100;
53
my $unit;
53
my $unit;
54
54
55
my $command_line_options = join(" ",@ARGV);
55
my $command_line_options = join( " ", @ARGV );
56
56
57
my $result = GetOptions(
57
my $result = GetOptions(
58
    'v|verbose'    => \$verbose,
58
    'v|verbose'    => \$verbose,
Lines 62-68 my $result = GetOptions( Link Here
62
    'use-stats'    => \$usestats,
62
    'use-stats'    => \$usestats,
63
    'use-items'    => \$useitems,
63
    'use-items'    => \$useitems,
64
    'incremental'  => \$incremental,
64
    'incremental'  => \$incremental,
65
    'p|progress=i'   => \$progress,
65
    'p|progress=i' => \$progress,
66
    'h|help'       => \$want_help
66
    'h|help'       => \$want_help
67
);
67
);
68
68
Lines 74-81 if ( defined $since && defined $interval ) { Link Here
74
}
74
}
75
75
76
if ( $useitems && $incremental ) {
76
if ( $useitems && $incremental ) {
77
    print
77
    print "The --use-items and --incremental options are mutually exclusive.\n\n";
78
      "The --use-items and --incremental options are mutually exclusive.\n\n";
79
    $want_help = 1;
78
    $want_help = 1;
80
}
79
}
81
80
Lines 90-96 unless ( $usestats || $useitems ) { Link Here
90
89
91
usage() if $want_help;
90
usage() if $want_help;
92
91
93
cronlogaction({ info => $command_line_options });
92
cronlogaction( { info => $command_line_options } );
94
93
95
my $dbh = C4::Context->dbh;
94
my $dbh = C4::Context->dbh;
96
95
Lines 105-117 process_stats() if $usestats; Link Here
105
104
106
report();
105
report();
107
106
108
cronlogaction({ action => 'End', info => "COMPLETED" });
107
cronlogaction( { action => 'End', info => "COMPLETED" } );
109
108
110
exit 0;
109
exit 0;
111
110
112
sub process_items {
111
sub process_items {
113
    my $query =
112
    my $query = "SELECT items.biblionumber, SUM(items.issues) FROM items GROUP BY items.biblionumber;";
114
"SELECT items.biblionumber, SUM(items.issues) FROM items GROUP BY items.biblionumber;";
115
    process_query($query);
113
    process_query($query);
116
}
114
}
117
115
Lines 128-142 sub process_stats { Link Here
128
        );
126
        );
129
127
130
        $interval =~ m/([0-9]*)([hdwmy]?)$/;
128
        $interval =~ m/([0-9]*)([hdwmy]?)$/;
131
        $unit = $2 || 'd';
129
        $unit  = $2 || 'd';
132
        $since = DateTime::Format::MySQL->format_datetime(
130
        $since = DateTime::Format::MySQL->format_datetime( $dt->subtract( $units{$unit} => $1 ) );
133
            $dt->subtract( $units{$unit} => $1 ) );
134
    }
131
    }
135
    my $limit = '';
132
    my $limit = '';
136
    $limit = " WHERE statistics.datetime >= ?" if ( $interval || $since );
133
    $limit = " WHERE statistics.datetime >= ?" if ( $interval || $since );
137
134
138
    my $query =
135
    my $query = "SELECT biblio.biblionumber, COUNT(statistics.itemnumber) FROM biblio\
139
"SELECT biblio.biblionumber, COUNT(statistics.itemnumber) FROM biblio\
140
 LEFT JOIN items ON (biblio.biblionumber=items.biblionumber)\
136
 LEFT JOIN items ON (biblio.biblionumber=items.biblionumber)\
141
 LEFT JOIN statistics ON (items.itemnumber=statistics.itemnumber AND statistics.type = 'issue')
137
 LEFT JOIN statistics ON (items.itemnumber=statistics.itemnumber AND statistics.type = 'issue')
142
 $limit\
138
 $limit\
Lines 152-159 sub process_query { Link Here
152
148
153
    if ( $since && $uselimit ) {
149
    if ( $since && $uselimit ) {
154
        $sth->execute($since);
150
        $sth->execute($since);
155
    }
151
    } else {
156
    else {
157
        $sth->execute();
152
        $sth->execute();
158
    }
153
    }
159
154
Lines 161-167 sub process_query { Link Here
161
        $num_bibs_processed++;
156
        $num_bibs_processed++;
162
        $totalissues = 0 unless $totalissues;
157
        $totalissues = 0 unless $totalissues;
163
        print "Processing bib $biblionumber ($totalissues issues)\n"
158
        print "Processing bib $biblionumber ($totalissues issues)\n"
164
          if $verbose;
159
            if $verbose;
165
        if ( not $test_only ) {
160
        if ( not $test_only ) {
166
            my $ret;
161
            my $ret;
167
            if ( $incremental && $totalissues > 0 ) {
162
            if ( $incremental && $totalissues > 0 ) {
Lines 184-190 sub process_query { Link Here
184
}
179
}
185
180
186
sub report {
181
sub report {
187
    my $endtime = time();
182
    my $endtime   = time();
188
    my $totaltime = ceil( ( $endtime - $starttime ) * 1000 );
183
    my $totaltime = ceil( ( $endtime - $starttime ) * 1000 );
189
    $starttime = strftime( '%D %T', localtime($starttime) );
184
    $starttime = strftime( '%D %T', localtime($starttime) );
190
    $endtime   = strftime( '%D %T', localtime($endtime) );
185
    $endtime   = strftime( '%D %T', localtime($endtime) );
Lines 269-275 processing the last twenty-four hours. Link Here
269
264
270
=item B<--progress=N>
265
=item B<--progress=N>
271
266
272
Print the progress to standart output after every N records are processed.
267
Print the progress to standard output after every N records are processed.
273
268
274
=item B<--test>
269
=item B<--test>
275
270
276
- 

Return to bug 37775