X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=circ%2Fwaitingreserves.pl;h=2e56c5e86f42d04f8091ce6bba31e5b62f21eb46;hb=f41f272ff087d65ed11d760e6c7c58818c3a24d4;hp=555d04ede8ef580dda024aaecccab543446005c8;hpb=2b90ea2cb0e5e976de7ddef0151ae83d8ac578e6;p=koha-ffzg.git diff --git a/circ/waitingreserves.pl b/circ/waitingreserves.pl index 555d04ede8..2e56c5e86f 100755 --- a/circ/waitingreserves.pl +++ b/circ/waitingreserves.pl @@ -18,30 +18,22 @@ # 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 Date::Calc qw( - Today - Add_Delta_Days - Date_to_Days -); -use C4::Reserves; -use C4::Koha; -use Koha::DateUtils; +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 ); use Koha::BiblioFrameworks; use Koha::Items; use Koha::ItemTypes; use Koha::Patrons; +use Koha::BackgroundJob::BatchCancelHold; -my $input = new CGI; +my $input = CGI->new; my $item = $input->param('itemnumber'); my $borrowernumber = $input->param('borrowernumber'); @@ -50,15 +42,14 @@ my $tbr = $input->param('tbr') || ''; my $all_branches = $input->param('allbranches') || ''; my $cancelall = $input->param('cancelall'); my $tab = $input->param('tab'); +my $cancelBulk = $input->param('cancelBulk'); 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, } ); @@ -68,7 +59,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; @@ -82,82 +73,61 @@ 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); -# get reserves for the branch we are logged into, or for all branches +if ($cancelBulk) { + my $reason = $input->param("cancellation-reason"); + my @hold_ids = split( ',', scalar $input->param("ids") ); + my $params = { + reason => $reason, + hold_ids => \@hold_ids, + }; + my $job_id = Koha::BackgroundJob::BatchCancelHold->new->enqueue($params); + + $template->param( + enqueued => 1, + job_id => $job_id + ); +} -my $today = Date_to_Days(&Today); -my $max_pickup_delay = C4::Context->preference('ReservesMaxPickUpDelay'); +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'] }); -foreach my $num (@getreserves) { - next unless ($num->{'waitingdate'} && $num->{'waitingdate'} ne '0000-00-00'); +# get reserves for the branch we are logged into, or for all branches - my $itemnumber = $num->{'itemnumber'}; - my $item = Koha::Items->find( $itemnumber ); - my $biblio = $item->biblio; - my $borrowernum = $num->{'borrowernumber'}; - my $holdingbranch = $item->holdingbranch; - my $homebranch = $item->homebranch; +my $today = Date_to_Days(&Today); - my %getreserv = ( - itemnumber => $itemnumber, - borrowernum => $borrowernum, - ); +while ( my $hold = $holds->next ) { + next unless $hold->waitingdate; - my $patron = Koha::Patrons->find( $num->{borrowernumber} ); - my $itemtype = Koha::ItemTypes->find( $item->effective_itemtype ); - $getreserv{'waitingdate'} = $num->{'waitingdate'}; - my ( $expire_year, $expire_month, $expire_day ) = split (/-/, $num->{'expirationdate'}); + my ( $expire_year, $expire_month, $expire_day ) = split (/-/, $hold->expirationdate); my $calcDate = Date_to_Days( $expire_year, $expire_month, $expire_day ); - $getreserv{'itemtype'} = $itemtype->description; # FIXME Should not it be translated_description? - $getreserv{'title'} = $biblio->title; - $getreserv{'subtitle'} = GetRecordValue('subtitle', GetMarcBiblio($biblio->biblionumber), $biblio->frameworkcode); - $getreserv{'biblionumber'} = $biblio->biblionumber; - $getreserv{'barcode'} = $item->barcode; - $getreserv{'homebranch'} = $homebranch; - $getreserv{'holdingbranch'} = $item->holdingbranch; - $getreserv{'itemcallnumber'} = $item->itemcallnumber; - $getreserv{'enumchron'} = $item->enumchron; - $getreserv{'copynumber'} = $item->copynumber; - if ( $homebranch ne $holdingbranch ) { - $getreserv{'dotransfer'} = 1; - } - $getreserv{'borrowername'} = $patron->surname; - $getreserv{'borrowerfirstname'} = $patron->firstname; - $getreserv{'borrowerphone'} = $patron->phone; - - my $borEmail = GetFirstValidEmailAddress( $borrowernum ); - - if ( $borEmail ) { - $getreserv{'borrowermail'} = $borEmail; - } - 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; } } +my $holds_with_cancellation_requests = Koha::Holds->waiting->filter_by_has_cancellation_requests; + $template->param(cancel_result => \@cancel_result) if @cancel_result; + $template->param( - reserveloop => \@reservloop, - reservecount => $reservcount, - overloop => \@overloop, - overcount => $overcount, - show_date => output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), - ReservesMaxPickUpDelay => $max_pickup_delay, + reserveloop => \@reserve_loop, + reservecount => scalar @reserve_loop, + overloop => \@over_loop, + overcount => scalar @over_loop, + cancel_reqs_count => $holds_with_cancellation_requests->count, + cancel_reqs => $holds_with_cancellation_requests, + show_date => dt_from_string, tab => $tab, ); @@ -185,7 +155,7 @@ 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) {