X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=reserve%2Frequest.pl;h=58b42b3af9ed84782442b90817c6b6d84317b496;hb=697f775c08e6a61527a4ed9afe55eed71909acca;hp=e98a3ac7a47cac50d44878f09e0b3f0d663f932b;hpb=a8ba013e1e4afc9e3cfada1e15178bc1dce0cc59;p=koha.git diff --git a/reserve/request.pl b/reserve/request.pl index e98a3ac7a4..58b42b3af9 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -26,18 +26,21 @@ script to place reserves/requests =cut use strict; +use warnings; use C4::Branch; # GetBranches get_branchinfos_of use CGI; use List::MoreUtils qw/uniq/; -use Date::Calc qw/Today Date_to_Days/; +use Date::Calc qw/Date_to_Days/; use C4::Output; use C4::Auth; use C4::Reserves; use C4::Biblio; +use C4::Items; use C4::Koha; use C4::Circulation; use C4::Dates qw/format_date/; use C4::Members; +use C4::Search; # enabled_staff_search_views my $dbh = C4::Context->dbh; my $sth; @@ -66,8 +69,10 @@ $findborrower =~ s|,| |g; my $cardnumber = $input->param('cardnumber'); my $borrowerslist; my $messageborrower; +my $warnings; +my $messages; -my $date = sprintf( '%04d-%02d-%02d', Today() ); +my $date = C4::Dates->today('iso'); if ($findborrower) { my ( $count, $borrowers ) = @@ -90,35 +95,36 @@ if ($findborrower) { if ($cardnumber) { my $borrowerinfo = GetMemberDetails( 0, $cardnumber ); - my $expiry; my $diffbranch; my @getreservloop; my $count_reserv = 0; my $maxreserves; -# we check the reserves of the borrower, and if he can reserv a document +# we check the reserves of the borrower, and if he can reserv a document # FIXME At this time we have a simple count of reservs, but, later, we could improve the infos "title" ... my $number_reserves = GetReserveCount( $borrowerinfo->{'borrowernumber'} ); if ( $number_reserves > C4::Context->preference('maxreserves') ) { + $warnings = 1; $maxreserves = 1; } - # we check the date expiricy of the borrower (only if there is an expiry date, otherwise, set to 1 (warn) - if ($borrowerinfo->{'dateexpiry'} ne '0000-00-00') { - my $warning = (Date_to_Days(split /-/,$date) > Date_to_Days( split /-/,$borrowerinfo->{'dateexpiry'})); - if ( $warning > 0 ) { - $expiry = 1; - } - } else { - $expiry = 1; + # we check the date expiry of the borrower (only if there is an expiry date, otherwise, set to 1 (warn) + my $expiry_date = $borrowerinfo->{dateexpiry}; + my $expiry = 0; # flag set if patron account has expired + if ($expiry_date and $expiry_date ne '0000-00-00' and + Date_to_Days(split /-/,$date) > Date_to_Days(split /-/,$expiry_date)) { + $messages = $expiry = 1; + }else{ + $expiry = 0; } - + # check if the borrower make the reserv in a different branch if ( $borrowerinfo->{'branchcode'} ne C4::Context->userenv->{'branch'} ) { + $messages = 1; $diffbranch = 1; } @@ -129,16 +135,18 @@ if ($cardnumber) { borrowerstreetaddress => $borrowerinfo->{'address'}, borrowercity => $borrowerinfo->{'city'}, borrowerphone => $borrowerinfo->{'phone'}, - borrowermobile => $borrowerinfo->{'mobile'}, - borrowerfax => $borrowerinfo->{'fax'}, - borrowerphonepro => $borrowerinfo->{'phonepro'}, + borrowermobile => $borrowerinfo->{'mobile'}, + borrowerfax => $borrowerinfo->{'fax'}, + borrowerphonepro => $borrowerinfo->{'phonepro'}, borroweremail => $borrowerinfo->{'email'}, borroweremailpro => $borrowerinfo->{'emailpro'}, borrowercategory => $borrowerinfo->{'category'}, borrowerreservs => $count_reserv, maxreserves => $maxreserves, expiry => $expiry, - diffbranch => $diffbranch + diffbranch => $diffbranch, + messages => $messages, + warnings => $warnings ); } @@ -163,7 +171,7 @@ if ($borrowerslist) { '%s, %s ... (%s - %s) ... %s', $borrower->{surname}, $borrower->{firstname}, $borrower->{cardnumber}, $borrower->{categorycode}, - $borrower->{streetaddress}, + $borrower->{address}, ); } @@ -190,11 +198,14 @@ foreach my $res (@$reserves) { } if ( $borrowerinfo->{borrowernumber} eq $res->{borrowernumber} ) { + $warnings = 1; $alreadyreserved = 1; } } -$template->param( alreadyreserved => $alreadyreserved ); +$template->param( alreadyreserved => $alreadyreserved, + messages => $messages, + warnings => $warnings ); # FIXME think @optionloop, is maybe obsolete, or must be switchable by a systeme preference fixed rank or not # make priorities options @@ -214,7 +225,15 @@ my $fixedRank = $count+1; my @branchcodes; my %itemnumbers_of_biblioitem; -my @itemnumbers = @{ get_itemnumbers_of($biblionumber)->{$biblionumber} }; +my @itemnumbers; + +if (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){ + @itemnumbers = @$items; +} +else { + $template->param('noitems' => 1); +} + my $iteminfos_of = GetItemInfosOf(@itemnumbers); foreach my $itemnumber (@itemnumbers) { @@ -239,10 +258,13 @@ foreach my $biblioitemnumber (@biblioitemnumbers) { my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } ) { my $item = $iteminfos_of->{$itemnumber}; - $item->{itypename} = $itemtypes->{ $item->{itype} }{description}; - $item->{imageurl} = getitemtypeimagesrc() . "/".$itemtypes->{ $item->{itype} }{imageurl}; - $item->{homebranchname} = - $branches->{ $item->{homebranch} }{branchname}; + unless (C4::Context->preference('item-level_itypes')) { + $item->{itype} = $biblioitem->{itemtype}; + } + + $item->{itypename} = $itemtypes->{ $item->{itype} }{description}; + $item->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $item->{itype} }{imageurl} ); + $item->{homebranchname} = $branches->{ $item->{homebranch} }{branchname}; # if the holdingbranch is different than the homebranch, we show the # holdingbranch of the document too @@ -251,9 +273,9 @@ foreach my $biblioitemnumber (@biblioitemnumbers) { $branches->{ $item->{holdingbranch} }{branchname}; } -# add information - $item->{itemcallnumber} = $item->{itemcallnumber}; - +# add information + $item->{itemcallnumber} = $item->{itemcallnumber}; + # if the item is currently on loan, we display its return date and # change the background color my $issues= GetItemIssue($itemnumber); @@ -294,7 +316,7 @@ foreach my $biblioitemnumber (@biblioitemnumbers) { $item->{backgroundcolor} = 'other'; } - # Check of the transfered documents + # Check the transit status my ( $transfertwhen, $transfertfrom, $transfertto ) = GetTransfers($itemnumber); @@ -303,44 +325,34 @@ foreach my $biblioitemnumber (@biblioitemnumbers) { $item->{transfertfrom} = $branches->{$transfertfrom}{branchname}; $item->{transfertto} = $branches->{$transfertto}{branchname}; - $item->{nocancel} = 1; + $item->{nocancel} = 1; } # If there is no loan, return and transfer, we show a checkbox. $item->{notforloan} = $item->{notforloan} || 0; - - # if independent branches is on we need to check if the person can reserve - # for branches they arent logged in to - if ( C4::Context->preference("IndependantBranches") ) { - if (! C4::Context->preference("canreservefromotherbranches")){ - # cant reserve items so need to check if item homebranch and userenv branch match if not we cant reserve - my $userenv = C4::Context->userenv; - if ( ($userenv) && ( $userenv->{flags} != 1 ) ) { - $item->{cantreserve} = 1 if ( $item->{homebranch} ne $userenv->{branch} ); - } - } - } - - # FIXME: every library will define this differently - # An item is available only if: - if ( - not defined $reservedate # not reserved yet - and $issues->{'date_due'} eq '' # not currently on loan - and not $item->{itemlost} # not lost - and not $item->{notforloan} # not forbidden to loan - and not $item->{cantreserve} - and $transfertwhen eq '' # not currently on transfert - ) - { - $item->{available} = 1; + + # if independent branches is on we need to check if the person can reserve + # for branches they arent logged in to + if ( C4::Context->preference("IndependantBranches") ) { + if (! C4::Context->preference("canreservefromotherbranches")){ + # cant reserve items so need to check if item homebranch and userenv branch match if not we cant reserve + my $userenv = C4::Context->userenv; + if ( ($userenv) && ( $userenv->{flags} %2 != 1 ) ) { + $item->{cantreserve} = 1 if ( $item->{homebranch} ne $userenv->{branch} ); + } } + } - # FIXME: move this to a pm - my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W' AND cancellationdate IS NULL"); - $sth2->execute($item->{ReservedForBorrowernumber},$item->{itemnumber}); - while (my $wait_hashref = $sth2->fetchrow_hashref) { - $item->{waitingdate} = format_date($wait_hashref->{waitingdate}); - } + if (IsAvailableForItemLevelRequest($itemnumber) and not $item->{cantreserve}) { + $item->{available} = 1; + } + + # FIXME: move this to a pm + my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W'"); + $sth2->execute($item->{ReservedForBorrowernumber},$item->{itemnumber}); + while (my $wait_hashref = $sth2->fetchrow_hashref) { + $item->{waitingdate} = format_date($wait_hashref->{waitingdate}); + } push @{ $biblioitem->{itemloop} }, $item; } @@ -377,15 +389,22 @@ foreach my $res ( sort { $a->{found} cmp $b->{found} } @$reserves ) { $reserve{'wait'}= 1; $reserve{'holdingbranch'}=$item->{'holdingbranch'}; $reserve{'biblionumber'}=$item->{'biblionumber'}; - $reserve{'barcodenumber'} = $item->{'barcode'}; + $reserve{'barcodenumber'} = $item->{'barcode'}; $reserve{'wbrcode'} = $res->{'branchcode'}; - $reserve{'itemnumber'} = $res->{'itemnumber'}; + $reserve{'itemnumber'} = $res->{'itemnumber'}; $reserve{'wbrname'} = $branches->{$res->{'branchcode'}}->{'branchname'}; if($reserve{'holdingbranch'} eq $reserve{'wbrcode'}){ $reserve{'atdestination'} = 1; } # set found to 1 if reserve is waiting for patron pickup $reserve{'found'} = 1 if $res->{'found'} eq 'W'; + } elsif ($res->{priority} > 0) { + if (defined($res->{itemnumber})) { + my $item = GetItem($res->{itemnumber}); + $reserve{'itemnumber'} = $res->{'itemnumber'}; + $reserve{'barcodenumber'} = $item->{'barcode'}; + $reserve{'item_level_hold'} = 1; + } } # get borrowers reserve info @@ -405,7 +424,7 @@ my $reserveborrowerinfo = GetMemberDetails( $res->{'borrowernumber'}, 0); $reserve{'voldesc'} = $res->{'volumeddesc'}; $reserve{'ccode'} = $res->{'ccode'}; $reserve{'barcode'} = $res->{'barcode'}; - $reserve{'priority'} = $res->{'priority'}; + $reserve{'priority'} = $res->{'priority'}; $reserve{'branchloop'} = \@branchloop; $reserve{'optionloop'} = \@optionloop; @@ -416,13 +435,13 @@ my $default = C4::Context->userenv->{branch}; my @values; my %label_of; -foreach my $branchcode ( keys %{$branches} ) { +foreach my $branchcode (sort keys %{$branches} ) { push @values, $branchcode; $label_of{$branchcode} = $branches->{$branchcode}->{branchname}; } my $CGIbranch = CGI::scrolling_list( -name => 'pickup', - -id => 'pickup', + -id => 'pickup', -values => \@values, -default => $default, -labels => \%label_of, @@ -437,7 +456,7 @@ $template->param( CGIbranch => $CGIbranch, reserveloop => \@reserveloop, time => $time, - fixedRank => $fixedRank, + fixedRank => $fixedRank, ); # display infos @@ -450,7 +469,10 @@ $template->param( cardnumber => $cardnumber, CGIselectborrower => $CGIselectborrower, title => $dat->{title}, - author => $dat->{author} + author => $dat->{author}, + holdsview => 1, + borrower_branchname => $branches->{$borrowerinfo->{'branchcode'}}->{'branchname'}, + borrower_branchcode => $borrowerinfo->{'branchcode'}, ); # printout the page