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

(-)a/reserve/placerequest.pl (-144 lines)
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
- 

Return to bug 24587