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

(-)a/misc/cronjobs/holds/cancel_expired_holds.pl (-2 / +53 lines)
Lines 21-34 Link Here
21
#use warnings; FIXME - Bug 2505
21
#use warnings; FIXME - Bug 2505
22
22
23
BEGIN {
23
BEGIN {
24
24
    # find Koha's Perl modules
25
    # find Koha's Perl modules
25
    # test carefully before changing this
26
    # test carefully before changing this
26
    use FindBin;
27
    use FindBin;
27
    eval { require "$FindBin::Bin/../kohalib.pl" };
28
    eval { require "$FindBin::Bin/../kohalib.pl" };
28
}
29
}
29
30
30
# cancel all expired hold requests
31
use Getopt::Long;
31
32
33
use C4::Context;
34
use C4::Accounts qw(manualinvoice);
32
use C4::Reserves;
35
use C4::Reserves;
33
36
37
my ( $help, $verbose, $charge, $cancelwaiting );
38
my $count    = 0;
39
my $maxdelay = C4::Context->preference("ReservesMaxPickupDelay");
40
41
GetOptions(
42
    'h|help'        => \$help,
43
    'v|verbose'     => \$verbose,
44
    'cancelwaiting' => \$cancelwaiting,
45
    'charge:f'      => \$charge,
46
);
47
48
my $usage = << 'ENDUSAGE';
49
50
This script cancels expired holds and optionally expires all waiting
51
holds over ReservesMaxPickupDelay, and can charge the patron a fee 
52
for not picking up the material in time.
53
54
This script has the following parameters :
55
    -h --help: this message
56
    -v --verbose
57
    --cancelwaiting
58
    --charge <<amount>>: charge the patron <<amount>> for not
59
                         picking up the waiting hold on time.
60
61
ENDUSAGE
62
die $usage if $help;
63
64
print sprintf "Charging patrons \$%.2f for each hold waiting too long...\n",
65
  $charge
66
  if ( defined $verbose );
67
68
if ( defined $cancelwaiting ) {
69
    my $dbh = C4::Context->dbh;
70
    my $sql = "SELECT * FROM reserves WHERE TO_DAYS( NOW() )-TO_DAYS( waitingdate ) > ? AND found = 'W' AND priority = 0";
71
    my $sth = $dbh->prepare($sql);
72
    $sth->execute($maxdelay);
73
74
    while ( my $row = $sth->fetchrow_hashref ) {
75
        manualinvoice( $row->{'borrowernumber'}, $row->{'itemnumber'}, 'Hold waiting too long', 'F', $charge ) if ($charge);
76
77
        CancelReserve( $row->{'biblionumber'}, '', $row->{'borrowernumber'} );
78
    }
79
80
    print "A total of $count waiting holds canceled\n" if ( defined $verbose );
81
}
82
83
# cancel all expired hold requests
34
CancelExpiredReserves();
84
CancelExpiredReserves();
35
- 
85
print "All expired holds canceled\n" if ( defined $verbose );
86

Return to bug 7408