From 6149e3747f3e5e2ff73169fc86a8274502fe0d74 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 5 Mar 2026 11:57:08 +0000 Subject: [PATCH] Bug 41996: Thread invoicenumber through EDI invoice error recording All errors generated during process_invoice and receipt_items now store the invoicenumber of the specific invoice being processed. This allows errors to be displayed only on the relevant invoice page rather than appearing on every invoice generated from the same EDI file. Also fixes two pre-existing spacing bugs in error message strings ("itemnumberis missing" and "barcode"for invoice line"). --- Koha/EDI.pm | 51 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/Koha/EDI.pm b/Koha/EDI.pm index 053d5d71cea..87904c0c2e7 100644 --- a/Koha/EDI.pm +++ b/Koha/EDI.pm @@ -319,8 +319,9 @@ sub process_invoice { if ( !$vendor_acct ) { $invoice_message->add_to_edifact_errors( { - section => "NAD+SU+" . $msg->supplier_ean, - details => "Skipped invoice $invoicenumber with unmatched vendor san: $vendor_ean" + invoicenumber => $invoicenumber, + section => "NAD+SU+" . $msg->supplier_ean, + details => "Skipped invoice $invoicenumber with unmatched vendor san: $vendor_ean" } ); $logger->error( "Cannot find vendor with ean $vendor_ean for invoice $invoicenumber in " @@ -349,8 +350,9 @@ sub process_invoice { if ( !$ordernumber ) { $invoice_message->add_to_edifact_errors( { - section => join( "\n", map { $_->as_string } @{ $line->{segs} } ), - details => "Skipped invoice line " . $line->line_item_number . ", missing ordernumber" + invoicenumber => $invoicenumber, + section => join( "\n", map { $_->as_string } @{ $line->{segs} } ), + details => "Skipped invoice line " . $line->line_item_number . ", missing ordernumber" } ); $logger->error("Skipping invoice line, no associated ordernumber"); @@ -362,8 +364,9 @@ sub process_invoice { if ( !$order ) { $invoice_message->add_to_edifact_errors( { - section => join( "\n", map { $_->as_string } @{ $line->{segs} } ), - details => "Skipped invoice line " + invoicenumber => $invoicenumber, + section => join( "\n", map { $_->as_string } @{ $line->{segs} } ), + details => "Skipped invoice line " . $line->line_item_number . ", cannot find order with ordernumber " . $ordernumber @@ -377,8 +380,9 @@ sub process_invoice { if ( !$bib ) { $invoice_message->add_to_edifact_errors( { - section => join( "\n", map { $_->as_string } @{ $line->{segs} } ), - details => "Skipped invoice line " + invoicenumber => $invoicenumber, + section => join( "\n", map { $_->as_string } @{ $line->{segs} } ), + details => "Skipped invoice line " . $line->line_item_number . ", cannot find biblio for ordernumber " . $ordernumber @@ -396,8 +400,9 @@ sub process_invoice { if ( $order->orderstatus eq 'complete' ) { $invoice_message->add_to_edifact_errors( { - section => join( "\n", map { $_->as_string } @{ $line->{segs} } ), - details => "Warning: invoice line " + invoicenumber => $invoicenumber, + section => join( "\n", map { $_->as_string } @{ $line->{segs} } ), + details => "Warning: invoice line " . $line->line_item_number . " references ordernumber " . $ordernumber @@ -464,7 +469,8 @@ sub process_invoice { transfer_items( $schema, $line, $order, $received_order, $quantity ); receipt_items( $schema, $line, - $received_order->ordernumber, $quantity, $invoice_message + $received_order->ordernumber, $quantity, $invoice_message, + $invoicenumber ); } else { # simple receipt all copies on order $order->quantityreceived($quantity); @@ -478,7 +484,7 @@ sub process_invoice { $quantity * $price_excl_tax * ( $tax_rate ? $tax_rate->{rate} : 0 ) ); $order->orderstatus('complete'); $order->update; - receipt_items( $schema, $line, $ordernumber, $quantity, $invoice_message ); + receipt_items( $schema, $line, $ordernumber, $quantity, $invoice_message, $invoicenumber ); } } } @@ -515,7 +521,7 @@ sub _get_invoiced_price { } sub receipt_items { - my ( $schema, $inv_line, $ordernumber, $quantity, $invoice_message ) = @_; + my ( $schema, $inv_line, $ordernumber, $quantity, $invoice_message, $invoicenumber ) = @_; my $logger = Koha::Logger->get( { interface => 'edi' } ); # itemnumber is not a foreign key ??? makes this a bit cumbersome @@ -531,12 +537,13 @@ sub receipt_items { my $i = $ilink->itemnumber; $invoice_message->add_to_edifact_errors( { - section => join( "\n", map { $_->as_string } @{ $inv_line->{segs} } ), - details => "Skipped invoice line " + invoicenumber => $invoicenumber, + section => join( "\n", map { $_->as_string } @{ $inv_line->{segs} } ), + details => "Skipped invoice line " . $inv_line->line_item_number . ", Koha item with itemnumber " . $i - . "is missing" + . " is missing" } ); $logger->warn("Cannot find aqorder item for $i: Order: $ordernumber"); @@ -579,10 +586,11 @@ sub receipt_items { if ( $rs->count > 0 ) { $invoice_message->add_to_edifact_errors( { - section => join( "\n", map { $_->as_string } @{ $inv_line->{segs} } ), - details => "Failed to assign barcode " + invoicenumber => $invoicenumber, + section => join( "\n", map { $_->as_string } @{ $inv_line->{segs} } ), + details => "Failed to assign barcode " . $barcode - . "for invoice line " + . " for invoice line " . $inv_line->line_item_number . ", duplicate found" } @@ -612,8 +620,9 @@ sub receipt_items { my $available_branches = join( ', ', sort keys %branch_map ) || 'none'; $invoice_message->add_to_edifact_errors( { - section => join( "\n", map { $_->as_string } @{ $inv_line->{segs} } ), - details => "No matching item found for invoice line " + invoicenumber => $invoicenumber, + section => join( "\n", map { $_->as_string } @{ $inv_line->{segs} } ), + details => "No matching item found for invoice line " . $inv_line->line_item_number . ":" . $gir_occurrence . " at branch $branch" -- 2.53.0