X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=Koha%2FEDI.pm;h=0e632c9294d3c0e93d1c9cd398f0e576d5f8439d;hb=ecc9f1baf1000fa07b562c003c25f63fc1dd93c2;hp=26f05e186ffbad325b77e8c6035406b52c5074de;hpb=acb68d21601774d03ada576956c73c44036267ac;p=koha_ffzg diff --git a/Koha/EDI.pm b/Koha/EDI.pm index 26f05e186f..0e632c9294 100644 --- a/Koha/EDI.pm +++ b/Koha/EDI.pm @@ -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{},