X-Git-Url: http://git.rot13.org/?p=koha.git;a=blobdiff_plain;f=reserve%2Fplacerequest.pl;h=3fe459c2593025ffe3eaba40fa4054db3c2604f6;hp=eaafca19f8420cd5ec69e6f69863863a2592c897;hb=HEAD;hpb=5b41a8e2622f5e921b9061646f3155ce5352bfdc diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl index eaafca19f8..3fe459c259 100755 --- a/reserve/placerequest.pl +++ b/reserve/placerequest.pl @@ -17,61 +17,126 @@ # 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 +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. use strict; -#use DBI; -use C4::Search; +use warnings; + use CGI; +use C4::Biblio; +use C4::Items; use C4::Output; -use C4::Reserves2; +use C4::Reserves; +use C4::Circulation; use C4::Members; -my $input = new CGI; -#print $input->header; -my $itemnumber=$input->param('itemnumber'); +use C4::Auth qw/checkauth/; + +my $input = CGI->new(); + +checkauth($input, 0, { reserveforothers => 'place_holds' }, 'intranet'); + my @bibitems=$input->param('biblioitem'); -my @reqbib=$input->param('reqbib'); +# 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 +# we can remove this line, the AddReserve of constrainttype 'o', +# and probably remove the reserveconstraint table as well, I never could fill anything in this table. +my @reqbib=$input->param('reqbib'); my $biblionumber=$input->param('biblionumber'); -my $borrower=$input->param('member'); +my $borrowernumber=$input->param('borrowernumber'); 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 $bornum=borrdata($borrower,''); -my $cataloger=$input->param('loggedinuser'); - -if ($type eq 'str8' && $bornum 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 $borrower=GetMember('borrowernumber'=>$borrowernumber); +my $checkitem=$input->param('checkitem'); +my $expirationdate = $input->param('expiration_date'); + +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 ($checkitem ne ''){ + $rank[0] = '0' unless C4::Context->preference('ReservesNeedReturns'); + my $item = $checkitem; + $item = GetItem($item); + if ( $item->{'holdingbranch'} eq $branch ){ + $found = 'W' unless C4::Context->preference('ReservesNeedReturns'); } } -my $env; +if ($type eq 'str8' && $borrower){ -my $const; + 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 ($checkitem ne ''){ + my $item = GetItem($checkitem); + if ($item->{'biblionumber'} ne $biblionumber) { + $biblionumber = $item->{'biblionumber'}; + } + } -for (my $i=0; $i<@reqbib; $i++){ -if ($reqbib[$i] ne ''){ - $const='o'; - CreateReserve(\$env,$bornum->{'borrowernumber'},$cataloger,$biblionumber,'','',$branch,$const,$rank[0],$notes,$title,"",$reqbib[$i]); -} -} -print $input->redirect("request.pl?biblionumber=$biblionumber"); -} elsif ($bornum eq ''){ - print $input->header(); - print "Invalid card number please try again"; - print $input->Dump; + if ($multi_hold) { + my $bibinfo = $bibinfos{$biblionumber}; + AddReserve($branch,$borrower->{'borrowernumber'},$biblionumber,'a',[$biblionumber], + $bibinfo->{rank},$startdate,$expirationdate,$notes,$bibinfo->{title},$checkitem,$found); + } else { + if ($input->param('request') eq 'any'){ + # place a request on 1st available + AddReserve($branch,$borrower->{'borrowernumber'},$biblionumber,'a',\@realbi,$rank[0],$startdate,$expirationdate,$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,$borrower->{'borrowernumber'},$biblionumber,'o',\@reqbib,$rank[0],$startdate,$expirationdate,$notes,$title,$checkitem, $found); + } else { + AddReserve($branch,$borrower->{'borrowernumber'},$biblionumber,'a',\@realbi,$rank[0],$startdate,$expirationdate,$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 ($borrower eq ''){ + print $input->header(); + print "Invalid borrower number please try again"; +# Not sure that Dump() does HTML escaping. Use firebug or something to trace +# instead. +# print $input->Dump; }