Bug 24711: Don't add logout input to login form
[koha-ffzg.git] / acqui / basket.pl
index 02b9eba..d248f11 100755 (executable)
@@ -33,7 +33,9 @@ use C4::Biblio;
 use C4::Items;
 use C4::Suggestions;
 use Koha::Biblios;
+use Koha::Acquisition::Baskets;
 use Koha::Acquisition::Booksellers;
+use Koha::Acquisition::Orders;
 use Koha::Libraries;
 use C4::Letters qw/SendAlerts/;
 use Date::Calc qw/Add_Delta_Days/;
@@ -42,6 +44,8 @@ use Koha::EDI qw( create_edi_order get_edifact_ean );
 use Koha::CsvProfiles;
 use Koha::Patrons;
 
+use Koha::AdditionalFields;
+
 =head1 NAME
 
 basket.pl
@@ -101,7 +105,7 @@ unless (CanUserManageBasket($loggedinuser, $basket, $userflags)) {
         basketno => $basketno,
         basketname => $basket->{basketname},
         booksellerid => $booksellerid,
-        name => $bookseller->name,
+        booksellername => $bookseller->name,
     );
     output_html_with_http_headers $query, $cookie, $template->output;
     exit;
@@ -132,12 +136,12 @@ if ( $op eq 'delete_confirm' ) {
         foreach my $myorder (@orders){
             my $biblionumber = $myorder->{'biblionumber'};
             my $biblio = Koha::Biblios->find( $biblionumber );
-            my $countbiblio = CountBiblioInOrders($biblionumber);
+            my $countbiblio = $biblio->active_orders->count;
             my $ordernumber = $myorder->{'ordernumber'};
-            my $has_subscriptions = $biblio->subscriptions->count;
+            my $cnt_subscriptions = $biblio->subscriptions->count;
             my $itemcount = $biblio->items->count;
             my $error;
-            if ($countbiblio == 0 && $itemcount == 0 && not $has_subscriptions ) {
+            if ($countbiblio == 0 && $itemcount == 0 && not $cnt_subscriptions ) {
                 $error = DelBiblio($myorder->{biblionumber}) }
             else {
                 push @cannotdelbiblios, {biblionumber=> ($myorder->{biblionumber}),
@@ -145,7 +149,7 @@ if ( $op eq 'delete_confirm' ) {
                                          author=> $myorder->{'author'},
                                          countbiblio=> $countbiblio,
                                          itemcount=>$itemcount,
-                                         subscriptions => $has_subscriptions};
+                                         subscriptions => $cnt_subscriptions};
             }
             if ($error) {
                 push @cannotdelbiblios, {biblionumber=> ($myorder->{biblionumber}),
@@ -160,7 +164,7 @@ if ( $op eq 'delete_confirm' ) {
     DelBasket($basketno,);
     $template->param(
         delete_confirmed => 1,
-        name => $bookseller->name,
+        booksellername => $bookseller->name,
         booksellerid => $booksellerid,
     );
 } elsif ( !$bookseller ) {
@@ -170,12 +174,8 @@ if ( $op eq 'delete_confirm' ) {
         -type       => 'text/csv',
         -attachment => 'basket' . $basket->{'basketno'} . '.csv',
     );
-    if ( $query->param('csv_profile') eq 'default'){
-        print GetBasketAsCSV($query->param('basketno'), $query);
-    } else {
-        my $csv_profile_id = $query->param('csv_profile');
-        print  GetBasketAsCSV($query->param('basketno'), $query, $csv_profile_id);
-    }
+    my $csv_profile_id = $query->param('csv_profile');
+    print GetBasketAsCSV( scalar $query->param('basketno'), $query, $csv_profile_id ); # if no csv_profile_id passed, using default rows
     exit;
 } elsif ($op eq 'email') {
     my $err = eval {
@@ -220,13 +220,14 @@ if ( $op eq 'delete_confirm' ) {
     $template->param(
         confirm_close   => "1",
         booksellerid    => $booksellerid,
+        booksellername  => $bookseller->name,
         basketno        => $basket->{'basketno'},
         basketname      => $basket->{'basketname'},
         basketgroupname => $basket->{'basketname'},
     );
     }
 } elsif ($op eq 'reopen') {
-    ReopenBasket($query->param('basketno'));
+    ReopenBasket(scalar $query->param('basketno'));
     print $query->redirect('/cgi-bin/koha/acqui/basket.pl?basketno='.$basket->{'basketno'})
 }
 elsif ( $op eq 'ediorder' ) {
@@ -343,15 +344,15 @@ if ( $op eq 'list' ) {
             $template->param( uncertainprices => 1 );
         }
 
-        $line->{tax_rate} = $line->{tax_rate_on_ordering};
-        $line->{tax_value} = $line->{tax_value_on_ordering};
+        $line->{tax_rate} = $line->{tax_rate_on_ordering} // 0;
+        $line->{tax_value} = $line->{tax_value_on_ordering} // 0;
 
         push @books_loop, $line;
 
         $foot{$$line{tax_rate}}{tax_rate} = $$line{tax_rate};
-        $foot{$$line{tax_rate}}{tax_value} += $$line{tax_value};
+        $foot{$$line{tax_rate}}{tax_value} += get_rounded_price($$line{tax_value});
         $total_tax_value += $$line{tax_value};
-        $foot{$$line{tax_rate}}{quantity}  += $$line{quantity};
+        $foot{$$line{tax_rate}}{quantity}  += get_rounded_price($$line{quantity});
         $total_quantity += $$line{quantity};
         $foot{$$line{tax_rate}}{total_tax_excluded} += $$line{total_tax_excluded};
         $total_tax_excluded += $$line{total_tax_excluded};
@@ -410,7 +411,7 @@ if ( $op eq 'list' ) {
         billingplace         => $basket->{billingplace},
         active               => $bookseller->active,
         booksellerid         => $bookseller->id,
-        name                 => $bookseller->name,
+        booksellername       => $bookseller->name,
         books_loop           => \@books_loop,
         book_foot_loop       => \@book_foot_loop,
         cancelledorders_loop => \@cancelledorders_loop,
@@ -432,6 +433,10 @@ if ( $op eq 'list' ) {
         has_budgets          => $has_budgets,
         duplinbatch          => $duplinbatch,
         csv_profiles         => [ Koha::CsvProfiles->search({ type => 'sql', used_for => 'export_basket' }) ],
+        available_additional_fields => [ Koha::AdditionalFields->search( { tablename => 'aqbasket' } ) ],
+        additional_field_values => { map {
+            $_->field->name => $_->value
+        } Koha::Acquisition::Baskets->find($basketno)->additional_field_values->as_list },
     );
 }
 
@@ -454,14 +459,14 @@ sub get_order_infos {
     $line{basketno}       = $basketno;
     $line{budget_name}    = $budget->{budget_name};
 
-    $line{total_tax_included} = $line{ecost_tax_included} * $line{quantity};
-    $line{total_tax_excluded} = $line{ecost_tax_excluded} * $line{quantity};
+    # If we have an actual cost that should be the total, otherwise use the ecost
+    my $cost_tax_included = $line{unitprice_tax_included} || $line{ecost_tax_included};
+    my $cost_tax_excluded = $line{unitprice_tax_excluded} || $line{ecost_tax_excluded};
+    $line{total_tax_included} = get_rounded_price($cost_tax_included) * $line{quantity};
+    $line{total_tax_excluded} = get_rounded_price($cost_tax_excluded) * $line{quantity};
     $line{tax_value} = $line{tax_value_on_ordering};
     $line{tax_rate} = $line{tax_rate_on_ordering};
 
-    if ( $line{uncertainprice} ) {
-        $line{rrp_tax_excluded} .= ' (Uncertain)';
-    }
     if ( $line{'title'} ) {
         my $volume      = $order->{'volume'};
         my $seriestitle = $order->{'seriestitle'};
@@ -472,22 +477,24 @@ sub get_order_infos {
     my $biblionumber = $order->{'biblionumber'};
     if ( $biblionumber ) { # The biblio still exists
         my $biblio = Koha::Biblios->find( $biblionumber );
-        my $countbiblio = CountBiblioInOrders($biblionumber);
+        my $countbiblio = $biblio->active_orders->count;
+
         my $ordernumber = $order->{'ordernumber'};
-        my $has_subscriptions = $biblio->subscriptions->count;
+        my $cnt_subscriptions = $biblio->subscriptions->count;
         my $itemcount   = $biblio->items->count;
         my $holds_count = $biblio->holds->count;
-        my @items = GetItemnumbersFromOrder( $ordernumber );
-        my $itemholds  = $biblio->holds->search({ itemnumber => { -in => \@items } })->count;
+        my $order = Koha::Acquisition::Orders->find($ordernumber); # FIXME We should certainly do that at the beginning of this sub
+        my $items = $order->items;
+        my $itemholds  = $biblio->holds->search({ itemnumber => { -in => [ $items->get_column('itemnumber') ] } })->count;
 
         # 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 && !($has_subscriptions) && !($holds_count);
-        $line{items}                = ($itemcount) - (scalar @items);
+        $line{can_del_bib}          = 1 if $countbiblio <= 1 && $itemcount == $items->count && !($cnt_subscriptions) && !($holds_count);
+        $line{items}                = $itemcount - $items->count;
         $line{left_item}            = 1 if $line{items} >= 1;
         $line{left_biblio}          = 1 if $countbiblio > 1;
         $line{biblios}              = $countbiblio - 1;
-        $line{left_subscription}    = 1 if $has_subscriptions;
-        $line{subscriptions}        = $has_subscriptions;
+        $line{left_subscription}    = 1 if $cnt_subscriptions;
+        $line{subscriptions}        = $cnt_subscriptions;
         ($holds_count >= 1) ? $line{left_holds} = 1 : $line{left_holds} = 0;
         $line{left_holds_on_order}  = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
         $line{holds}                = $holds_count;
@@ -503,6 +510,7 @@ sub get_order_infos {
     foreach my $key (qw(transferred_from transferred_to)) {
         if ($line{$key}) {
             my $order = GetOrder($line{$key});
+            my $basket = GetBasket($order->{basketno});
             my $bookseller = Koha::Acquisition::Booksellers->find( $basket->{booksellerid} );
             $line{$key} = {
                 order => $order,