Bug 17600: Standardize our EXPORT_OK
[srvgit] / acqui / parcel.pl
index 22a036f..d00d9bd 100755 (executable)
@@ -28,7 +28,7 @@ parcel.pl
 =head1 DESCRIPTION
 
 This script shows all orders receipt or pending for a given supplier.
-It allows to write an order as 'received' when he arrives.
+It allows to write an order as 'received' when it arrives.
 
 =head1 CGI PARAMETERS
 
@@ -54,35 +54,28 @@ To filter the results list on this given date.
 
 =cut
 
-use strict;
-use warnings;
+use Modern::Perl;
 
-use C4::Auth;
-use C4::Acquisition;
-use C4::Budgets;
-use C4::Biblio;
-use C4::Items;
+use C4::Auth qw( get_template_and_user );
+use C4::Acquisition qw( CancelReceipt GetInvoice GetInvoiceDetails get_rounded_price );
+use C4::Budgets qw( _round GetBudget GetBudgetByOrderNumber GetBudgetName );
 use CGI qw ( -utf8 );
-use C4::Output;
-use C4::Suggestions;
-use C4::Reserves qw/GetReservesFromBiblionumber/;
+use C4::Output qw( output_html_with_http_headers );
+use C4::Suggestions qw( GetSuggestion GetSuggestionInfoFromBiblionumber GetSuggestionInfo );
 
+use Koha::Acquisition::Baskets;
 use Koha::Acquisition::Bookseller;
+use Koha::Acquisition::Orders;
 use Koha::Biblios;
-use Koha::DateUtils;
 
-use JSON;
 
-my $input=new CGI;
-my $sticky_filters = $input->param('sticky_filters') || 0;
+my $input = CGI->new;
 
 my ($template, $loggedinuser, $cookie)
     = get_template_and_user({template_name => "acqui/parcel.tt",
                  query => $input,
                  type => "intranet",
-                 authnotrequired => 0,
                  flagsrequired => {acquisition => 'order_receive'},
-                 debug => 1,
 });
 
 my $op = $input->param('op') // '';
@@ -125,6 +118,7 @@ my $subtotal_for_funds;
 for my $order ( @orders ) {
     $order->{'unitprice'} += 0;
 
+    my $order_object = Koha::Acquisition::Orders->find($order->{ordernumber});
     if ( $bookseller->invoiceincgst ) {
         $order->{ecost}     = $order->{ecost_tax_included};
         $order->{unitprice} = $order->{unitprice_tax_included};
@@ -134,24 +128,26 @@ for my $order ( @orders ) {
         $order->{unitprice} = $order->{unitprice_tax_excluded};
     }
 
-    $order->{total} = $order->{unitprice} * $order->{quantity};
+    $order->{total} = get_rounded_price($order->{unitprice}) * $order->{quantity};
 
     my %line = %{ $order };
     $line{invoice} = $invoice->{invoicenumber};
-    $line{holds} = 0;
-    my @itemnumbers = GetItemnumbersFromOrder( $order->{ordernumber} );
-    for my $itemnumber ( @itemnumbers ) {
-        my $holds = GetReservesFromBiblionumber({ biblionumber => $line{biblionumber}, itemnumber => $itemnumber });
-        $line{holds} += scalar( @$holds );
-    }
+    my @itemnumbers = $order_object->items->get_column('itemnumber');
+    my $biblio = Koha::Biblios->find( $line{biblionumber} );
+    $line{total_holds} = $biblio ? $biblio->holds->count : 0;
+    $line{item_holds} = $biblio ? $biblio->current_holds->search(
+        {
+            itemnumber => { -in => \@itemnumbers },
+        }
+    )->count : 0;
     $line{budget} = GetBudgetByOrderNumber( $line{ordernumber} );
 
     $line{tax_value} = $line{tax_value_on_receiving};
     $line{tax_rate} = $line{tax_rate_on_receiving};
     $foot{$line{tax_rate}}{tax_rate} = $line{tax_rate};
     $foot{$line{tax_rate}}{tax_value} += $line{tax_value};
-    $total_tax_excluded += $line{unitprice_tax_excluded} * $line{quantity};
-    $total_tax_included += $line{unitprice_tax_included} * $line{quantity};
+    $total_tax_excluded += get_rounded_price($line{unitprice_tax_excluded}) * $line{quantity};
+    $total_tax_included += get_rounded_price($line{unitprice_tax_included}) * $line{quantity};
 
     my $suggestion   = GetSuggestionInfoFromBiblionumber($line{biblionumber});
     $line{suggestionid}         = $suggestion->{suggestionid};
@@ -170,130 +166,25 @@ for my $order ( @orders ) {
     my $budget_name = GetBudgetName( $line{budget_id} );
     $line{budget_name} = $budget_name;
 
-    $subtotal_for_funds->{ $line{budget_name} }{ecost} += $order->{ecost} * $order->{quantity};
+    $subtotal_for_funds->{ $line{budget_name} }{ecost} += get_rounded_price($order->{ecost}) * $order->{quantity};
     $subtotal_for_funds->{ $line{budget_name} }{unitprice} += $order->{total};
 
     push @loop_received, \%line;
 }
 push @book_foot_loop, map { $_ } values %foot;
 
-my @loop_orders = ();
-unless( defined $invoice->{closedate} ) {
-    my $pendingorders;
-    if ( $op eq "search" or $sticky_filters ) {
-        my ( $search, $ean, $basketname, $orderno, $basketgroupname );
-        if ( $sticky_filters ) {
-            $search = $input->cookie("filter_parcel_summary");
-            $ean = $input->cookie("filter_parcel_ean");
-            $basketname = $input->cookie("filter_parcel_basketname");
-            $orderno = $input->cookie("filter_parcel_orderno");
-            $basketgroupname = $input->cookie("filter_parcel_basketgroupname");
-        } else {
-            $search   = $input->param('summaryfilter') || '';
-            $ean      = $input->param('eanfilter') || '';
-            $basketname = $input->param('basketfilter') || '';
-            $orderno  = $input->param('orderfilter') || '';
-            $basketgroupname = $input->param('basketgroupnamefilter') || '';
-        }
-        $pendingorders = SearchOrders({
-            booksellerid => $booksellerid,
-            basketname => $basketname,
-            ordernumber => $orderno,
-            search => $search,
-            ean => $ean,
-            basketgroupname => $basketgroupname,
-            pending => 1,
-            ordered => 1,
-        });
-        $template->param(
-            summaryfilter => $search,
-            eanfilter => $ean,
-            basketfilter => $basketname,
-            orderfilter => $orderno,
-            basketgroupnamefilter => $basketgroupname,
-        );
-    }else{
-        $pendingorders = SearchOrders({
-            booksellerid => $booksellerid,
-            ordered => 1
-        });
-    }
-    my $countpendings = scalar @$pendingorders;
-
-    for (my $i = 0 ; $i < $countpendings ; $i++) {
-        my $order = $pendingorders->[$i];
-
-        if ( $bookseller->invoiceincgst ) {
-            $order->{ecost} = $order->{ecost_tax_included};
-        } else {
-            $order->{ecost} = $order->{ecost_tax_excluded};
-        }
-        $order->{total} = $order->{ecost} * $order->{quantity};
-
-        my %line = %$order;
-
-        $line{invoice} = $invoice;
-        $line{booksellerid} = $booksellerid;
-
-        my $biblionumber = $line{'biblionumber'};
-        my $biblio = Koha::Biblios->find( $biblionumber );
-        my $countbiblio = CountBiblioInOrders($biblionumber);
-        my $ordernumber = $line{'ordernumber'};
-        my @subscriptions = GetSubscriptionsId ($biblionumber);
-        my $itemcount = GetItemsCount($biblionumber);
-        my $holds_count = $biblio->holds->count;
-        my @items = GetItemnumbersFromOrder( $ordernumber );
-        my $itemholds;
-        foreach my $item (@items){
-            my $nb = GetItemHolds($biblionumber, $item);
-            if ($nb){
-                $itemholds += $nb;
-            }
-        }
-
-        my $suggestion   = GetSuggestionInfoFromBiblionumber($line{biblionumber});
-        $line{suggestionid}         = $suggestion->{suggestionid};
-        $line{surnamesuggestedby}   = $suggestion->{surnamesuggestedby};
-        $line{firstnamesuggestedby} = $suggestion->{firstnamesuggestedby};
-
-        # if the biblio is not in other orders and if there is no items elsewhere and no subscriptions and no holds we can then show the link "Delete order and Biblio" see bug 5680
-        $line{can_del_bib}          = 1 if $countbiblio <= 1 && $itemcount == scalar @items && !(@subscriptions) && !($holds_count);
-        $line{items}                = ($itemcount) - (scalar @items);
-        $line{left_item}            = 1 if $line{items} >= 1;
-        $line{left_biblio}          = 1 if $countbiblio > 1;
-        $line{biblios}              = $countbiblio - 1;
-        $line{left_subscription}    = 1 if scalar @subscriptions >= 1;
-        $line{subscriptions}        = scalar @subscriptions;
-        $line{left_holds}           = ($holds_count >= 1) ? 1 : 0;
-        $line{left_holds_on_order}  = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
-        $line{holds}                = $holds_count;
-        $line{holds_on_order}       = $itemholds?$itemholds:$holds_count if $line{left_holds_on_order};
-
-        my $budget_name = GetBudgetName( $line{budget_id} );
-        $line{budget_name} = $budget_name;
-
-        push @loop_orders, \%line;
-    }
-
-    $template->param(
-        loop_orders  => \@loop_orders,
-    );
-}
-
 $template->param(
     invoiceid             => $invoice->{invoiceid},
     invoice               => $invoice->{invoicenumber},
     invoiceclosedate      => $invoice->{closedate},
-    datereceived          => dt_from_string,
+    shipmentdate         => $invoice->{shipmentdate},
     name                  => $bookseller->name,
     booksellerid          => $bookseller->id,
     loop_received         => \@loop_received,
-    loop_orders           => \@loop_orders,
     book_foot_loop        => \@book_foot_loop,
     (uc(C4::Context->preference("marcflavour"))) => 1,
     total_tax_excluded    => $total_tax_excluded,
     total_tax_included    => $total_tax_included,
     subtotal_for_funds    => $subtotal_for_funds,
-    sticky_filters       => $sticky_filters,
 );
 output_html_with_http_headers $input, $cookie, $template->output;