Bug 27421: Add tests
[koha-ffzg.git] / acqui / cancelorder.pl
index 84d0348..50165c5 100755 (executable)
@@ -32,9 +32,9 @@ and add possibility to indicate a reason for cancellation
 use Modern::Perl;
 
 use CGI;
-use C4::Auth;
-use C4::Output;
-use C4::Acquisition;
+use C4::Auth qw( get_template_and_user );
+use C4::Output qw( output_html_with_http_headers );
+use C4::Log qw(logaction);
 use Koha::Acquisition::Baskets;
 
 my $input = CGI->new;
@@ -43,7 +43,6 @@ my ($template, $loggedinuser, $cookie, $flags) = get_template_and_user( {
     query           => $input,
     type            => 'intranet',
     flagsrequired   => { 'acquisition' => 'order_manage' },
-    debug           => 1,
 } );
 
 my $action = $input->param('action');
@@ -52,16 +51,33 @@ my $biblionumber = $input->param('biblionumber');
 my $basketno = $input->param('basketno');
 my $basket = Koha::Acquisition::Baskets->find({ basketno => $basketno }, { prefetch => 'booksellerid' });
 my $referrer = $input->param('referrer') || $input->referer;
-my $del_biblio = $input->param('del_biblio') ? 1 : 0;
+my $delete_biblio = $input->param('del_biblio') ? 1 : 0;
 
-if($action and $action eq "confirmcancel") {
+if( $action and $action eq "confirmcancel" ) {
     my $reason = $input->param('reason');
-    my $error = DelOrder($biblionumber, $ordernumber, $del_biblio, $reason);
+    my $order  = Koha::Acquisition::Orders->find($ordernumber);
+    my @messages;
+    if( !$order ) {
+        push @messages, Koha::Object::Message->new({ message => 'error_order_not_found', type => 'error' });
+        $template->param( error_order_not_found => 1 );
+    } elsif( $order->datecancellationprinted ) {
+        push @messages, Koha::Object::Message->new({ message => 'error_order_already_cancelled', type => 'error' });
+        $template->param( error_order_already_cancelled => 1 );
+    } else {
+        $order->cancel({ reason => $reason, delete_biblio => $delete_biblio });
+        @messages = @{ $order->object_messages };
+    }
 
-    if($error) {
-        $template->param(error_delitem => 1) if $error->{'delitem'};
-        $template->param(error_delbiblio => 1) if $error->{'delbiblio'};
+    if ( scalar @messages > 0 ) {
+        $template->param( error_delitem => 1 )
+            if $messages[0]->message eq 'error_delitem';
+        $template->param( error_delbiblio => 1 )
+            if $messages[0]->message eq 'error_delbiblio';
     } else {
+        # Log the cancellation of the order
+        if (C4::Context->preference("AcquisitionLog")) {
+            logaction('ACQUISITIONS', 'CANCEL_ORDER', $ordernumber);
+        }
         $template->param(success_cancelorder => 1);
     }
     $template->param(confirmcancel => 1);
@@ -72,7 +88,7 @@ $template->param(
     biblionumber => $biblionumber,
     basket => $basket,
     referrer => $referrer,
-    del_biblio => $del_biblio,
+    del_biblio => $delete_biblio,
 );
 
 output_html_with_http_headers $input, $cookie, $template->output;