X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=reserve%2Fplacerequest.pl;h=b299c174026b2f9379167de3ad832ba604b0e1be;hb=6281ed6b914ab44da573e34323b677d0b4f07f67;hp=64eb94af8a765b9e128eb62adf0e943f58d4268f;hpb=653885bdf0959b2261b9eebf488d0aa56d108184;p=koha.git diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl index 64eb94af8a..b299c17402 100755 --- a/reserve/placerequest.pl +++ b/reserve/placerequest.pl @@ -22,7 +22,9 @@ # Suite 330, Boston, MA 02111-1307 USA use strict; +use warnings; use C4::Biblio; +use C4::Items; use CGI; use C4::Output; use C4::Reserves; @@ -32,6 +34,7 @@ use C4::Members; my $input = new CGI; #print $input->header; + my @bibitems=$input->param('biblioitem'); # FIXME I think reqbib does not exist anymore, it's used in line 82, to AddReserve of contraint type 'o' # I bet it's a 2.x feature, reserving a given biblioitem, that is useless in Koha 3.0 @@ -42,14 +45,30 @@ my $biblionumber=$input->param('biblionumber'); my $borrower=$input->param('member'); my $notes=$input->param('notes'); my $branch=$input->param('pickup'); +my $startdate=$input->param('reserve_date') || ''; my @rank=$input->param('rank-request'); my $type=$input->param('type'); my $title=$input->param('title'); -my $borrowernumber=GetMember($borrower,'cardnumber'); +my $borrowernumber=GetMember('cardnumber'=>$borrower); my $checkitem=$input->param('checkitem'); + +my $multi_hold = $input->param('multi_hold'); +my $biblionumbers = $multi_hold ? $input->param('biblionumbers') : ($biblionumber . '/'); +my $bad_bibs = $input->param('bad_bibs'); + +my %bibinfos = (); +my @biblionumbers = split '/', $biblionumbers; +foreach my $bibnum (@biblionumbers) { + my %bibinfo = (); + $bibinfo{title} = $input->param("title_$bibnum"); + $bibinfo{rank} = $input->param("rank_$bibnum"); + $bibinfos{$bibnum} = \%bibinfo; +} + my $found; -#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 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' unless C4::Context->preference('ReservesNeedReturns'); my $item = $checkitem; @@ -60,31 +79,48 @@ if ($checkitem ne ''){ } 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'){ - # place a request on 1st available - AddReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,'a',\@realbi,$rank[0],$notes,$title,$checkitem,$found); - } elsif ($reqbib[0] ne ''){ - # FIXME : elsif probably never reached, (see top of the script) - # place a request on a given item - AddReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,'o',\@reqbib,$rank[0],$notes,$title,$checkitem, $found); - } else { - AddReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,'a',\@realbi,$rank[0],$notes,$title,$checkitem, $found); - } - -print $input->redirect("request.pl?biblionumber=$biblionumber"); + + foreach my $biblionumber (keys %bibinfos) { + 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 ($multi_hold) { + my $bibinfo = $bibinfos{$biblionumber}; + AddReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,'a',[$biblionumber], + $bibinfo->{rank},$startdate,$notes,$bibinfo->{title},$checkitem,$found); + } else { + if ($input->param('request') eq 'any'){ + # place a request on 1st available + AddReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,'a',\@realbi,$rank[0],$startdate,$notes,$title,$checkitem,$found); + } elsif ($reqbib[0] ne ''){ + # FIXME : elsif probably never reached, (see top of the script) + # place a request on a given item + AddReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,'o',\@reqbib,$rank[0],$startdate,$notes,$title,$checkitem, $found); + } else { + AddReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,'a',\@realbi,$rank[0],$startdate,$notes,$title,$checkitem, $found); + } + } + } + + if ($multi_hold) { + if ($bad_bibs) { + $biblionumbers .= $bad_bibs; + } + print $input->redirect("request.pl?biblionumbers=$biblionumbers&multi_hold=1"); + } else { + print $input->redirect("request.pl?biblionumber=$biblionumber"); + } } elsif ($borrowernumber eq ''){ print $input->header(); print "Invalid card number please try again";