Bug 15900 - Remove use of recordpayment in ProcessOfflinePayment
[koha.git] / acqui / basket.pl
index cfa803b..f3bf36a 100755 (executable)
@@ -28,14 +28,16 @@ use C4::Output;
 use CGI qw ( -utf8 );
 use C4::Acquisition;
 use C4::Budgets;
-use C4::Branch;
 use C4::Contract;
 use C4::Debug;
 use C4::Biblio;
 use C4::Members qw/GetMember/;  #needed for permissions checking for changing basketgroup of a basket
 use C4::Items;
 use C4::Suggestions;
+use Koha::Libraries;
 use Date::Calc qw/Add_Delta_Days/;
+use Koha::Database;
+use Koha::EDI qw( create_edi_order get_edifact_ean );
 
 =head1 NAME
 
@@ -67,7 +69,9 @@ the supplier this script have to display the basket.
 
 my $query        = new CGI;
 our $basketno     = $query->param('basketno');
+my $ean          = $query->param('ean');
 my $booksellerid = $query->param('booksellerid');
+my $duplinbatch =  $query->param('duplinbatch');
 
 my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
     {
@@ -83,6 +87,10 @@ my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
 my $basket = GetBasket($basketno);
 $booksellerid = $basket->{booksellerid} unless $booksellerid;
 my $bookseller = Koha::Acquisition::Bookseller->fetch({ id => $booksellerid });
+my $schema = Koha::Database->new()->schema();
+my $rs = $schema->resultset('VendorEdiAccount')->search(
+    { vendor_id => $booksellerid, } );
+$template->param( ediaccount => ($rs->count > 0));
 
 unless (CanUserManageBasket($loggedinuser, $basket, $userflags)) {
     $template->param(
@@ -195,6 +203,9 @@ if ( $op eq 'delete_confirm' ) {
 } elsif ($op eq 'reopen') {
     ReopenBasket($query->param('basketno'));
     print $query->redirect('/cgi-bin/koha/acqui/basket.pl?basketno='.$basket->{'basketno'})
+}
+elsif ( $op eq 'ediorder' ) {
+    edi_close_and_order()
 } elsif ( $op eq 'mod_users' ) {
     my $basketusers_ids = $query->param('users_ids');
     my @basketusers = split( /:/, $basketusers_ids );
@@ -225,6 +236,7 @@ if ( $op eq 'delete_confirm' ) {
                 exit 1;
             }
         }
+
         if (!defined $basket->{branch} or $basket->{branch} eq $userenv->{branch}) {
             push @branches_loop, {
                 branchcode => $userenv->{branch},
@@ -234,20 +246,17 @@ if ( $op eq 'delete_confirm' ) {
         }
     } else {
         # get branches
-        my $branches = C4::Branch::GetBranches;
-        my @branchcodes = sort {
-            $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname}
-        } keys %$branches;
-        foreach my $branch (@branchcodes) {
+        my $branches = Koha::Libraries->search( {}, { order_by => ['branchname'] } )->unblessed;
+        foreach my $branch (@$branches) {
             my $selected = 0;
             if (defined $basket->{branch}) {
-                $selected = 1 if $branch eq $basket->{branch};
+                $selected = 1 if $branch->{branchcode} eq $basket->{branch};
             } else {
-                $selected = 1 if $branch eq C4::Context->userenv->{branch};
+                $selected = 1 if $branch->{branchcode} eq C4::Context->userenv->{branch};
             }
             push @branches_loop, {
-                branchcode => $branch,
-                branchname => $branches->{$branch}->{branchname},
+                branchcode => $branch->{branchcode},
+                branchname => $branch->{branchname},
                 selected => $selected
             };
         }
@@ -289,9 +298,7 @@ if ( $op eq 'delete_confirm' ) {
         push @basketusers, $basketuser if $basketuser;
     }
 
-    #to get active currency
-    my $cur = GetCurrency();
-
+    my $active_currency = Koha::Acquisition::Currencies->get_active;
 
     my @orders = GetOrders( $basketno );
     my @books_loop;
@@ -339,8 +346,6 @@ if ( $op eq 'delete_confirm' ) {
 
     if ($basket->{basketgroupid}){
         $basketgroup = GetBasketgroup($basket->{basketgroupid});
-        $basketgroup->{deliveryplacename} = C4::Branch::GetBranchName( $basketgroup->{deliveryplace} );
-        $basketgroup->{billingplacename} = C4::Branch::GetBranchName( $basketgroup->{billingplace} );
     }
     my $borrower= GetMember('borrowernumber' => $loggedinuser);
     my $budgets = GetBudgetHierarchy;
@@ -357,8 +362,9 @@ if ( $op eq 'delete_confirm' ) {
 
     $template->param(
         basketno             => $basketno,
+        basket               => $basket,
         basketname           => $basket->{'basketname'},
-        basketbranchname     => C4::Branch::GetBranchName($basket->{branch}),
+        basketbranchcode     => $basket->{branch},
         basketnote           => $basket->{note},
         basketbooksellernote => $basket->{booksellernote},
         basketcontractno     => $basket->{contractnumber},
@@ -371,8 +377,9 @@ if ( $op eq 'delete_confirm' ) {
         users                => \@basketusers,
         closedate            => $basket->{closedate},
         estimateddeliverydate=> $estimateddeliverydate,
-        deliveryplace        => C4::Branch::GetBranchName( $basket->{deliveryplace} ),
-        billingplace         => C4::Branch::GetBranchName( $basket->{billingplace} ),
+        is_standing          => $basket->{is_standing},
+        deliveryplace        => $basket->{deliveryplace},
+        billingplace         => $basket->{billingplace},
         active               => $bookseller->{'active'},
         booksellerid         => $bookseller->{'id'},
         name                 => $bookseller->{'name'},
@@ -383,13 +390,19 @@ if ( $op eq 'delete_confirm' ) {
         total_gste           => sprintf( "%.2f", $total_gste ),
         total_gsti           => sprintf( "%.2f", $total_gsti ),
         total_gstvalue       => sprintf( "%.2f", $total_gstvalue ),
-        currency             => $cur->{'currency'},
+        currency             => $active_currency->currency,
         listincgst           => $bookseller->{listincgst},
         basketgroups         => $basketgroups,
         basketgroup          => $basketgroup,
         grouped              => $basket->{basketgroupid},
-        unclosable           => @orders ? 0 : 1, 
+        # The double negatives and booleans here mean:
+        # "A basket cannot be closed if there are no orders in it or it's a standing order basket."
+        #
+        # (The template has another implicit restriction that the order cannot be closed if there
+        # are any orders with uncertain prices.)
+        unclosable           => @orders ? $basket->{is_standing} : 1,
         has_budgets          => $has_budgets,
+        duplinbatch          => $duplinbatch,
     );
 }
 
@@ -400,10 +413,12 @@ sub get_order_infos {
     if ( !defined $order->{quantityreceived} ) {
         $order->{quantityreceived} = 0;
     }
-    my $budget = GetBudget( $order->{'budget_id'} );
+    my $budget = GetBudget($order->{budget_id});
+    my $basket = GetBasket($order->{basketno});
 
     my %line = %{ $order };
-    $line{order_received} = ( $qty == $order->{'quantityreceived'} );
+    # Don't show unreceived standing orders as received
+    $line{order_received} = ( $qty == $order->{'quantityreceived'} && ( $basket->{is_standing} ? $qty : 1 ) );
     $line{basketno}       = $basketno;
     $line{budget_name}    = $budget->{budget_name};
 
@@ -415,8 +430,6 @@ sub get_order_infos {
         my $seriestitle = $order->{'seriestitle'};
         $line{'title'} .= " / $seriestitle" if $seriestitle;
         $line{'title'} .= " / $volume"      if $volume;
-    } else {
-        $line{'title'} = "Deleted bibliographic notice, can't find title.";
     }
 
     my $biblionumber = $order->{'biblionumber'};
@@ -455,7 +468,6 @@ 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::Bookseller->fetch({ id => $basket->{booksellerid} });
             $line{$key} = {
                 order => $order,
@@ -470,3 +482,70 @@ sub get_order_infos {
 }
 
 output_html_with_http_headers $query, $cookie, $template->output;
+
+
+sub edi_close_and_order {
+    my $confirm = $query->param('confirm') || $confirm_pref eq '2';
+    if ($confirm) {
+            my $edi_params = {
+                basketno => $basketno,
+                ean    => $ean,
+            };
+            if ( $basket->{branch} ) {
+                $edi_params->{branchcode} = $basket->{branch};
+            }
+            if ( create_edi_order($edi_params) ) {
+                #$template->param( edifile => 1 );
+            }
+        CloseBasket($basketno);
+
+        # 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" )
+            {
+                $branchcode = C4::Context->userenv->{'branch'};
+            }
+            my $basketgroupid = NewBasketgroup(
+                {
+                    name          => $basket->{basketname},
+                    booksellerid  => $booksellerid,
+                    deliveryplace => $branchcode,
+                    billingplace  => $branchcode,
+                    closed        => 1,
+                }
+            );
+            ModBasket(
+                {
+                    basketno      => $basketno,
+                    basketgroupid => $basketgroupid
+                }
+            );
+            print $query->redirect(
+"/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=$booksellerid&closed=1"
+            );
+        }
+        else {
+            print $query->redirect(
+                "/cgi-bin/koha/acqui/booksellers.pl?booksellerid=$booksellerid"
+            );
+        }
+        exit;
+    }
+    else {
+        $template->param(
+            edi_confirm     => 1,
+            booksellerid    => $booksellerid,
+            basketno        => $basket->{basketno},
+            basketname      => $basket->{basketname},
+            basketgroupname => $basket->{basketname},
+        );
+        if ($ean) {
+            $template->param( ean => $ean );
+        }
+
+    }
+    return;
+}