Bug 32503: (follow-up) Move data-order attributes
[koha-ffzg.git] / circ / waitingreserves.pl
index 24e0347..2e56c5e 100755 (executable)
 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');
@@ -49,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,
     }
 );
 
@@ -81,85 +73,61 @@ if ( C4::Context->preference('IndependentBranches') ) {
 }
 $template->param( all_branches => 1 ) if $all_branches;
 
-my (@reservloop, @overloop);
-my ($reservcount, $overcount);
+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 (@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');
 
 while ( my $hold = $holds->next ) {
-    next unless ($hold->waitingdate && $hold->waitingdate ne '0000-00-00');
-
-    my $item = $hold->item;
-    my $patron = $hold->borrower;
-    my $biblio = $item->biblio;
-    my $holdingbranch = $item->holdingbranch;
-    my $homebranch = $item->homebranch;
-
-    my %getreserv = (
-        title             => $biblio->title,
-        itemnumber        => $item->itemnumber,
-        waitingdate       => $hold->waitingdate,
-        reservedate       => $hold->reservedate,
-        borrowernum       => $patron->borrowernumber,
-        biblionumber      => $biblio->biblionumber,
-        barcode           => $item->barcode,
-        homebranch        => $homebranch,
-        holdingbranch     => $item->holdingbranch,
-        itemcallnumber    => $item->itemcallnumber,
-        enumchron         => $item->enumchron,
-        copynumber        => $item->copynumber,
-        borrowername      => $patron->surname, # FIXME Let's send $patron to the template
-        borrowerfirstname => $patron->firstname,
-        borrowerphone     => $patron->phone,
-    );
+    next unless $hold->waitingdate;
 
-    my $itemtype = Koha::ItemTypes->find( $item->effective_itemtype );
     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{'subtitle'}       = GetRecordValue(
-        'subtitle',
-        GetMarcBiblio({ biblionumber => $biblio->biblionumber }),
-        $biblio->frameworkcode);
-    if ( $homebranch ne $holdingbranch ) {
-        $getreserv{'dotransfer'} = 1;
-    }
-
-    my $borEmail = $patron->first_valid_email_address;
-
-    if ( $borEmail ) {
-        $getreserv{'borrowermail'}  = $borEmail;
-    }
-
     if ($today > $calcDate) {
         if ($cancelall) {
-            my $res = cancel( $item->itemnumber, $patron->borrowernumber, $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,
 );
 
@@ -187,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) {