View | Details | Raw Unified | Return to bug 41709
Collapse All | Expand All

(-)a/Koha/Edifact/Order.pm (-11 / +11 lines)
Lines 465-471 sub order_line { Link Here
465
    # FTX free text for current orderline
465
    # FTX free text for current orderline
466
    #    Pass vendor note in FTX free text segment
466
    #    Pass vendor note in FTX free text segment
467
    if ( $orderline->order_vendornote ) {
467
    if ( $orderline->order_vendornote ) {
468
        my $vendornote = $orderline->order_vendornote;
468
        my $vendornote = encode_text( $orderline->order_vendornote );
469
        chomp $vendornote;
469
        chomp $vendornote;
470
        my $ftx = 'FTX+LIN+++';
470
        my $ftx = 'FTX+LIN+++';
471
        $ftx .= $vendornote;
471
        $ftx .= $vendornote;
Lines 489-495 sub order_line { Link Here
489
    # RFF : suppliers unique quotation reference number
489
    # RFF : suppliers unique quotation reference number
490
    if ( $orderline->suppliers_reference_number ) {
490
    if ( $orderline->suppliers_reference_number ) {
491
        $rff = join q{}, 'RFF+', $orderline->suppliers_reference_qualifier,
491
        $rff = join q{}, 'RFF+', $orderline->suppliers_reference_qualifier,
492
            ':', $orderline->suppliers_reference_number, $seg_terminator;
492
            ':', encode_text( $orderline->suppliers_reference_number ), $seg_terminator;
493
        $self->add_seg($rff);
493
        $self->add_seg($rff);
494
    }
494
    }
495
495
Lines 576-582 sub gir_segments { Link Here
576
    my $orderfields  = $params->{ol_fields};
576
    my $orderfields  = $params->{ol_fields};
577
    my @onorderitems = @{ $params->{items} };
577
    my @onorderitems = @{ $params->{items} };
578
578
579
    my $budget_code = $orderfields->{budget_code};
579
    my $budget_code = encode_text( $orderfields->{budget_code} );
580
    my @segments;
580
    my @segments;
581
    my $sequence_no = 1;
581
    my $sequence_no = 1;
582
    my $lsq_field   = C4::Context->preference('EdifactLSQ');
582
    my $lsq_field   = C4::Context->preference('EdifactLSQ');
Lines 590-616 sub gir_segments { Link Here
590
        }
590
        }
591
        if ( $item->{branchcode} ) {
591
        if ( $item->{branchcode} ) {
592
            push @gir_elements,
592
            push @gir_elements,
593
                { identity_number => 'LLO', data => $item->{branchcode} };
593
                { identity_number => 'LLO', data => encode_text( $item->{branchcode} ) };
594
        }
594
        }
595
        if ( $item->{itype} ) {
595
        if ( $item->{itype} ) {
596
            push @gir_elements,
596
            push @gir_elements,
597
                { identity_number => 'LST', data => $item->{itype} };
597
                { identity_number => 'LST', data => encode_text( $item->{itype} ) };
598
        }
598
        }
599
599
600
        # Handle LSQ mapping
600
        # Handle LSQ mapping
601
        if ( $lsq_field && $item->{$lsq_field} ) {
601
        if ( $lsq_field && $item->{$lsq_field} ) {
602
            push @gir_elements,
602
            push @gir_elements,
603
                { identity_number => 'LSQ', data => $item->{$lsq_field} };
603
                { identity_number => 'LSQ', data => encode_text( $item->{$lsq_field} ) };
604
        }
604
        }
605
605
606
        # Handle LSL mapping
606
        # Handle LSL mapping
607
        if ( $lsl_field && $item->{$lsl_field} ) {
607
        if ( $lsl_field && $item->{$lsl_field} ) {
608
            push @gir_elements,
608
            push @gir_elements,
609
                { identity_number => 'LSL', data => $item->{$lsl_field} };
609
                { identity_number => 'LSL', data => encode_text( $item->{$lsl_field} ) };
610
        }
610
        }
611
        if ( $item->{itemcallnumber} ) {
611
        if ( $item->{itemcallnumber} ) {
612
            push @gir_elements,
612
            push @gir_elements,
613
                { identity_number => 'LSM', data => $item->{itemcallnumber} };
613
                { identity_number => 'LSM', data => encode_text( $item->{itemcallnumber} ) };
614
        }
614
        }
615
615
616
        # itemcallnumber -> shelfmark
616
        # itemcallnumber -> shelfmark
Lines 618-624 sub gir_segments { Link Here
618
            push @gir_elements,
618
            push @gir_elements,
619
                {
619
                {
620
                identity_number => 'LVT',
620
                identity_number => 'LVT',
621
                data            => $orderfields->{servicing_instruction}
621
                data            => encode_text( $orderfields->{servicing_instruction} )
622
                };
622
                };
623
        }
623
        }
624
        my $e_cnt   = 0;    # count number of elements so we dont exceed 5 per segment
624
        my $e_cnt   = 0;    # count number of elements so we dont exceed 5 per segment
Lines 663-669 sub lin_segment { Link Here
663
    my ( $line_number, $item_number_id ) = @_;
663
    my ( $line_number, $item_number_id ) = @_;
664
664
665
    if ($item_number_id) {
665
    if ($item_number_id) {
666
        $item_number_id = "++${item_number_id}:EN";
666
        $item_number_id = "++" . encode_text($item_number_id) . ":EN";
667
    } else {
667
    } else {
668
        $item_number_id = q||;
668
        $item_number_id = q||;
669
    }
669
    }
Lines 688-694 sub additional_product_id { Link Here
688
    }
688
    }
689
689
690
    # function id set to 5 states this is the main product id
690
    # function id set to 5 states this is the main product id
691
    return "PIA+5+$product_id:$product_code$seg_terminator";
691
    return "PIA+5+" . encode_text($product_id) . ":$product_code$seg_terminator";
692
}
692
}
693
693
694
sub message_date_segment {
694
sub message_date_segment {
(-)a/t/Ediorder.t (-2 / +33 lines)
Lines 4-10 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 => 14;
7
use Test::More tests => 16;
8
use t::lib::Mocks;
8
use t::lib::Mocks;
9
9
10
BEGIN { use_ok('Koha::Edifact::Order') }
10
BEGIN { use_ok('Koha::Edifact::Order') }
Lines 136-138 cmp_ok( Link Here
136
    $gsegs[3], 'eq', q{GIR+002+S_I:LVT},
136
    $gsegs[3], 'eq', q{GIR+002+S_I:LVT},
137
    'Second part of split GIR field OK'
137
    'Second part of split GIR field OK'
138
);
138
);
139
- 
139
140
# Test that special characters are properly escaped in GIR segments
141
my $special_orderfields = {
142
    budget_code           => 'BUDGET?+',
143
    servicing_instruction => "Note with 'special' chars:",
144
};
145
my @special_items = (
146
    {
147
        itype          => 'TYPE?:',
148
        location       => 'LOC+TION',
149
        itemcallnumber => 'CALL?' . q{'},
150
        branchcode     => 'BRANCH:+',
151
    }
152
);
153
154
my @special_gsegs = Koha::Edifact::Order::gir_segments(
155
    {
156
        ol_fields => $special_orderfields,
157
        items     => \@special_items
158
    }
159
);
160
161
cmp_ok(
162
    $special_gsegs[0], 'eq',
163
    q{GIR+001+BUDGET???+:LFN+BRANCH?:?+:LLO+TYPE???::LST+LOC?+TION:LSQ+CALL???':LSM},
164
    'GIR segment with special characters properly escaped'
165
);
166
167
cmp_ok(
168
    $special_gsegs[1], 'eq', q{GIR+001+Note with ?'special?' chars?::LVT},
169
    'GIR segment with servicing instruction special characters properly escaped'
170
);

Return to bug 41709