Lines 3-12
use strict;
Link Here
|
3 |
use warnings; |
3 |
use warnings; |
4 |
use FindBin qw( $Bin ); |
4 |
use FindBin qw( $Bin ); |
5 |
|
5 |
|
6 |
use Test::More tests => 41; |
6 |
use Test::More tests => 45; |
7 |
use Koha::EDI; |
7 |
use Koha::EDI; |
8 |
|
8 |
|
9 |
BEGIN { use_ok('Koha::Edifact') } |
9 |
BEGIN { |
|
|
10 |
use_ok('Koha::Edifact'); |
11 |
use_ok('Koha::Edifact::Message'); |
12 |
} |
10 |
|
13 |
|
11 |
my $filename = "$Bin/edi_testfiles/prquotes_73050_20140430.CEQ"; |
14 |
my $filename = "$Bin/edi_testfiles/prquotes_73050_20140430.CEQ"; |
12 |
|
15 |
|
Lines 138-140
is( $dp, 9.0, 'Discount calculated with discount = 0' );
Link Here
|
138 |
|
141 |
|
139 |
$dp = Koha::EDI::_discounted_price( 0.0, 9, 8.0 ); |
142 |
$dp = Koha::EDI::_discounted_price( 0.0, 9, 8.0 ); |
140 |
is( $dp, 8.0, 'Discount overridden by incoming calculated value' ); |
143 |
is( $dp, 8.0, 'Discount overridden by incoming calculated value' ); |
|
|
144 |
|
145 |
# Test RFF+ON (Purchase Order Number) segment handling in EDIFACT messages |
146 |
# Bug 20253: Optionally use buyer's purchase order number from EDIFACT quote in basket name |
147 |
|
148 |
# Mock segment class for testing RFF+ON functionality |
149 |
{ |
150 |
|
151 |
package MockSegment; |
152 |
|
153 |
sub new { |
154 |
my ( $class, $tag, $elements ) = @_; |
155 |
return bless { tag => $tag, elements => $elements }, $class; |
156 |
} |
157 |
|
158 |
sub tag { |
159 |
my $self = shift; |
160 |
return $self->{tag}; |
161 |
} |
162 |
|
163 |
sub elem { |
164 |
my ( $self, $comp_pos, $elem_pos ) = @_; |
165 |
return $self->{elements}->[$comp_pos]->[ $elem_pos // 0 ]; |
166 |
} |
167 |
} |
168 |
|
169 |
# Test that message-level purchase order number is extracted correctly |
170 |
my @datasegs = ( |
171 |
MockSegment->new( 'NAD', [ ['BY'], [ '5030670137480', '', '', 'Buyer Name' ] ] ), |
172 |
MockSegment->new( 'RFF', [ [ 'ON', 'MSG_PO_12345' ] ] ), # Message-level purchase order number |
173 |
MockSegment->new( 'NAD', [ ['SU'], [ '5013546027856', '', '', 'Supplier Name' ] ] ), |
174 |
MockSegment->new( 'LIN', [ ['1'], [ '', '' ], [ '9780123456789', 'EN' ] ] ), # First line item |
175 |
MockSegment->new( 'QTY', [ [ '47', '1' ] ] ), |
176 |
); |
177 |
|
178 |
my $header = MockSegment->new( 'UNH', [ ['MQ09791'], [ 'QUOTES', 'D', '03B', 'UN', 'EAN008' ] ] ); |
179 |
my $bgm = MockSegment->new( 'BGM', [ [ '310', 'Q741588', '9' ] ] ); |
180 |
|
181 |
my $message = Koha::Edifact::Message->new( [ $header, $bgm, @datasegs ] ); |
182 |
is( |
183 |
$message->purchase_order_number, 'MSG_PO_12345', |
184 |
'Message-level purchase order number extracted from RFF+ON segment' |
185 |
); |
186 |
|
187 |
# Test that RFF+ON processing stops at first LIN segment (message-level only) |
188 |
@datasegs = ( |
189 |
MockSegment->new( 'NAD', [ ['BY'], [ '5030670137480', '', '', 'Buyer Name' ] ] ), |
190 |
MockSegment->new( 'LIN', [ ['1'], [ '', '' ], [ '9780123456789', 'EN' ] ] ), # First LIN |
191 |
MockSegment->new( 'RFF', [ [ 'ON', 'AFTER_LIN_PO' ] ] ), # This should be ignored (line-level) |
192 |
MockSegment->new( 'QTY', [ [ '47', '1' ] ] ), |
193 |
); |
194 |
|
195 |
$message = Koha::Edifact::Message->new( [ $header, $bgm, @datasegs ] ); |
196 |
is( $message->purchase_order_number, undef, 'RFF+ON after LIN segment is ignored (message-level only)' ); |
197 |
|
198 |
# Test that correct RFF+ON is extracted when multiple RFF segments are present |
199 |
@datasegs = ( |
200 |
MockSegment->new( 'NAD', [ ['BY'], [ '5030670137480', '', '', 'Buyer Name' ] ] ), |
201 |
MockSegment->new( 'RFF', [ [ 'QLI', 'QUOTE_REF_123' ] ] ), # Different RFF qualifier |
202 |
MockSegment->new( 'RFF', [ [ 'ON', 'CORRECT_PO_NUM' ] ] ), # Purchase order number |
203 |
MockSegment->new( 'RFF', [ [ 'CT', 'CONTRACT_456' ] ] ), # Another different RFF qualifier |
204 |
MockSegment->new( 'NAD', [ ['SU'], [ '5013546027856', '', '', 'Supplier Name' ] ] ), |
205 |
MockSegment->new( 'LIN', [ ['1'], [ '', '' ], [ '9780123456789', 'EN' ] ] ), |
206 |
MockSegment->new( 'QTY', [ [ '47', '1' ] ] ), |
207 |
); |
208 |
|
209 |
$message = Koha::Edifact::Message->new( [ $header, $bgm, @datasegs ] ); |
210 |
is( $message->purchase_order_number, 'CORRECT_PO_NUM', 'Correct RFF+ON extracted when multiple RFF segments present' ); |