Lines 37-42
use C4::Context;
Link Here
|
37 |
use C4::Items; |
37 |
use C4::Items; |
38 |
use C4::Circulation qw/LostItem/; |
38 |
use C4::Circulation qw/LostItem/; |
39 |
use Getopt::Long; |
39 |
use Getopt::Long; |
|
|
40 |
use Koha::Log qw(:log set_default_logger); |
40 |
|
41 |
|
41 |
my $lost; # key=lost value, value=num days. |
42 |
my $lost; # key=lost value, value=num days. |
42 |
my ($charge, $verbose, $confirm, $quiet); |
43 |
my ($charge, $verbose, $confirm, $quiet); |
Lines 53-58
GetOptions(
Link Here
|
53 |
'mark-returned' => \$mark_returned, |
54 |
'mark-returned' => \$mark_returned, |
54 |
); |
55 |
); |
55 |
|
56 |
|
|
|
57 |
my $log_level = $verbose ? 'debug' : 'info'; |
58 |
my %loggers; |
59 |
if ($quiet) { |
60 |
$loggers{File} = {min_level => $log_level, filename => 'longoverdue.log'}; |
61 |
} else { |
62 |
$loggers{Stdout} = {min_level => $log_level, }; |
63 |
} |
64 |
set_default_logger( %loggers ); |
65 |
|
66 |
|
56 |
my $usage = << 'ENDUSAGE'; |
67 |
my $usage = << 'ENDUSAGE'; |
57 |
longoverdue.pl : This cron script set lost values on overdue items and optionally sets charges the patron's account |
68 |
longoverdue.pl : This cron script set lost values on overdue items and optionally sets charges the patron's account |
58 |
for the item's replacement price. It is designed to be run as a nightly job. The command line options that globally |
69 |
for the item's replacement price. It is designed to be run as a nightly job. The command line options that globally |
Lines 126-132
if ( ! defined($charge) ) {
Link Here
|
126 |
} |
137 |
} |
127 |
unless ($confirm) { |
138 |
unless ($confirm) { |
128 |
$verbose = 1; # If you're not running it for real, then the whole point is the print output. |
139 |
$verbose = 1; # If you're not running it for real, then the whole point is the print output. |
129 |
print "### TEST MODE -- NO ACTIONS TAKEN ###\n"; |
140 |
log_info { "### TEST MODE -- NO ACTIONS TAKEN ###" }; |
130 |
} |
141 |
} |
131 |
|
142 |
|
132 |
# In my opinion, this line is safe SQL to have outside the API. --atz |
143 |
# In my opinion, this line is safe SQL to have outside the API. --atz |
Lines 168-181
foreach my $startrange (sort keys %$lost) {
Link Here
|
168 |
if( my $lostvalue = $lost->{$startrange} ) { |
179 |
if( my $lostvalue = $lost->{$startrange} ) { |
169 |
my ($date1) = bounds($startrange); |
180 |
my ($date1) = bounds($startrange); |
170 |
my ($date2) = bounds( $endrange); |
181 |
my ($date2) = bounds( $endrange); |
171 |
# print "\nRange ", ++$i, "\nDue $startrange - $endrange days ago ($date2 to $date1), lost => $lostvalue\n" if($verbose); |
182 |
#log_debug { "\nRange ", ++$i, "\nDue $startrange - $endrange days ago ($date2 to $date1), lost => $lostvalue" }; |
172 |
$verbose and |
183 |
log_debug { |
173 |
printf "\nRange %s\nDue %3s - %3s days ago (%s to %s), lost => %s\n", ++$i, |
184 |
sprintf "\nRange %s\nDue %3s - %3s days ago (%s to %s), lost => %s", |
174 |
$startrange, $endrange, $date2, $date1, $lostvalue; |
185 |
++$i, $startrange, $endrange, $date2, $date1, $lostvalue; |
|
|
186 |
}; |
175 |
$sth_items->execute($startrange, $endrange, $lostvalue); |
187 |
$sth_items->execute($startrange, $endrange, $lostvalue); |
176 |
$count=0; |
188 |
$count=0; |
177 |
while (my $row=$sth_items->fetchrow_hashref) { |
189 |
while (my $row=$sth_items->fetchrow_hashref) { |
178 |
printf ("Due %s: item %5s from borrower %5s to lost: %s\n", $row->{date_due}, $row->{itemnumber}, $row->{borrowernumber}, $lostvalue) if($verbose); |
190 |
log_debug { |
|
|
191 |
sprintf "Due %s: item %5s from borrower %5s to lost: %s", |
192 |
$row->{date_due}, $row->{itemnumber}, $row->{borrowernumber}, $lostvalue; |
193 |
}; |
179 |
if($confirm) { |
194 |
if($confirm) { |
180 |
ModItem({ itemlost => $lostvalue }, $row->{'biblionumber'}, $row->{'itemnumber'}); |
195 |
ModItem({ itemlost => $lostvalue }, $row->{'biblionumber'}, $row->{'itemnumber'}); |
181 |
LostItem($row->{'itemnumber'}, $mark_returned) if( $charge && $charge eq $lostvalue); |
196 |
LostItem($row->{'itemnumber'}, $mark_returned) if( $charge && $charge eq $lostvalue); |
Lines 196-215
foreach my $startrange (sort keys %$lost) {
Link Here
|
196 |
$endrange = $startrange; |
211 |
$endrange = $startrange; |
197 |
} |
212 |
} |
198 |
|
213 |
|
199 |
sub summarize ($$) { |
214 |
log_info { |
200 |
my $arg = shift; # ref to array |
|
|
201 |
my $got_items = shift || 0; # print "count" line for items |
202 |
my @report = @$arg or return undef; |
203 |
my $i = 0; |
215 |
my $i = 0; |
204 |
for my $range (@report) { |
216 |
join "", |
205 |
printf "\nRange %s\nDue %3s - %3s days ago (%s to %s), lost => %s\n", ++$i, |
217 |
"\n### LONGOVERDUE SUMMARY ###", |
206 |
map {$range->{$_}} qw(startrange endrange date2 date1 lostvalue); |
218 |
map ( |
207 |
$got_items and printf " %4s items\n", $range->{count}; |
219 |
sprintf ( |
208 |
} |
220 |
"\nRange %s\nDue %3s - %3s days ago (%s to %s), lost => %s\n %4s items\n", |
|
|
221 |
++$i, @$_{qw(startrange endrange date2 date1 lostvalue count)} |
222 |
), |
223 |
@report |
224 |
), |
225 |
"\nTOTAL: $total items\n" |
226 |
; |
209 |
} |
227 |
} |
210 |
|
228 |
|
211 |
if (!$quiet){ |
|
|
212 |
print "\n### LONGOVERDUE SUMMARY ###"; |
213 |
summarize (\@report, 1); |
214 |
print "\nTOTAL: $total items\n"; |
215 |
} |
216 |
- |