Lines 1-143
Link Here
|
1 |
#!/usr/bin/perl |
|
|
2 |
|
3 |
#script to place reserves/requests |
4 |
#written 2/1/00 by chris@katipo.oc.nz |
5 |
|
6 |
|
7 |
# Copyright 2000-2002 Katipo Communications |
8 |
# |
9 |
# This file is part of Koha. |
10 |
# |
11 |
# Koha is free software; you can redistribute it and/or modify it |
12 |
# under the terms of the GNU General Public License as published by |
13 |
# the Free Software Foundation; either version 3 of the License, or |
14 |
# (at your option) any later version. |
15 |
# |
16 |
# Koha is distributed in the hope that it will be useful, but |
17 |
# WITHOUT ANY WARRANTY; without even the implied warranty of |
18 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
19 |
# GNU General Public License for more details. |
20 |
# |
21 |
# You should have received a copy of the GNU General Public License |
22 |
# along with Koha; if not, see <http://www.gnu.org/licenses>. |
23 |
|
24 |
use Modern::Perl; |
25 |
|
26 |
use CGI qw ( -utf8 ); |
27 |
use C4::Biblio; |
28 |
use C4::Items; |
29 |
use C4::Output; |
30 |
use C4::Reserves; |
31 |
use C4::Circulation; |
32 |
use C4::Members; |
33 |
use C4::Auth qw/checkauth/; |
34 |
|
35 |
use Koha::Items; |
36 |
use Koha::Patrons; |
37 |
|
38 |
my $input = CGI->new(); |
39 |
|
40 |
checkauth($input, 0, { reserveforothers => 'place_holds' }, 'intranet'); |
41 |
|
42 |
my @bibitems = $input->multi_param('biblioitem'); |
43 |
my @reqbib = $input->multi_param('reqbib'); |
44 |
my $biblionumber = $input->param('biblionumber'); |
45 |
my $borrowernumber = $input->param('borrowernumber'); |
46 |
my $notes = $input->param('notes'); |
47 |
my $branch = $input->param('pickup'); |
48 |
my $startdate = $input->param('reserve_date') || ''; |
49 |
my @rank = $input->multi_param('rank-request'); |
50 |
my $type = $input->param('type'); |
51 |
my $title = $input->param('title'); |
52 |
my $checkitem = $input->param('checkitem'); |
53 |
my $expirationdate = $input->param('expiration_date'); |
54 |
my $itemtype = $input->param('itemtype') || undef; |
55 |
|
56 |
my $borrower = Koha::Patrons->find( $borrowernumber ); |
57 |
$borrower = $borrower->unblessed if $borrower; |
58 |
|
59 |
my $multi_hold = $input->param('multi_hold'); |
60 |
my $biblionumbers = $multi_hold ? $input->param('biblionumbers') : ($biblionumber . '/'); |
61 |
my $bad_bibs = $input->param('bad_bibs'); |
62 |
my $holds_to_place_count = $input->param('holds_to_place_count') || 1; |
63 |
|
64 |
my %bibinfos = (); |
65 |
my @biblionumbers = split '/', $biblionumbers; |
66 |
foreach my $bibnum (@biblionumbers) { |
67 |
my %bibinfo = (); |
68 |
$bibinfo{title} = $input->param("title_$bibnum"); |
69 |
$bibinfo{rank} = $input->param("rank_$bibnum"); |
70 |
$bibinfos{$bibnum} = \%bibinfo; |
71 |
} |
72 |
|
73 |
my $found; |
74 |
|
75 |
if ( $type eq 'str8' && $borrower ) { |
76 |
|
77 |
foreach my $biblionumber ( keys %bibinfos ) { |
78 |
my $count = @bibitems; |
79 |
@bibitems = sort @bibitems; |
80 |
my $i2 = 1; |
81 |
my @realbi; |
82 |
$realbi[0] = $bibitems[0]; |
83 |
for ( my $i = 1 ; $i < $count ; $i++ ) { |
84 |
my $i3 = $i2 - 1; |
85 |
if ( $realbi[$i3] ne $bibitems[$i] ) { |
86 |
$realbi[$i2] = $bibitems[$i]; |
87 |
$i2++; |
88 |
} |
89 |
} |
90 |
|
91 |
my $can_override = C4::Context->preference('AllowHoldPolicyOverride'); |
92 |
if ( defined $checkitem && $checkitem ne '' ) { |
93 |
|
94 |
my $item = Koha::Items->find($checkitem); |
95 |
|
96 |
if ( $item->biblionumber ne $biblionumber ) { |
97 |
$biblionumber = $item->biblionumber; |
98 |
} |
99 |
|
100 |
my $can_item_be_reserved = CanItemBeReserved($borrower->{'borrowernumber'}, $item->itemnumber, $branch)->{status}; |
101 |
|
102 |
if ( $can_item_be_reserved eq 'OK' || ( $can_item_be_reserved ne 'itemAlreadyOnHold' && $can_override ) ) { |
103 |
AddReserve( $branch, $borrower->{'borrowernumber'}, |
104 |
$biblionumber, \@realbi, $rank[0], $startdate, $expirationdate, $notes, $title, |
105 |
$checkitem, $found, $itemtype ); |
106 |
} |
107 |
|
108 |
} elsif ($multi_hold) { |
109 |
my $bibinfo = $bibinfos{$biblionumber}; |
110 |
if ( $can_override || CanBookBeReserved($borrower->{'borrowernumber'}, $biblionumber)->{status} eq 'OK' ) { |
111 |
AddReserve($branch,$borrower->{'borrowernumber'},$biblionumber,[$biblionumber], |
112 |
$bibinfo->{rank},$startdate,$expirationdate,$notes,$bibinfo->{title},$checkitem,$found); |
113 |
} |
114 |
} else { |
115 |
# place a request on 1st available |
116 |
for ( my $i = 0 ; $i < $holds_to_place_count ; $i++ ) { |
117 |
if ( $can_override || CanBookBeReserved($borrower->{'borrowernumber'}, $biblionumber)->{status} eq 'OK' ) { |
118 |
AddReserve( $branch, $borrower->{'borrowernumber'}, |
119 |
$biblionumber, \@realbi, $rank[0], $startdate, $expirationdate, $notes, $title, |
120 |
$checkitem, $found, $itemtype ); |
121 |
} |
122 |
} |
123 |
} |
124 |
} |
125 |
|
126 |
if ($multi_hold) { |
127 |
if ($bad_bibs) { |
128 |
$biblionumbers .= $bad_bibs; |
129 |
} |
130 |
print $input->redirect("request.pl?biblionumbers=$biblionumbers&multi_hold=1"); |
131 |
} |
132 |
else { |
133 |
print $input->redirect("request.pl?biblionumber=$biblionumber"); |
134 |
} |
135 |
} |
136 |
elsif ( $borrowernumber eq '' ) { |
137 |
print $input->header(); |
138 |
print "Invalid borrower number please try again"; |
139 |
|
140 |
# Not sure that Dump() does HTML escaping. Use firebug or something to trace |
141 |
# instead. |
142 |
#print $input->Dump; |
143 |
} |
144 |
- |