Bug 35911: Make archived suggestions not show in patron's account
[koha.git] / reserve / modrequest.pl
1 #!/usr/bin/perl
2
3 #script to modify reserves/requests
4 #written 2/1/00 by chris@katipo.oc.nz
5 #last update 27/1/2000 by chris@katipo.co.nz
6
7
8 # Copyright 2000-2002 Katipo Communications
9 #
10 # This file is part of Koha.
11 #
12 # Koha is free software; you can redistribute it and/or modify it
13 # under the terms of the GNU General Public License as published by
14 # the Free Software Foundation; either version 3 of the License, or
15 # (at your option) any later version.
16 #
17 # Koha is distributed in the hope that it will be useful, but
18 # WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License
23 # along with Koha; if not, see <http://www.gnu.org/licenses>.
24
25 use Modern::Perl;
26 use CGI qw ( -utf8 );
27 use URI;
28 use List::MoreUtils qw( uniq );
29 use Try::Tiny;
30
31 use C4::Output;
32 use C4::Reserves qw( ModReserve ModReserveCancelAll );
33 use C4::Auth qw( checkauth );
34 use Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue;
35
36 my $query = CGI->new;
37
38 checkauth($query, 0, { reserveforothers => '*' }, 'intranet');
39
40 my $op = $query->param('op') || 'cud-modifyall';
41 my @reserve_id = $query->multi_param('reserve_id');
42 my @rank = $query->multi_param('rank-request');
43 my @borrower = $query->multi_param('borrowernumber');
44 my @reservedates = $query->multi_param('reservedate');
45 my @expirationdates = $query->multi_param('expirationdate');
46 my @branch = $query->multi_param('pickup');
47 my @itemnumber = $query->multi_param('itemnumber');
48 my @biblionumber = $query->multi_param('biblionumber');
49 my $count=@rank;
50
51 @biblionumber = uniq @biblionumber;
52
53 # Cancel or modify the queue list of reserves (without item linked)
54 if( $op eq 'cud-cancelall' || $op eq 'cud-modifyall' ) {
55     for (my $i=0;$i<$count;$i++){
56         undef $itemnumber[$i] if !$itemnumber[$i];
57         my $suspend_until = $query->param( "suspend_until_" . $reserve_id[$i] );
58         my $cancellation_reason = $query->param("cancellation-reason");
59         my $params = {
60             rank => $rank[$i],
61             reserve_id => $reserve_id[$i],
62             expirationdate => $expirationdates[$i] || undef,
63             branchcode => $branch[$i],
64             itemnumber => $itemnumber[$i],
65             defined $suspend_until ? ( suspend_until => $suspend_until ) : (),
66             cancellation_reason => $cancellation_reason,
67         };
68         if (C4::Context->preference('AllowHoldDateInFuture')) {
69             $params->{reservedate} = $reservedates[$i] || undef;
70         }
71
72         try {
73             ModReserve($params);
74         } catch {
75             if ($_->isa('Koha::Exceptions::ObjectNotFound')){
76                 warn $_;
77             } else {
78                 $_->rethrow;
79             }
80         };
81
82         if ( $query->param( "change_hold_type_" . $reserve_id[$i] ) ) {
83             my $hold = Koha::Holds->find( $reserve_id[$i] );
84
85             try {
86                 $hold->change_type;
87             } catch {
88                 if ( $_->isa('Koha::Exceptions::Hold::CannotChangeHoldType') ) {
89                     warn $_;
90                 } else {
91                     $_->rethrow;
92                 }
93             }
94         }
95     }
96     my @biblio_ids = uniq @biblionumber;
97     Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue->new->enqueue(
98         {
99             biblio_ids => \@biblio_ids
100         }
101     );
102 }
103
104 my $from=$query->param('from');
105 $from ||= q{};
106 if ( $from eq 'borrower'){
107     print $query->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=$borrower[0]");
108 } elsif ( $from eq 'circ'){
109     print $query->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrower[0]");
110 } else {
111      my $url = URI->new("/cgi-bin/koha/reserve/request.pl");
112      $url->query_form( biblionumber => [@biblionumber]);
113      print $query->redirect($url);
114 }