Bug 30933: Adjust pref description, include ListOwnerDesignated
[srvgit] / acqui / addorder.pl
index 049d8ad..318b148 100755 (executable)
@@ -119,15 +119,23 @@ if it is an order from an existing suggestion : the id of this suggestion.
 
 use Modern::Perl;
 use CGI qw ( -utf8 );
-use C4::Auth;           # get_template_and_user
-use C4::Acquisition;    # ModOrder
-use C4::Suggestions;    # ModStatus
-use C4::Biblio;         # AddBiblio TransformKohaToMarc
-use C4::Budgets;
-use C4::Items;
-use C4::Output;
-use Koha::Acquisition::Currencies;
+use JSON qw ( to_json encode_json );
+use C4::Auth qw( get_template_and_user );
+use C4::Acquisition qw( FillWithDefaultValues populate_order_with_prices ModOrder ModOrderUsers );
+use C4::Suggestions qw( ModSuggestion );
+use C4::Biblio qw(
+    AddBiblio
+    GetMarcFromKohaField
+    TransformHtmlToXml
+    TransformKohaToMarc
+);
+use C4::Budgets qw( GetBudget GetBudgetSpent GetBudgetOrdered );
+use C4::Items qw( AddItemFromMarc );
+use C4::Output qw( output_html_with_http_headers );
+use C4::Log qw( logaction );
+use Koha::Acquisition::Currencies qw( get_active );
 use Koha::Acquisition::Orders;
+use Koha::Acquisition::Baskets;
 use C4::Barcodes;
 
 ### "-------------------- addorder.pl ----------"
@@ -135,7 +143,7 @@ use C4::Barcodes;
 # FIXME: This needs to do actual error checking and possibly return user to the same form,
 # not just blindly call C4 functions and print a redirect.  
 
-my $input = new CGI;
+my $input = CGI->new;
 my $use_ACQ_framework = $input->param('use_ACQ_framework');
 
 # Check if order total amount exceed allowed budget
@@ -216,7 +224,6 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
         query           => $input,
         type            => "intranet",
         flagsrequired   => { acquisition => 'order_manage' },
-        debug           => 1,
     }
 );
 
@@ -230,6 +237,23 @@ my $user     = $input->remote_user;
 my $basketno = $$orderinfo{basketno};
 my $basket   = Koha::Acquisition::Baskets->find($basketno);
 
+# Order related fields we're going to log
+my @log_order_fields = (
+    'quantity',
+    'listprice',
+    'unitprice',
+    'unitprice_tax_excluded',
+    'unitprice_tax_included',
+    'rrp',
+    'replacementprice',
+    'rrp_tax_excluded',
+    'rrp_tax_included',
+    'ecost',
+    'ecost_tax_excluded',
+    'ecost_tax_included',
+    'tax_rate_on_ordering'
+);
+
 # create, modify or delete biblio
 # create if $quantity>0 and $existing='no'
 # modify if $quantity>0 and $existing='yes'
@@ -294,9 +318,35 @@ if ( $basket->{is_standing} || $orderinfo->{quantity} ne '0' ) {
     my $order = Koha::Acquisition::Order->new($orderinfo);
     if ( $orderinfo->{ordernumber} ) {
         ModOrder($orderinfo);
+        # Log the order modification
+        if (C4::Context->preference("AcquisitionLog")) {
+            my $infos = {};
+            foreach my $field(@log_order_fields) {
+                $infos->{$field} = $orderinfo->{$field};
+            }
+            logaction(
+                'ACQUISITIONS',
+                'MODIFY_ORDER',
+                $orderinfo->{ordernumber},
+                encode_json($infos)
+            );
+        }
     }
     else { # else, it's a new line
         $order->store;
+        # Log the order creation
+        if (C4::Context->preference("AcquisitionLog")) {
+            my $infos = {};
+            foreach my $field(@log_order_fields) {
+                $infos->{$field} = $orderinfo->{$field};
+            }
+            logaction(
+                'ACQUISITIONS',
+                'CREATE_ORDER',
+                $order->ordernumber,
+                encode_json($infos)
+            );
+        }
     }
     my $order_users_ids = $input->param('users_ids');
     my @order_users = split( /:/, $order_users_ids );
@@ -310,8 +360,6 @@ if ( $basket->{is_standing} || $orderinfo->{quantity} ne '0' ) {
         my @field_values = $input->multi_param('field_value');
         my @serials      = $input->multi_param('serial');
         my @itemid       = $input->multi_param('itemid');
-        my @ind_tag      = $input->multi_param('ind_tag');
-        my @indicator    = $input->multi_param('indicator');
         #Rebuilding ALL the data for items into a hash
         # parting them on $itemid.
 
@@ -325,15 +373,13 @@ if ( $basket->{is_standing} || $orderinfo->{quantity} ne '0' ) {
         push @{$itemhash{$itemid[$i]}->{'tags'}},$tags[$i];
         push @{$itemhash{$itemid[$i]}->{'subfields'}},$subfields[$i];
             push @{$itemhash{$itemid[$i]}->{'field_values'}},$field_values[$i];
-            push @{$itemhash{$itemid[$i]}->{'ind_tag'}},$ind_tag[$i];
-            push @{$itemhash{$itemid[$i]}->{'indicator'}},$indicator[$i];
         }
         foreach my $item (keys %itemhash){
             my $xml = TransformHtmlToXml( $itemhash{$item}->{'tags'},
                                     $itemhash{$item}->{'subfields'},
                                     $itemhash{$item}->{'field_values'},
-                                    $itemhash{$item}->{'indicator'},
-                                    $itemhash{$item}->{'ind_tag'},
+                                    undef,
+                                    undef,
                                     'ITEM');
             my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
             my ($barcodefield,$barcodesubfield) = GetMarcFromKohaField('items.barcode');
@@ -360,6 +406,16 @@ if ( $basket->{is_standing} || $orderinfo->{quantity} ne '0' ) {
 
 }
 
+if (C4::Context->preference("AcquisitionLog") && $basketno) {
+    my $modified = Koha::Acquisition::Baskets->find( $basketno );
+    logaction(
+        'ACQUISITIONS',
+        'MODIFY_BASKET',
+        $basketno,
+        to_json($modified->unblessed)
+    );
+}
+
 my $booksellerid=$$orderinfo{booksellerid};
 if (my $import_batch_id=$$orderinfo{import_batch_id}) {
     print $input->redirect("/cgi-bin/koha/acqui/addorderiso2709.pl?import_batch_id=$import_batch_id&basketno=$basketno&booksellerid=$booksellerid");