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