|
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' ); |