From cb7e2caf716c790f9660bdb658f3f73fe3a59ed6 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 19 Dec 2024 16:56:29 +0000 Subject: [PATCH] Bug 38689: Record errors on invoice processing Signed-off-by: Kyle M Hall error message improvement --- Koha/EDI.pm | 60 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/Koha/EDI.pm b/Koha/EDI.pm index 09b3d6f74f4..d3e71918ef2 100644 --- a/Koha/EDI.pm +++ b/Koha/EDI.pm @@ -290,7 +290,13 @@ sub process_invoice { )->single; } if ( !$vendor_acct ) { - carp "Cannot find vendor with ean $vendor_ean for invoice $invoicenumber in ".$invoice_message->filename; + $invoice_message->add_to_edifact_errors( + { + section => '', + details => "Skipped invoice $invoicenumber with unmatched vendor san: $vendor_ean" + } + ); + $logger->error("Cannot find vendor with ean $vendor_ean for invoice $invoicenumber in ".$invoice_message->filename); next; } $invoice_message->edi_acct( $vendor_acct->id ); @@ -313,6 +319,12 @@ sub process_invoice { foreach my $line ( @{$lines} ) { my $ordernumber = $line->ordernumber; if ( !$ordernumber ) { + $invoice_message->add_to_edifact_errors( + { + section => $line->line_item_number, + details => "Message missing ordernumber" + } + ); $logger->error("Skipping invoice line, no associated ordernumber"); next; } @@ -320,12 +332,24 @@ sub process_invoice { # ModReceiveOrder does not validate that $ordernumber exists validate here my $order = $schema->resultset('Aqorder')->find($ordernumber); if ( !$order ) { + $invoice_message->add_to_edifact_errors( + { + section => $line->line_item_number, + details => "Koha order $ordernumber missing" + } + ); $logger->error("Skipping invoice line, no order found for $ordernumber, invoice:$invoicenumber"); next; } my $bib = $order->biblionumber; if ( !$bib ) { + $invoice_message->add_to_edifact_errors( + { + section => $line->line_item_number, + details => "Koha biblio missing" + } + ); $logger->error( "Skipping invoice line, no bibliographic record found for $ordernumber, invoice:$invoicenumber" ); @@ -384,13 +408,10 @@ sub process_invoice { tax_value_on_receiving => $quantity * $price_excl_tax * $tax_rate->{rate}, } ); - transfer_items( - $schema, $line, $order, - $received_order, $quantity - ); + transfer_items( $schema, $line, $order, $received_order, $quantity ); receipt_items( - $schema, $line, - $received_order->ordernumber, $quantity + $schema, $line, + $received_order->ordernumber, $quantity, $invoice_message ); } else { # simple receipt all copies on order $order->quantityreceived($quantity); @@ -403,7 +424,7 @@ sub process_invoice { $order->tax_value_on_receiving( $quantity * $price_excl_tax * $tax_rate->{rate} ); $order->orderstatus('complete'); $order->update; - receipt_items( $schema, $line, $ordernumber, $quantity ); + receipt_items( $schema, $line, $ordernumber, $quantity, $invoice_message ); } } } @@ -440,7 +461,7 @@ sub _get_invoiced_price { } sub receipt_items { - my ( $schema, $inv_line, $ordernumber, $quantity ) = @_; + my ( $schema, $inv_line, $ordernumber, $quantity, $invoice_message ) = @_; my $logger = Koha::Logger->get( { interface => 'edi' } ); # itemnumber is not a foreign key ??? makes this a bit cumbersome @@ -454,6 +475,12 @@ sub receipt_items { my $item = $schema->resultset('Item')->find( $ilink->itemnumber ); if ( !$item ) { my $i = $ilink->itemnumber; + $invoice_message->add_to_edifact_errors( + { + section => $inv_line->line_item_number, + details => "Cannot fine aqorder item" + } + ); $logger->warn( "Cannot find aqorder item for $i :Order:$ordernumber"); next; @@ -493,6 +520,12 @@ sub receipt_items { } ); if ( $rs->count > 0 ) { + $invoice_message->add_to_edifact_errors( + { + section => $inv_line->line_item_number . " : " . $gir_occurrence, + details => "Duplicate barcode found $barcode" + } + ); $logger->warn("Barcode $barcode is a duplicate"); } else { @@ -517,12 +550,17 @@ sub receipt_items { $item->update; } else { + $invoice_message->add_to_edifact_errors( + { + section => $inv_line->line_item_number, + details => "Unmatched item at branch $branch" + } + ); $logger->warn("Unmatched item at branch:$branch"); } ++$gir_occurrence; } return; - } sub transfer_items { @@ -1298,7 +1336,7 @@ Koha::EDI =head2 receipt_items - receipt_items( schema_obj, invoice_line, ordernumber, $quantity) + receipt_items( schema_obj, invoice_line, ordernumber, $quantity, $invoice_message) receipts the items recorded on this invoice line -- 2.48.0