|
Lines 103-109
if ($ediaccount) {
Link Here
|
| 103 |
join => 'branch', |
103 |
join => 'branch', |
| 104 |
} |
104 |
} |
| 105 |
); |
105 |
); |
| 106 |
$template->param( eans => \@eans ); |
106 |
|
|
|
107 |
# Check if this basket was created from a QUOTE message and get the buyer EAN |
| 108 |
my $quote_ean = undef; |
| 109 |
my $quote_message = $schema->resultset('EdifactMessage')->search( |
| 110 |
{ |
| 111 |
basketno => $basketno, |
| 112 |
message_type => 'QUOTE' |
| 113 |
} |
| 114 |
)->first; |
| 115 |
|
| 116 |
if ($quote_message) { |
| 117 |
|
| 118 |
# For the first message in a QUOTE transport, the raw_msg contains the full message |
| 119 |
# For subsequent messages, we need to get it from the original message |
| 120 |
my $raw_msg = $quote_message->raw_msg; |
| 121 |
|
| 122 |
# If this is a split message (empty raw_msg), find the original message |
| 123 |
if ( !$raw_msg ) { |
| 124 |
|
| 125 |
# Look for the original message with the same filename but without suffix |
| 126 |
my $original_filename = $quote_message->filename; |
| 127 |
$original_filename =~ s/_\d+$//; # Remove _2, _3, etc. suffix |
| 128 |
|
| 129 |
my $original_message = $schema->resultset('EdifactMessage')->search( |
| 130 |
{ |
| 131 |
filename => $original_filename, |
| 132 |
message_type => 'QUOTE', |
| 133 |
vendor_id => $quote_message->vendor_id |
| 134 |
} |
| 135 |
)->first; |
| 136 |
|
| 137 |
$raw_msg = $original_message->raw_msg if $original_message; |
| 138 |
} |
| 139 |
|
| 140 |
if ($raw_msg) { |
| 141 |
|
| 142 |
# Parse the EDI message to find the buyer EAN for THIS specific basket |
| 143 |
eval { |
| 144 |
require Koha::Edifact; |
| 145 |
my $edi = Koha::Edifact->new( { transmission => $raw_msg } ); |
| 146 |
my $messages = $edi->message_array(); |
| 147 |
|
| 148 |
# For multiple messages, we need to find which message corresponds to this basket |
| 149 |
# The current process_quote creates baskets in order, so we need to determine the index |
| 150 |
if ( @{$messages} ) { |
| 151 |
if ( @{$messages} == 1 ) { |
| 152 |
|
| 153 |
# Single message case |
| 154 |
$quote_ean = $messages->[0]->buyer_ean; |
| 155 |
} else { |
| 156 |
|
| 157 |
# Multiple message case - determine which message this basket belongs to |
| 158 |
# Check if this is a split message by looking at the filename suffix |
| 159 |
my $filename = $quote_message->filename; |
| 160 |
if ( $filename =~ /_(\d+)$/ ) { |
| 161 |
my $message_index = $1 - 1; # Convert to 0-based index |
| 162 |
$quote_ean = $messages->[$message_index]->buyer_ean if $messages->[$message_index]; |
| 163 |
} else { |
| 164 |
|
| 165 |
# This is the first message (no suffix) |
| 166 |
$quote_ean = $messages->[0]->buyer_ean; |
| 167 |
} |
| 168 |
} |
| 169 |
} |
| 170 |
}; |
| 171 |
|
| 172 |
# If there's an error parsing, we'll just fall back to normal behavior |
| 173 |
# Error is logged but doesn't prevent normal EAN selection |
| 174 |
} |
| 175 |
} |
| 176 |
|
| 177 |
$template->param( |
| 178 |
eans => \@eans, |
| 179 |
quote_ean => $quote_ean |
| 180 |
); |
| 107 |
} |
181 |
} |
| 108 |
|
182 |
|
| 109 |
unless ( CanUserManageBasket( $loggedinuser, $basket, $userflags ) ) { |
183 |
unless ( CanUserManageBasket( $loggedinuser, $basket, $userflags ) ) { |