Bug 12556: reserves/request.pl: Reuse code from Koha::Hold
[srvgit] / acqui / basket.pl
index 0719618..7d16879 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
@@ -81,12 +85,13 @@ our ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
         template_name   => "acqui/basket.tt",
         query           => $query,
         type            => "intranet",
-        authnotrequired => 0,
         flagsrequired   => { acquisition => 'order_manage' },
         debug           => 1,
     }
 );
 
+my $logged_in_patron = Koha::Patrons->find( $loggedinuser );
+
 our $basket = GetBasket($basketno);
 $booksellerid = $basket->{booksellerid} unless $booksellerid;
 my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
@@ -119,6 +124,10 @@ $template->param( skip_confirm_reopen => 1) if $confirm_pref eq '2';
 my @messages;
 
 if ( $op eq 'delete_confirm' ) {
+
+    output_and_exit( $query, $cookie, $template, 'insufficient_permission' )
+      unless $logged_in_patron->has_permission( { acquisition => 'delete_baskets' } );
+
     my $basketno = $query->param('basketno');
     my $delbiblio = $query->param('delbiblio');
     my @orders = GetOrders($basketno);
@@ -132,7 +141,7 @@ 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 $cnt_subscriptions = $biblio->subscriptions->count;
             my $itemcount = $biblio->items->count;
@@ -170,12 +179,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 {
@@ -199,8 +204,7 @@ if ( $op eq 'delete_confirm' ) {
         # if requested, create basket group, close it and attach the basket
         if ($query->param('createbasketgroup')) {
             my $branchcode;
-            if(C4::Context->userenv and C4::Context->userenv->{'branch'}
-              and C4::Context->userenv->{'branch'} ne "NO_LIBRARY_SET") {
+            if(C4::Context->userenv and C4::Context->userenv->{'branch'}) {
                 $branchcode = C4::Context->userenv->{'branch'};
             }
             my $basketgroupid = NewBasketgroup( { name => $basket->{basketname},
@@ -344,15 +348,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};
@@ -380,9 +384,6 @@ if ( $op eq 'list' ) {
     my $budgets = GetBudgetHierarchy;
     my $has_budgets = 0;
     foreach my $r (@{$budgets}) {
-        if (!defined $r->{budget_amount} || $r->{budget_amount} == 0) {
-            next;
-        }
         next unless (CanUserUseBudget($loggedinuser, $r, $userflags));
 
         $has_budgets = 1;
@@ -433,6 +434,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 },
     );
 }
 
@@ -455,14 +460,16 @@ 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
+    $line{unitprice_tax_included} += 0;
+    $line{unitprice_tax_excluded} += 0;
+    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'};
@@ -473,17 +480,19 @@ 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 $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 && !($cnt_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;
@@ -493,6 +502,7 @@ sub get_order_infos {
         $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};
+        $line{order_object}         = $order;
     }
 
 
@@ -537,8 +547,7 @@ sub edi_close_and_order {
         if ( $query->param('createbasketgroup') ) {
             my $branchcode;
             if (    C4::Context->userenv
-                and C4::Context->userenv->{'branch'}
-                and C4::Context->userenv->{'branch'} ne "NO_LIBRARY_SET" )
+                and C4::Context->userenv->{'branch'} )
             {
                 $branchcode = C4::Context->userenv->{'branch'};
             }