|
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 |
- |