X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=circ%2Fwaitingreserves.pl;h=c9d4e84e8229fb0abc1f9f97eabe540c1f32246c;hb=9d6d641d1f8b77271800f43bc027b651f9aea52b;hp=d6a24f72363350f2c92aab31016b18b48afb2372;hpb=19a977dc7b779173c4a3e96b6b06dc35db663601;p=srvgit diff --git a/circ/waitingreserves.pl b/circ/waitingreserves.pl index d6a24f7236..c9d4e84e82 100755 --- a/circ/waitingreserves.pl +++ b/circ/waitingreserves.pl @@ -18,26 +18,21 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; use CGI qw ( -utf8 ); use C4::Context; -use C4::Output; -use C4::Auth; -use C4::Circulation; -use C4::Members; -use C4::Biblio; -use C4::Items; -use Koha::DateUtils; -use Date::Calc qw( - Today - Add_Delta_Days - Date_to_Days -); -use C4::Reserves; -use C4::Koha; - -my $input = new CGI; +use C4::Output qw( output_html_with_http_headers ); +use C4::Auth qw( get_template_and_user ); +use C4::Items qw( ModItemTransfer ); +use Date::Calc qw( Date_to_Days Today ); +use C4::Reserves qw( ModReserve ModReserveCancelAll ); +use Koha::DateUtils qw( dt_from_string output_pref ); +use Koha::BiblioFrameworks; +use Koha::Items; +use Koha::ItemTypes; +use Koha::Patrons; + +my $input = CGI->new; my $item = $input->param('itemnumber'); my $borrowernumber = $input->param('borrowernumber'); @@ -47,14 +42,12 @@ my $all_branches = $input->param('allbranches') || ''; my $cancelall = $input->param('cancelall'); my $tab = $input->param('tab'); -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( +my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user( { template_name => "circ/waitingreserves.tt", query => $input, type => "intranet", - authnotrequired => 0, flagsrequired => { circulate => "circulate_remaining_permissions" }, - debug => 1, } ); @@ -64,7 +57,7 @@ my $transfer_when_cancel_all = C4::Context->preference('TransferWhenCancelAllWai $template->param( TransferWhenCancelAllWaitingHolds => 1 ) if $transfer_when_cancel_all; my @cancel_result; -# if we have a return from the form we launch the subroutine CancelReserve +# if we have a return from the form we cancel the holds if ($item) { my $res = cancel( $item, $borrowernumber, $fbr, $tbr ); push @cancel_result, $res if $res; @@ -78,91 +71,49 @@ if ( C4::Context->preference('IndependentBranches') ) { } $template->param( all_branches => 1 ) if $all_branches; -my (@reservloop, @overloop); -my ($reservcount, $overcount); -my @getreserves = $all_branches ? GetReservesForBranch() : GetReservesForBranch($default); +my (@reserve_loop, @over_loop); +# FIXME - Is priority => 0 useful? If yes it must be moved to waiting, otherwise we need to remove it from here. +my $holds = Koha::Holds->waiting->search({ priority => 0, ( $all_branches ? () : ( branchcode => $default ) ) }, { order_by => ['waitingdate'] }); + # get reserves for the branch we are logged into, or for all branches my $today = Date_to_Days(&Today); -my $max_pickup_delay = C4::Context->preference('ReservesMaxPickUpDelay'); -$max_pickup_delay-- if C4::Context->preference('ExpireReservesMaxPickUpDelay'); - -foreach my $num (@getreserves) { - next unless ($num->{'waitingdate'} && $num->{'waitingdate'} ne '0000-00-00'); - - my $itemnumber = $num->{'itemnumber'}; - my $gettitle = GetBiblioFromItemNumber( $itemnumber ); - my $borrowernum = $num->{'borrowernumber'}; - my $holdingbranch = $gettitle->{'holdingbranch'}; - my $homebranch = $gettitle->{'homebranch'}; - - my %getreserv = ( - itemnumber => $itemnumber, - borrowernum => $borrowernum, - ); - - # fix up item type for display - $gettitle->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $gettitle->{'itype'} : $gettitle->{'itemtype'}; - my $getborrower = GetMember(borrowernumber => $num->{'borrowernumber'}); - my $itemtypeinfo = getitemtypeinfo( $gettitle->{'itemtype'} ); # using the fixed up itype/itemtype - $getreserv{'waitingdate'} = $num->{'waitingdate'}; - my ( $waiting_year, $waiting_month, $waiting_day ) = split (/-/, $num->{'waitingdate'}); - - ( $waiting_year, $waiting_month, $waiting_day ) = - Add_Delta_Days( $waiting_year, $waiting_month, $waiting_day, - $max_pickup_delay); - my $calcDate = Date_to_Days( $waiting_year, $waiting_month, $waiting_day ); - - $getreserv{'itemtype'} = $itemtypeinfo->{'description'}; - $getreserv{'title'} = $gettitle->{'title'}; - $getreserv{'subtitle'} = GetRecordValue('subtitle', GetMarcBiblio($gettitle->{'biblionumber'}), GetFrameworkCode($gettitle->{'biblionumber'})); - $getreserv{'biblionumber'} = $gettitle->{'biblionumber'}; - $getreserv{'barcode'} = $gettitle->{'barcode'}; - $getreserv{'homebranch'} = $gettitle->{'homebranch'}; - $getreserv{'holdingbranch'} = $gettitle->{'holdingbranch'}; - $getreserv{'itemcallnumber'} = $gettitle->{'itemcallnumber'}; - $getreserv{'enumchron'} = $gettitle->{'enumchron'}; - $getreserv{'copynumber'} = $gettitle->{'copynumber'}; - if ( $homebranch ne $holdingbranch ) { - $getreserv{'dotransfer'} = 1; - } - $getreserv{'borrowername'} = $getborrower->{'surname'}; - $getreserv{'borrowerfirstname'} = $getborrower->{'firstname'}; - $getreserv{'borrowerphone'} = $getborrower->{'phone'}; - my $borEmail = GetFirstValidEmailAddress( $borrowernum ); +while ( my $hold = $holds->next ) { + next unless $hold->waitingdate; - if ( $borEmail ) { - $getreserv{'borrowermail'} = $borEmail; - } + my ( $expire_year, $expire_month, $expire_day ) = split (/-/, $hold->expirationdate); + my $calcDate = Date_to_Days( $expire_year, $expire_month, $expire_day ); if ($today > $calcDate) { if ($cancelall) { - my $res = cancel( $itemnumber, $borrowernum, $holdingbranch, $homebranch, !$transfer_when_cancel_all ); + my $res = cancel( $hold->item->itemnumber, $hold->borrowernumber, $hold->item->holdingbranch, $hold->item->homebranch, !$transfer_when_cancel_all ); push @cancel_result, $res if $res; next; } else { - push @overloop, \%getreserv; - $overcount++; + push @over_loop, $hold; } }else{ - push @reservloop, \%getreserv; - $reservcount++; + push @reserve_loop, $hold; } } $template->param(cancel_result => \@cancel_result) if @cancel_result; + $template->param( - reserveloop => \@reservloop, - reservecount => $reservcount, - overloop => \@overloop, - overcount => $overcount, + reserveloop => \@reserve_loop, + reservecount => scalar @reserve_loop, + overloop => \@over_loop, + overcount => scalar @over_loop, show_date => output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), - ReservesMaxPickUpDelay => $max_pickup_delay, + tab => $tab, ); -if ($item && $tab eq 'holdsover') { +# Checking if there is a Fast Cataloging Framework +$template->param( fast_cataloging => 1 ) if Koha::BiblioFrameworks->find( 'FA' ); + +if ($item && $tab eq 'holdsover' && !@cancel_result) { print $input->redirect("/cgi-bin/koha/circ/waitingreserves.pl#holdsover"); } elsif ($cancelall) { print $input->redirect("/cgi-bin/koha/circ/waitingreserves.pl"); @@ -183,13 +134,13 @@ sub cancel { # if the document is not in his homebranch location and there is not reservation after, we transfer it if ($transfer && !$nextreservinfo) { - ModItemTransfer( $item, $fbr, $tbr ); + ModItemTransfer( $item, $fbr, $tbr, 'CancelReserve' ); } # if we have a result if ($nextreservinfo) { my %res; - my $borrowerinfo = C4::Members::GetMember( borrowernumber => $nextreservinfo ); - my $iteminfo = GetBiblioFromItemNumber($item); + my $patron = Koha::Patrons->find( $nextreservinfo ); + my $title = Koha::Items->find( $item )->biblio->title; if ( $messages->{'transfert'} ) { $res{messagetransfert} = $messages->{'transfert'}; $res{branchcode} = $messages->{'transfert'}; @@ -197,10 +148,10 @@ sub cancel { $res{message} = 1; $res{nextreservnumber} = $nextreservinfo; - $res{nextreservsurname} = $borrowerinfo->{'surname'}; - $res{nextreservfirstname} = $borrowerinfo->{'firstname'}; + $res{nextreservsurname} = $patron->surname; + $res{nextreservfirstname} = $patron->firstname; $res{nextreservitem} = $item; - $res{nextreservtitle} = $iteminfo->{'title'}; + $res{nextreservtitle} = $title; $res{waiting} = $messages->{'waiting'} ? 1 : 0; return \%res;