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 ) ) { |