RFID: add title to page
[koha_ffzg] / Koha / EDI.pm
index 26f05e1..0e632c9 100644 (file)
@@ -35,6 +35,9 @@ use Koha::Edifact::Order;
 use Koha::Edifact;
 use Log::Log4perl;
 use Text::Unidecode;
+use Koha::Plugins::Handler;
+use Koha::Acquisition::Baskets;
+use Koha::Acquisition::Booksellers;
 
 our $VERSION = 1.1;
 our @EXPORT_OK =
@@ -46,7 +49,6 @@ sub create_edi_order {
     my $ean        = $parameters->{ean};
     my $branchcode = $parameters->{branchcode};
     my $noingest   = $parameters->{noingest};
-    $ean ||= C4::Context->preference('EDIfactEAN');
     if ( !$basketno || !$ean ) {
         carp 'create_edi_order called with no basketno or ean';
         return;
@@ -79,6 +81,16 @@ sub create_edi_order {
     my $ean_obj =
       $schema->resultset('EdifactEan')->search($ean_search_keys)->single;
 
+    # If no branch specific each can be found, look for a default ean
+    unless ($ean_obj) {
+        $ean_obj = $schema->resultset('EdifactEan')->search(
+            {
+                ean        => $ean,
+                branchcode => undef,
+            }
+        )->single;
+    }
+
     my $dbh     = C4::Context->dbh;
     my $arr_ref = $dbh->selectcol_arrayref(
 'select id from edifact_messages where basketno = ? and message_type = \'QUOTE\'',
@@ -86,18 +98,31 @@ sub create_edi_order {
     );
     my $response = @{$arr_ref} ? 1 : 0;
 
-    my $edifact = Koha::Edifact::Order->new(
-        {
-            orderlines  => \@orderlines,
-            vendor      => $vendor,
-            ean         => $ean_obj,
-            is_response => $response,
-        }
-    );
-    if ( !$edifact ) {
-        return;
+    my $edifact_order_params = {
+        orderlines  => \@orderlines,
+        vendor      => $vendor,
+        ean         => $ean_obj,
+        is_response => $response,
+    };
+
+    my $edifact;
+    if ( $vendor->plugin ) {
+        $edifact = Koha::Plugins::Handler->run(
+            {
+                class  => $vendor->plugin,
+                method => 'edifact_order',
+                params => {
+                    params => $edifact_order_params,
+                }
+            }
+        );
+    }
+    else {
+        $edifact = Koha::Edifact::Order->new($edifact_order_params);
     }
 
+    return unless $edifact;
+
     my $order_file = $edifact->encode();
 
     # ingest result
@@ -185,8 +210,25 @@ sub process_invoice {
     my $schema = Koha::Database->new()->schema();
     my $logger = Log::Log4perl->get_logger();
     my $vendor_acct;
-    my $edi =
+
+    my $plugin = $invoice_message->edi_acct()->plugin();
+    my $edi_plugin;
+    if ( $plugin ) {
+        $edi_plugin = Koha::Plugins::Handler->run(
+            {
+                class  => $plugin,
+                method => 'edifact',
+                params => {
+                    invoice_message => $invoice_message,
+                    transmission => $invoice_message->raw_msg,
+                }
+            }
+        );
+    }
+
+    my $edi = $edi_plugin ||
       Koha::Edifact->new( { transmission => $invoice_message->raw_msg, } );
+
     my $messages = $edi->message_array();
 
     if ( @{$messages} ) {
@@ -514,11 +556,11 @@ sub quote_item {
     my ( $item, $quote, $basketno ) = @_;
 
     my $schema = Koha::Database->new()->schema();
-
-    # create biblio record
     my $logger = Log::Log4perl->get_logger();
-    if ( !$basketno ) {
-        $logger->error('Skipping order creation no basketno');
+
+    my $basket = Koha::Acquisition::Baskets->find( $basketno );
+    unless ( $basket ) {
+        $logger->error('Skipping order creation no valid basketno');
         return;
     }
     $logger->trace( 'Checking db for matches with ', $item->item_number_id() );
@@ -547,6 +589,7 @@ sub quote_item {
         }
         $order_quantity = 1;    # attempts to create an orderline for each gir
     }
+    my $vendor = Koha::Acquisition::Booksellers->find( $quote->vendor_id );
 
     # database definitions should set some of these defaults but dont
     my $order_hash = {
@@ -558,11 +601,14 @@ sub quote_item {
         quantityreceived   => 0,
         order_vendornote   => q{},
         order_internalnote => $order_note,
-        rrp                => $item->price,
+        replacementprice   => $item->price,
+        rrp_tax_included   => $item->price,
+        rrp_tax_excluded   => $item->price,
         ecost => _discounted_price( $quote->vendor->discount, $item->price ),
         uncertainprice => 0,
         sort1          => q{},
         sort2          => q{},
+        currency       => $vendor->listprice(),
     };
 
     # suppliers references
@@ -764,7 +810,7 @@ sub quote_item {
                     );
                 }
 
-                if ( C4::Context->preference('AcqCreateItem') eq 'ordering' ) {
+                if ( $basket->effective_create_item eq 'ordering' ) {
                     my $new_item = {
                         notforloan       => -1,
                         cn_sort          => q{},