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

(-)a/Koha/MarcOrder.pm (-18 / +69 lines)
Lines 99-105 sub create_order_lines_from_file { Link Here
99
    my $basket_id = _create_basket_for_file(
99
    my $basket_id = _create_basket_for_file(
100
        {
100
        {
101
            filename  => $filename,
101
            filename  => $filename,
102
            vendor_id => $vendor_id
102
            filepath  => $filepath,
103
            vendor_id => $vendor_id,
104
            profile   => $profile
103
        }
105
        }
104
    );
106
    );
105
107
Lines 223-229 sub import_record_and_create_order_lines { Link Here
223
225
224
    my $basket_id = _create_basket_for_file({
226
    my $basket_id = _create_basket_for_file({
225
        filename  => $filename,
227
        filename  => $filename,
226
        vendor_id => $vendor_id
228
        vendor_id => $vendor_id,
229
        profile   => $profile
227
    });
230
    });
228
231
229
    Creates a basket ready to receive order lines based on the imported file
232
    Creates a basket ready to receive order lines based on the imported file
Lines 236-243 sub _create_basket_for_file { Link Here
236
    my $filename  = $args->{filename};
239
    my $filename  = $args->{filename};
237
    my $vendor_id = $args->{vendor_id};
240
    my $vendor_id = $args->{vendor_id};
238
241
242
    my $basket_name = _check_file_for_basket_name($args);
243
239
    # aqbasketname.basketname has a max length of 50 characters so long file names will need to be truncated
244
    # aqbasketname.basketname has a max length of 50 characters so long file names will need to be truncated
240
    my $basketname = length($filename) > 50 ? substr( $filename, 0, 50 ) : $filename;
245
    my $basketname = length($basket_name) > 50 ? substr( $basket_name, 0, 50 ) : $basket_name;
241
246
242
    my $basketno = NewBasket(
247
    my $basketno = NewBasket(
243
        $vendor_id, 0, $basketname, q{},
248
        $vendor_id, 0, $basketname, q{},
Lines 543-565 sub add_items_from_import_record { Link Here
543
sub match_file_to_account {
548
sub match_file_to_account {
544
    my ( $self, $args ) = @_;
549
    my ( $self, $args ) = @_;
545
550
546
    my $match    = 0;
551
    my $profile = $args->{profile};
547
    my $filename = $args->{filename};
548
    my $filepath = $args->{filepath};
549
    my $profile  = $args->{profile};
550
    my $format   = index( $filename, '.mrc' ) != -1 ? 'ISO2709' : 'MARCXML';
551
552
552
    my ( $errors, $marcrecords );
553
    my $match        = 0;
553
    if ( $format eq 'MARCXML' ) {
554
    my $match_record = _retrieve_first_record_from_batch($args);
554
        ( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromMARCXMLFile( $filepath, $profile->encoding );
555
    } elsif ( $format eq 'ISO2709' ) {
556
        ( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromISO2709File(
557
            $filepath, $profile->record_type,
558
            $profile->encoding
559
        );
560
    }
561
555
562
    my $match_record = @{$marcrecords}[0];
563
    my ( $field, $subfield ) = split /\$/, $profile->match_field;
556
    my ( $field, $subfield ) = split /\$/, $profile->match_field;
564
557
565
    my $field_value = $match_record->subfield( $field, $subfield ) || '';
558
    my $field_value = $match_record->subfield( $field, $subfield ) || '';
Lines 572-577 sub match_file_to_account { Link Here
572
    return $match;
565
    return $match;
573
}
566
}
574
567
568
=head3 _check_file_for_basket_name
569
570
    my $basket_name = _check_file_for_basket_name({
571
        filename => $filename,
572
        filepath => $filepath,
573
        profile  => $profile
574
    });
575
576
    Checks to see if the account has a basket name field assigned.
577
    If yes, it retrieves this value to use as the name.
578
    If not, to uses the filename.
579
580
=cut
581
582
sub _check_file_for_basket_name {
583
    my ($args) = @_;
584
585
    my $profile = $args->{profile};
586
587
    my $filename = $args->{filename};
588
    return $filename if !$profile->basket_name_field;
589
590
    my $first_record = _retrieve_first_record_from_batch($args);
591
592
    my ( $field, $subfield ) = split /\$/, $profile->basket_name_field;
593
594
    my $field_value = $first_record->subfield( $field, $subfield ) || '';
595
596
    return $field_value ? $field_value : $filename;
597
}
598
575
=head3 import_batches_list
599
=head3 import_batches_list
576
600
577
Fetches import batches matching the batch to be added to the basket and returns these to the template
601
Fetches import batches matching the batch to be added to the basket and returns these to the template
Lines 1251-1254 sub _create_item_fields_from_syspref { Link Here
1251
    return $item_fields;
1275
    return $item_fields;
1252
}
1276
}
1253
1277
1278
=head3 _retrieve_first_record_from_batch
1279
1280
=cut
1281
1282
sub _retrieve_first_record_from_batch {
1283
    my ($args) = @_;
1284
1285
    my $filename = $args->{filename};
1286
    my $filepath = $args->{filepath};
1287
    my $profile  = $args->{profile};
1288
    my $format   = index( $filename, '.mrc' ) != -1 ? 'ISO2709' : 'MARCXML';
1289
1290
    my ( $errors, $marcrecords );
1291
    if ( $format eq 'MARCXML' ) {
1292
        ( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromMARCXMLFile( $filepath, $profile->encoding );
1293
    } elsif ( $format eq 'ISO2709' ) {
1294
        ( $errors, $marcrecords ) = C4::ImportBatch::RecordsFromISO2709File(
1295
            $filepath, $profile->record_type,
1296
            $profile->encoding
1297
        );
1298
    }
1299
1300
    my $first_record = @{$marcrecords}[0];
1301
    return $first_record;
1302
1303
}
1304
1254
1;
1305
1;
(-)a/t/db_dependent/Koha/MarcOrder.t (-2 / +56 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 5;
20
use Test::More tests => 6;
21
21
22
use Koha::MarcOrder;
22
use Koha::MarcOrder;
23
use Koha::MarcOrderAccount;
23
use Koha::MarcOrderAccount;
Lines 627-629 subtest 'match_file_to_account' => sub { Link Here
627
627
628
    $schema->storage->txn_rollback;
628
    $schema->storage->txn_rollback;
629
};
629
};
630
- 
630
631
subtest '_check_file_for_basket_name' => sub {
632
    plan tests => 2;
633
634
    $schema->storage->txn_begin;
635
636
    my ( $fh, $name ) = tempfile( SUFFIX => '.marcxml' );
637
638
    my $rec = MARC::Record->new;
639
    my $fld = MARC::Field->new( '975', '', '', 'p', 'This is a basket' );
640
    $rec->append_fields($fld);
641
    my $str = $rec->as_xml;
642
643
    print $fh $str;
644
645
    close $fh;
646
647
    my $account1 = Koha::MarcOrderAccount->new(
648
        {
649
            basket_name_field => '975$p',
650
            encoding          => 'UTF-8',
651
            description       => 'test',
652
        }
653
    )->store;
654
655
    my $basket_name = Koha::MarcOrder::_check_file_for_basket_name(
656
        {
657
            filename => $name,
658
            filepath => $name,
659
            profile  => $account1,
660
        }
661
    );
662
663
    is( $basket_name, "This is a basket", 'Basket name identified correctly' );
664
665
    my $account2 = Koha::MarcOrderAccount->new(
666
        {
667
            basket_name_field => '975$z',
668
            encoding          => 'UTF-8',
669
            description       => 'test',
670
        }
671
    )->store;
672
673
    my $basket_name2 = Koha::MarcOrder::_check_file_for_basket_name(
674
        {
675
            filename => $name,
676
            filepath => $name,
677
            profile  => $account2,
678
        }
679
    );
680
681
    is( $basket_name2, $name, 'No filename provided in the file' );
682
683
    $schema->storage->txn_rollback;
684
};

Return to bug 39518