X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=reserve%2Fplacerequest.pl;h=a253fb55473968c82f1f0a3ff3ee70d64b91313c;hb=25a4757373b0f00df45b99bac76079ccbf20777e;hp=5d9f3670c5adc389eeccc8196a2fc781d121f2f2;hpb=0b66bd800d9c5137240e48c2821a6871427d169d;p=koha-ffzg.git diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl index 5d9f3670c5..a253fb5547 100755 --- a/reserve/placerequest.pl +++ b/reserve/placerequest.pl @@ -1,91 +1,163 @@ #!/usr/bin/perl #script to place reserves/requests -#writen 2/1/00 by chris@katipo.oc.nz +#written 2/1/00 by chris@katipo.oc.nz # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA - -use strict; -use C4::Biblio; -use CGI; -use C4::Output; -use C4::Reserves2; -use C4::Circulation; -use C4::Members; - -my $input = new CGI; -#print $input->header; - -my @bibitems=$input->param('biblioitem'); -my @reqbib=$input->param('reqbib'); -my $biblionumber=$input->param('biblionumber'); -my $borrower=$input->param('member'); -my $notes=$input->param('notes'); -my $branch=$input->param('pickup'); -my @rank=$input->param('rank-request'); -my $type=$input->param('type'); -my $title=$input->param('title'); -my $borrowernumber=GetMember($borrower,'cardnumber'); -my $checkitem=$input->param('checkitem'); +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use CGI qw ( -utf8 ); +use URI; +use C4::Reserves qw( CanItemBeReserved AddReserve CanBookBeReserved ); +use C4::Auth qw( checkauth ); + +use Koha::Items; +use Koha::Patrons; + +my $input = CGI->new(); + +checkauth($input, 0, { reserveforothers => 'place_holds' }, 'intranet'); + +my @reqbib = $input->multi_param('reqbib'); +my @biblionumbers = $input->multi_param('biblionumber'); +my @holdable_bibs = $input->multi_param('holdable_bibs'); +my $borrowernumber = $input->param('borrowernumber'); +my $notes = $input->param('notes'); +my $branch = $input->param('pickup'); +my $startdate = $input->param('reserve_date') || ''; +my @rank = $input->multi_param('rank-request'); +my $title = $input->param('title'); +my $checkitem = $input->param('checkitem'); +my $item_group_id = $input->param('item_group_id'); +my $expirationdate = $input->param('expiration_date'); +my $itemtype = $input->param('itemtype') || undef; +my $non_priority = $input->param('non_priority'); + +my $patron = Koha::Patrons->find( $borrowernumber ); + +my $holds_to_place_count = $input->param('holds_to_place_count') || 1; + +my %bibinfos = (); +foreach my $bibnum ( @holdable_bibs ) { + my %bibinfo = (); + $bibinfo{title} = $input->param("title_$bibnum"); + $bibinfo{rank} = $input->param("rank_$bibnum"); + $bibinfo{pickup} = $input->param("pickup_$bibnum"); + $bibinfos{$bibnum} = \%bibinfo; +} + my $found; -#new op : if we have an item selectionned, and the pickup branch is the same as the holdingbranch of the document, we force the value $rank and $found . -if ($checkitem ne ''){ - $rank[0] = '0'; - my $item = $checkitem; - $item = GetItem($item); - if ( $item->{'holdingbranch'} eq $branch ){ - $found = 'W'; - } +if ( $patron ) { + + foreach my $biblionumber ( keys %bibinfos ) { + + my $can_override = C4::Context->preference('AllowHoldPolicyOverride'); + if ( defined $checkitem && $checkitem ne '' ) { + + if ( my $item_pickup_location = $input->param("item_pickup_$checkitem") ) { + + my $item = Koha::Items->find($checkitem); + + if ( $item->biblionumber ne $biblionumber ) { + $biblionumber = $item->biblionumber; + } + + my $can_item_be_reserved = CanItemBeReserved($patron, $item, $item_pickup_location)->{status}; + + if ( $can_item_be_reserved eq 'OK' || ( $can_item_be_reserved ne 'itemAlreadyOnHold' && $can_override ) ) { + AddReserve( + { + branchcode => $item_pickup_location, + borrowernumber => $patron->borrowernumber, + biblionumber => $biblionumber, + priority => $rank[0], + reservation_date => $startdate, + expiration_date => $expirationdate, + notes => $notes, + title => $title, + itemnumber => $checkitem, + found => $found, + itemtype => $itemtype, + non_priority => $non_priority, + } + ); + + } + } + } elsif (@biblionumbers > 1) { + my $bibinfo = $bibinfos{$biblionumber}; + if ( $can_override || CanBookBeReserved($patron->borrowernumber, $biblionumber)->{status} eq 'OK' ) { + AddReserve( + { + branchcode => $bibinfo->{pickup}, + borrowernumber => $patron->borrowernumber, + biblionumber => $biblionumber, + priority => $bibinfo->{rank}, + reservation_date => $startdate, + expiration_date => $expirationdate, + notes => $notes, + title => $bibinfo->{title}, + itemnumber => $checkitem, + found => $found, + itemtype => $itemtype, + non_priority => $non_priority, + } + ); + } + } else { + # place a request on 1st available + for ( my $i = 0 ; $i < $holds_to_place_count ; $i++ ) { + if ( $can_override || CanBookBeReserved($patron->borrowernumber, $biblionumber)->{status} eq 'OK' ) { + AddReserve( + { + branchcode => $branch, + borrowernumber => $patron->borrowernumber, + biblionumber => $biblionumber, + priority => $rank[0], + reservation_date => $startdate, + expiration_date => $expirationdate, + notes => $notes, + title => $title, + itemnumber => $checkitem, + found => $found, + itemtype => $itemtype, + non_priority => $non_priority, + item_group_id => $item_group_id, + } + ); + } + } + } + } + my $redirect_url = URI->new("request.pl"); + $redirect_url->query_form( biblionumber => [@biblionumbers]); + print $input->redirect($redirect_url); } +elsif ( $borrowernumber eq '' ) { + print $input->header(); + print "Invalid borrower number please try again"; -# END of new op . - -if ($type eq 'str8' && $borrowernumber ne ''){ - my $count=@bibitems; - @bibitems=sort @bibitems; - my $i2=1; - my @realbi; - $realbi[0]=$bibitems[0]; - for (my $i=1;$i<$count;$i++) { - my $i3=$i2-1; - if ($realbi[$i3] ne $bibitems[$i]) { - $realbi[$i2]=$bibitems[$i]; - $i2++; - } - } - my $const; - if ($input->param('request') eq 'any'){ - $const='a'; - CreateReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,$const,\@realbi,$rank[0],$notes,$title,$checkitem,$found); - } elsif ($reqbib[0] ne ''){ - $const='o'; - CreateReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,$const,\@reqbib,$rank[0],$notes,$title,$checkitem, $found); - } else { - CreateReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,'a',\@realbi,$rank[0],$notes,$title,$checkitem, $found); - } - -print $input->redirect("request.pl?biblionumber=$biblionumber"); -} elsif ($borrowernumber eq ''){ - print $input->header(); - print "Invalid card number please try again"; - print $input->Dump; + # Not sure that Dump() does HTML escaping. Use firebug or something to trace + # instead. + #print $input->Dump; }