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

(-)a/Koha/MarcOrder.pm (-8 / +7 lines)
Lines 1-4 Link Here
1
package Koha::MarcOrder;
1
package Koha::Acquisition::MarcOrder;
2
2
3
# Copyright 2023, PTFS-Europe Ltd
3
# Copyright 2023, PTFS-Europe Ltd
4
#
4
#
Lines 19-25 package Koha::MarcOrder; Link Here
19
19
20
use Modern::Perl;
20
use Modern::Perl;
21
use Try::Tiny qw( catch try );
21
use Try::Tiny qw( catch try );
22
use Net::FTP;
23
22
24
use base qw(Koha::Object);
23
use base qw(Koha::Object);
25
24
Lines 64-70 use Koha::Plugins; Link Here
64
63
65
=head1 NAME
64
=head1 NAME
66
65
67
Koha::MarcOrder - Koha Marc Order Object class
66
Koha::Acquisition::MarcOrder - Koha Marc Order Object class
68
67
69
=head1 API
68
=head1 API
70
69
Lines 74-80 Koha::MarcOrder - Koha Marc Order Object class Link Here
74
73
75
=head3 create_order_lines_from_file
74
=head3 create_order_lines_from_file
76
75
77
    my $result = Koha::MarcOrder->create_order_lines_from_file($args);
76
    my $result = Koha::Acquisition::MarcOrder->create_order_lines_from_file($args);
78
77
79
    Controller for file staging, basket creation and order line creation when using the cronjob in marc_ordering_process.pl
78
    Controller for file staging, basket creation and order line creation when using the cronjob in marc_ordering_process.pl
80
79
Lines 168-174 sub create_order_lines_from_file { Link Here
168
167
169
=head3 import_record_and_create_order_lines
168
=head3 import_record_and_create_order_lines
170
169
171
    my $result = Koha::MarcOrder->import_record_and_create_order_lines($args);
170
    my $result = Koha::Acquisition::MarcOrder->import_record_and_create_order_lines($args);
172
171
173
    Controller for record import and order line creation when using the interface in addorderiso2709.pl
172
    Controller for record import and order line creation when using the interface in addorderiso2709.pl
174
173
Lines 534-540 sub add_items_from_import_record { Link Here
534
533
535
=head3 match_file_to_account
534
=head3 match_file_to_account
536
535
537
    my $file_match = Koha::MarcOrder->match_file_to_account({
536
    my $file_match = Koha::Acquisition::MarcOrder->match_file_to_account({
538
        filename => $filename,
537
        filename => $filename,
539
        filepath => $filepath,
538
        filepath => $filepath,
540
        profile  => $profile
539
        profile  => $profile
Lines 600-606 sub _check_file_for_basket_name { Link Here
600
599
601
Fetches import batches matching the batch to be added to the basket and returns these to the template
600
Fetches import batches matching the batch to be added to the basket and returns these to the template
602
601
603
Koha::MarcOrder->import_batches_list();
602
Koha::Acquisition::MarcOrder->import_batches_list();
604
603
605
=cut
604
=cut
606
605
Lines 650-656 sub import_batches_list { Link Here
650
For an import batch, this function reads the files and creates all the relevant data pertaining to that file
649
For an import batch, this function reads the files and creates all the relevant data pertaining to that file
651
It then returns this to the template to be shown in the UI
650
It then returns this to the template to be shown in the UI
652
651
653
Koha::MarcOrder->import_biblios_list( $cgiparams->{'import_batch_id'} );
652
Koha::Acquisition::MarcOrder->import_biblios_list( $cgiparams->{'import_batch_id'} );
654
653
655
=cut
654
=cut
656
655
(-)a/Koha/MarcOrderAccount.pm (-2 / +2 lines)
Lines 1-4 Link Here
1
package Koha::MarcOrderAccount;
1
package Koha::Acquisition::MarcOrderAccount;
2
2
3
# This file is part of Koha.
3
# This file is part of Koha.
4
#
4
#
Lines 23-29 use base qw(Koha::Object); Link Here
23
23
24
=head1 NAME
24
=head1 NAME
25
25
26
Koha::MarcOrderAccount - Koha Marc Ordering Account Object class
26
Koha::Acquisition::MarcOrderAccount - Koha Marc Ordering Account Object class
27
27
28
=head1 API
28
=head1 API
29
29
(-)a/Koha/MarcOrderAccounts.pm (-4 / +4 lines)
Lines 1-4 Link Here
1
package Koha::MarcOrderAccounts;
1
package Koha::Acquisition::MarcOrderAccounts;
2
2
3
# This file is part of Koha.
3
# This file is part of Koha.
4
#
4
#
Lines 18-30 package Koha::MarcOrderAccounts; Link Here
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Koha::Database;
20
use Koha::Database;
21
use Koha::MarcOrderAccount;
21
use Koha::Acquisition::MarcOrderAccount;
22
22
23
use base qw(Koha::Objects);
23
use base qw(Koha::Objects);
24
24
25
=head1 NAME
25
=head1 NAME
26
26
27
Koha::MarcOrderAccount - Koha Marc Ordering Account Object class
27
Koha::Acquisition::MarcOrderAccount - Koha Marc Ordering Account Object class
28
28
29
=head1 API
29
=head1 API
30
30
Lines 45-51 sub _type { Link Here
45
=cut
45
=cut
46
46
47
sub object_class {
47
sub object_class {
48
    return 'Koha::MarcOrderAccount';
48
    return 'Koha::Acquisition::MarcOrderAccount';
49
}
49
}
50
50
51
1;
51
1;
(-)a/acqui/addorderiso2709.pl (-4 / +4 lines)
Lines 54-60 use Koha::Acquisition::Booksellers; Link Here
54
use Koha::ImportBatches;
54
use Koha::ImportBatches;
55
use Koha::Import::Records;
55
use Koha::Import::Records;
56
use Koha::Patrons;
56
use Koha::Patrons;
57
use Koha::MarcOrder;
57
use Koha::Acquisition::MarcOrder;
58
58
59
my $input = CGI->new;
59
my $input = CGI->new;
60
my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
60
my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
Lines 95-101 if ( $op eq "" ) { Link Here
95
    $template->param( "basketno" => $cgiparams->{'basketno'} );
95
    $template->param( "basketno" => $cgiparams->{'basketno'} );
96
96
97
    #display batches
97
    #display batches
98
    my $batches_list = Koha::MarcOrder->import_batches_list();
98
    my $batches_list = Koha::Acquisition::MarcOrder->import_batches_list();
99
    $template->param(
99
    $template->param(
100
        batch_list  => $batches_list->{list},
100
        batch_list  => $batches_list->{list},
101
        num_results => $batches_list->{num_results}
101
        num_results => $batches_list->{num_results}
Lines 116-122 if ( $op eq "" ) { Link Here
116
        bookseller => $bookseller,
116
        bookseller => $bookseller,
117
        "allmatch" => $allmatch,
117
        "allmatch" => $allmatch,
118
    );
118
    );
119
    my $biblios_list   = Koha::MarcOrder->import_biblios_list( $cgiparams->{'import_batch_id'} );
119
    my $biblios_list   = Koha::Acquisition::MarcOrder->import_biblios_list( $cgiparams->{'import_batch_id'} );
120
    my $overlay_action = $biblios_list->{overlay_action};
120
    my $overlay_action = $biblios_list->{overlay_action};
121
    my $nomatch_action = $biblios_list->{nomatch_action};
121
    my $nomatch_action = $biblios_list->{nomatch_action};
122
    my $item_action    = $biblios_list->{item_action};
122
    my $item_action    = $biblios_list->{item_action};
Lines 281-287 if ( $op eq "" ) { Link Here
281
            vendor                    => $bookseller,
281
            vendor                    => $bookseller,
282
            budget_id                 => $budget_id,
282
            budget_id                 => $budget_id,
283
        };
283
        };
284
        my $result = Koha::MarcOrder->import_record_and_create_order_lines($args);
284
        my $result = Koha::Acquisition::MarcOrder->import_record_and_create_order_lines($args);
285
285
286
        $duplinbatch = $result->{duplicates_in_batch} if $result->{duplicates_in_batch};
286
        $duplinbatch = $result->{duplicates_in_batch} if $result->{duplicates_in_batch};
287
        next if $result->{skip};    # If a duplicate is found, or the import record wasn't selected it will be skipped
287
        next if $result->{skip};    # If a duplicate is found, or the import record wasn't selected it will be skipped
(-)a/admin/marc_order_accounts.pl (-4 / +6 lines)
Lines 32-41 use C4::Matcher; Link Here
32
32
33
use Koha::UploadedFiles;
33
use Koha::UploadedFiles;
34
use Koha::ImportBatchProfiles;
34
use Koha::ImportBatchProfiles;
35
use Koha::MarcOrder;
35
use Koha::Acquisition::MarcOrder;
36
use Koha::Acquisition::Booksellers;
36
use Koha::Acquisition::Booksellers;
37
use Koha::MarcOrderAccount;
37
use Koha::Acquisition::MarcOrderAccount;
38
use Koha::MarcOrderAccounts;
38
use Koha::Acquisition::MarcOrderAccounts;
39
39
40
my $input = CGI->new;
40
my $input = CGI->new;
41
41
Lines 110-122 if ( $op eq 'acct_form' ) { Link Here
110
110
111
}
111
}
112
112
113
$template->param( messages => \@messages, op => $op);
114
113
output_html_with_http_headers $input, $cookie, $template->output;
115
output_html_with_http_headers $input, $cookie, $template->output;
114
116
115
sub show_account {
117
sub show_account {
116
    my ( $input, $template ) = @_;
118
    my ( $input, $template ) = @_;
117
    my $acct_id = $input->param('id');
119
    my $acct_id = $input->param('id');
118
    if ($acct_id) {
120
    if ($acct_id) {
119
        my $acct = Koha::MarcOrderAccounts->find($acct_id);
121
        my $acct = Koha::Acquisition::MarcOrderAccounts->find($acct_id);
120
        if ($acct) {
122
        if ($acct) {
121
            my $vendor = Koha::Acquisition::Booksellers->find( $acct->vendor_id );
123
            my $vendor = Koha::Acquisition::Booksellers->find( $acct->vendor_id );
122
            $template->param( vendor => $vendor, account => $acct );
124
            $template->param( vendor => $vendor, account => $acct );
(-)a/misc/cronjobs/marc_ordering_process.pl (-5 / +5 lines)
Lines 61-68 use Getopt::Long qw( GetOptions ); Link Here
61
use File::Copy   qw( copy move );
61
use File::Copy   qw( copy move );
62
62
63
use Koha::Script -cron;
63
use Koha::Script -cron;
64
use Koha::MarcOrder;
64
use Koha::Acquisition::MarcOrder;
65
use Koha::MarcOrderAccounts;
65
use Koha::Acquisition::MarcOrderAccounts;
66
66
67
use C4::Log qw( cronlogaction );
67
use C4::Log qw( cronlogaction );
68
68
Lines 83-89 $verbose = 1 unless $verbose or $confirm; Link Here
83
print "Test run only\n" unless $confirm;
83
print "Test run only\n" unless $confirm;
84
84
85
print "Fetching MARC ordering accounts\n" if $verbose;
85
print "Fetching MARC ordering accounts\n" if $verbose;
86
my @accounts = Koha::MarcOrderAccounts->search(
86
my @accounts = Koha::Acquisition::MarcOrderAccounts->search(
87
    {},
87
    {},
88
    { join => [ 'vendor', 'budget' ] }
88
    { join => [ 'vendor', 'budget' ] }
89
)->as_list;
89
)->as_list;
Lines 115-127 foreach my $acct (@accounts) { Link Here
115
            agent    => 'cron'
115
            agent    => 'cron'
116
        };
116
        };
117
        if ( $acct->match_field && $acct->match_value ) {
117
        if ( $acct->match_field && $acct->match_value ) {
118
            my $file_match = Koha::MarcOrder->match_file_to_account($args);
118
            my $file_match = Koha::Acquisition::MarcOrder->match_file_to_account($args);
119
            next if !$file_match;
119
            next if !$file_match;
120
        }
120
        }
121
        if ($confirm) {
121
        if ($confirm) {
122
            say sprintf "Creating order lines from file %s", $filename if $verbose;
122
            say sprintf "Creating order lines from file %s", $filename if $verbose;
123
123
124
            my $result = Koha::MarcOrder->create_order_lines_from_file($args);
124
            my $result = Koha::Acquisition::MarcOrder->create_order_lines_from_file($args);
125
            if ( $result->{success} ) {
125
            if ( $result->{success} ) {
126
                $files_processed++;
126
                $files_processed++;
127
                say sprintf "Successfully processed file: %s", $filename if $verbose;
127
                say sprintf "Successfully processed file: %s", $filename if $verbose;
(-)a/t/db_dependent/Koha/MarcOrder.t (-22 / +323 lines)
Lines 17-26 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 6;
20
use Test::More tests => 10;
21
21
22
use Koha::MarcOrder;
22
use Koha::Acquisition::MarcOrder;
23
use Koha::MarcOrderAccount;
23
use Koha::Acquisition::MarcOrderAccount;
24
use Koha::Acquisition::Baskets;
24
use Koha::Acquisition::Baskets;
25
use Koha::Acquisition::Bookseller;
25
use Koha::Acquisition::Bookseller;
26
use MARC::Record;
26
use MARC::Record;
Lines 71-77 replacementprice: 975$v' Link Here
71
    );
71
    );
72
72
73
    my $marc_item_fields_to_order = @{
73
    my $marc_item_fields_to_order = @{
74
        Koha::MarcOrder::_get_syspref_mappings(
74
        Koha::Acquisition::MarcOrder::_get_syspref_mappings(
75
            $record, 'MarcItemFieldsToOrder',
75
            $record, 'MarcItemFieldsToOrder',
76
        )
76
        )
77
    }[0];
77
    }[0];
Lines 154-160 budget_code: 975$h' Link Here
154
        [ '975', ' ', ' ', p => 10, q => 1, h => 1 ],
154
        [ '975', ' ', ' ', p => 10, q => 1, h => 1 ],
155
    );
155
    );
156
156
157
    my $marc_fields_to_order = Koha::MarcOrder::_get_syspref_mappings(
157
    my $marc_fields_to_order = Koha::Acquisition::MarcOrder::_get_syspref_mappings(
158
        $record, 'MarcFieldsToOrder',
158
        $record, 'MarcFieldsToOrder',
159
    );
159
    );
160
160
Lines 206-212 subtest 'add_biblio_from_import_record()' => sub { Link Here
206
    my $import_record_id = C4::ImportBatch::AddBiblioToBatch( $import_batch_id, 0, $record, 'utf8', 0 );
206
    my $import_record_id = C4::ImportBatch::AddBiblioToBatch( $import_batch_id, 0, $record, 'utf8', 0 );
207
    my $import_record    = Koha::Import::Records->find($import_record_id);
207
    my $import_record    = Koha::Import::Records->find($import_record_id);
208
208
209
    my $result = Koha::MarcOrder::add_biblio_from_import_record(
209
    my $result = Koha::Acquisition::MarcOrder::add_biblio_from_import_record(
210
        {
210
        {
211
            import_record   => $import_record,
211
            import_record   => $import_record,
212
            matcher_id      => $sample_import_batch->{matcher_id},
212
            matcher_id      => $sample_import_batch->{matcher_id},
Lines 240-246 subtest 'add_biblio_from_import_record()' => sub { Link Here
240
            chosen             => 1,
240
            chosen             => 1,
241
        }
241
        }
242
    )->store;
242
    )->store;
243
    my $match_result = Koha::MarcOrder::add_biblio_from_import_record(
243
    my $match_result = Koha::Acquisition::MarcOrder::add_biblio_from_import_record(
244
        {
244
        {
245
            import_record   => $match_import_record,
245
            import_record   => $match_import_record,
246
            matcher_id      => $sample_import_batch->{matcher_id},
246
            matcher_id      => $sample_import_batch->{matcher_id},
Lines 257-263 subtest 'add_biblio_from_import_record()' => sub { Link Here
257
    # Check that records are skipped if not selected when called from addorderiso2709.pl
257
    # Check that records are skipped if not selected when called from addorderiso2709.pl
258
    # Pass in an empty array and the record should be skipped
258
    # Pass in an empty array and the record should be skipped
259
    my @import_record_id_selected = ();
259
    my @import_record_id_selected = ();
260
    my $result2                   = Koha::MarcOrder::add_biblio_from_import_record(
260
    my $result2                   = Koha::Acquisition::MarcOrder::add_biblio_from_import_record(
261
        {
261
        {
262
            import_record             => $import_record,
262
            import_record             => $import_record,
263
            matcher_id                => $sample_import_batch->{matcher_id},
263
            matcher_id                => $sample_import_batch->{matcher_id},
Lines 286-293 subtest 'add_items_from_import_record() - addorderiso2709.pl' => sub { Link Here
286
    my $bpid = C4::Budgets::AddBudgetPeriod(
286
    my $bpid = C4::Budgets::AddBudgetPeriod(
287
        {
287
        {
288
            budget_period_startdate => '2008-01-01', budget_period_enddate => '2008-12-31'
288
            budget_period_startdate => '2008-01-01', budget_period_enddate => '2008-12-31'
289
            , budget_period_active      => 1
289
            , budget_period_active => 1
290
            , budget_period_description => "MAPERI"
290
291
                # , budget_period_description => "MAPERI"
291
        }
292
        }
292
    );
293
    );
293
    my $budgetid = C4::Budgets::AddBudget(
294
    my $budgetid = C4::Budgets::AddBudget(
Lines 337-343 subtest 'add_items_from_import_record() - addorderiso2709.pl' => sub { Link Here
337
    my $import_record             = Koha::Import::Records->find($import_record_id);
338
    my $import_record             = Koha::Import::Records->find($import_record_id);
338
    my @import_record_id_selected = ($import_record_id);
339
    my @import_record_id_selected = ($import_record_id);
339
340
340
    my $result = Koha::MarcOrder::add_biblio_from_import_record(
341
    my $result = Koha::Acquisition::MarcOrder::add_biblio_from_import_record(
341
        {
342
        {
342
            import_record             => $import_record,
343
            import_record             => $import_record,
343
            matcher_id                => $sample_import_batch->{matcher_id},
344
            matcher_id                => $sample_import_batch->{matcher_id},
Lines 428-434 subtest 'add_items_from_import_record() - addorderiso2709.pl' => sub { Link Here
428
            'barcodes'                  => [],
429
            'barcodes'                  => [],
429
            'enumchrons'                => []
430
            'enumchrons'                => []
430
        };
431
        };
431
        my $itemnumbers = Koha::MarcOrder::add_items_from_import_record(
432
433
        my $itemnumbers = Koha::Acquisition::MarcOrder::add_items_from_import_record(
432
            {
434
            {
433
                record_result      => $result->{record_result},
435
                record_result      => $result->{record_result},
434
                basket_id          => $basket->basketno,
436
                basket_id          => $basket->basketno,
Lines 543-549 subtest 'add_items_from_import_record() - addorderiso2709.pl' => sub { Link Here
543
            'barcodes'                  => [],
545
            'barcodes'                  => [],
544
            'enumchrons'                => []
546
            'enumchrons'                => []
545
        };
547
        };
546
        my $itemnumbers = Koha::MarcOrder::add_items_from_import_record(
548
        my $itemnumbers = Koha::Acquisition::MarcOrder::add_items_from_import_record(
547
            {
549
            {
548
                record_result      => $result->{record_result},
550
                record_result      => $result->{record_result},
549
                basket_id          => $basket->basketno,
551
                basket_id          => $basket->basketno,
Lines 620-626 subtest 'match_file_to_account' => sub { Link Here
620
622
621
    close $fh;
623
    close $fh;
622
624
623
    my $account1 = Koha::MarcOrderAccount->new(
625
    my $account1 = Koha::Acquisition::MarcOrderAccount->new(
624
        {
626
        {
625
            match_field => '975$p',
627
            match_field => '975$p',
626
            match_value => '12345',
628
            match_value => '12345',
Lines 629-635 subtest 'match_file_to_account' => sub { Link Here
629
        }
631
        }
630
    )->store;
632
    )->store;
631
633
632
    my $file_match = Koha::MarcOrder->match_file_to_account(
634
    my $file_match = Koha::Acquisition::MarcOrder->match_file_to_account(
633
        {
635
        {
634
            filename => $name,
636
            filename => $name,
635
            filepath => $name,
637
            filepath => $name,
Lines 639-645 subtest 'match_file_to_account' => sub { Link Here
639
641
640
    is( $file_match, 1, 'File matched correctly to the account' );
642
    is( $file_match, 1, 'File matched correctly to the account' );
641
643
642
    my $account2 = Koha::MarcOrderAccount->new(
644
    my $account2 = Koha::Acquisition::MarcOrderAccount->new(
643
        {
645
        {
644
            match_field => '975$p',
646
            match_field => '975$p',
645
            match_value => 'abcde',
647
            match_value => 'abcde',
Lines 648-654 subtest 'match_file_to_account' => sub { Link Here
648
        }
650
        }
649
    )->store;
651
    )->store;
650
652
651
    my $file_match2 = Koha::MarcOrder->match_file_to_account(
653
    my $file_match2 = Koha::Acquisition::MarcOrder->match_file_to_account(
652
        {
654
        {
653
            filename => $name,
655
            filename => $name,
654
            filepath => $name,
656
            filepath => $name,
Lines 677-683 subtest '_check_file_for_basket_name' => sub { Link Here
677
679
678
    close $fh;
680
    close $fh;
679
681
680
    my $account1 = Koha::MarcOrderAccount->new(
682
    my $account1 = Koha::Acquisition::MarcOrderAccount->new(
681
        {
683
        {
682
            basket_name_field => '975$p',
684
            basket_name_field => '975$p',
683
            encoding          => 'UTF-8',
685
            encoding          => 'UTF-8',
Lines 685-691 subtest '_check_file_for_basket_name' => sub { Link Here
685
        }
687
        }
686
    )->store;
688
    )->store;
687
689
688
    my $basket_name = Koha::MarcOrder::_check_file_for_basket_name(
690
    my $basket_name = Koha::Acquisition::MarcOrder::_check_file_for_basket_name(
689
        {
691
        {
690
            filename => $name,
692
            filename => $name,
691
            filepath => $name,
693
            filepath => $name,
Lines 695-701 subtest '_check_file_for_basket_name' => sub { Link Here
695
697
696
    is( $basket_name, "This is a basket", 'Basket name identified correctly' );
698
    is( $basket_name, "This is a basket", 'Basket name identified correctly' );
697
699
698
    my $account2 = Koha::MarcOrderAccount->new(
700
    my $account2 = Koha::Acquisition::MarcOrderAccount->new(
699
        {
701
        {
700
            basket_name_field => '975$z',
702
            basket_name_field => '975$z',
701
            encoding          => 'UTF-8',
703
            encoding          => 'UTF-8',
Lines 703-709 subtest '_check_file_for_basket_name' => sub { Link Here
703
        }
705
        }
704
    )->store;
706
    )->store;
705
707
706
    my $basket_name2 = Koha::MarcOrder::_check_file_for_basket_name(
708
    my $basket_name2 = Koha::Acquisition::MarcOrder::_check_file_for_basket_name(
707
        {
709
        {
708
            filename => $name,
710
            filename => $name,
709
            filepath => $name,
711
            filepath => $name,
Lines 715-717 subtest '_check_file_for_basket_name' => sub { Link Here
715
717
716
    $schema->storage->txn_rollback;
718
    $schema->storage->txn_rollback;
717
};
719
};
718
- 
720
721
subtest '_create_basket_for_file' => sub {
722
    plan tests => 2;
723
724
    $schema->storage->txn_begin;
725
726
    my $bookseller = Koha::Acquisition::Bookseller->new(
727
        {
728
            name         => "my vendor",
729
            address1     => "bookseller's address",
730
            phone        => "0123456",
731
            active       => 1,
732
            deliverytime => 5,
733
        }
734
    )->store;
735
736
    my $basket_count = Koha::Acquisition::Baskets->count;
737
738
    my $account1 = Koha::Acquisition::MarcOrderAccount->new(
739
        {
740
            match_field       => '975$p',
741
            match_value       => '12345',
742
            encoding          => 'UTF-8',
743
            description       => 'test',
744
            basket_name_field => undef
745
        }
746
    )->store;
747
748
    my $basketno = Koha::Acquisition::MarcOrder::_create_basket_for_file(
749
        {
750
            filename  => 'test_marc_file.marcxml',
751
            vendor_id => $bookseller->id,
752
            profile   => $account1
753
        }
754
    );
755
756
    my $new_basket_count = Koha::Acquisition::Baskets->count;
757
758
    is( $new_basket_count, $basket_count + 1, 'Basket was successfully created' );
759
760
    my $basket = Koha::Acquisition::Baskets->find($basketno);
761
762
    is( $basket->basketname, 'test_marc_file.marcxml', 'Basket was successfully created' );
763
764
    $schema->storage->txn_rollback;
765
};
766
767
subtest 'parse_input_into_order_line_fields' => sub {
768
    plan tests => 8;
769
770
    $schema->storage->txn_begin;
771
772
    my $bpid = C4::Budgets::AddBudgetPeriod(
773
        {
774
            budget_period_startdate => '2008-01-01', budget_period_enddate => '2008-12-31'
775
            , budget_period_active => 1
776
        }
777
    );
778
    my $budgetid = C4::Budgets::AddBudget(
779
        {
780
            budget_code      => "BC_1",
781
            budget_name      => "budget_name_test_1",
782
            budget_period_id => $bpid,
783
        }
784
    );
785
    my $budgetid2 = C4::Budgets::AddBudget(
786
        {
787
            budget_code      => "BC_2",
788
            budget_name      => "budget_name_test_2",
789
            budget_period_id => $bpid,
790
        }
791
    );
792
    my $fund1         = C4::Budgets::GetBudget($budgetid);
793
    my $fund2         = C4::Budgets::GetBudget($budgetid2);
794
    my $budget_code_1 = $fund1->{budget_code};
795
    my $budget_code_2 = $fund2->{budget_code};
796
797
    my $order_line_fields = Koha::Acquisition::MarcOrder::parse_input_into_order_line_fields(
798
        {
799
            agent        => 'cron',
800
            biblionumber => 1,
801
            budget_id    => 100,
802
            basket_id    => 101,
803
            fields       => {
804
                quantity        => 2,
805
                c_quantity      => 1,
806
                homebranches    => [ 1, 2 ],
807
                holdingbranches => undef,
808
                budget_codes    => [ $budget_code_1, $budget_code_2 ],
809
            }
810
        }
811
    );
812
813
    is(
814
        $order_line_fields->{loop_limit}, 2,
815
        "Quantity has been read correctly"
816
    );
817
    is( scalar( @{ $order_line_fields->{homebranch} } ),    2, "Home branches have been read correctly" );
818
    is( @{ $order_line_fields->{homebranch} }[0],           1, "Home branches has been read correctly" );
819
    is( scalar( @{ $order_line_fields->{holdingbranch} } ), 0, "Holding branches have been read correctly" );
820
    is( scalar( @{ $order_line_fields->{budget_code} } ),   2, "Budget codes have been read correctly" );
821
    is( @{ $order_line_fields->{budget_code} }[0],          $budget_code_1, "Budget codes has been read correctly" );
822
823
    # Test with no budget codes to check account budget_id assigned correctly
824
    $order_line_fields = Koha::Acquisition::MarcOrder::parse_input_into_order_line_fields(
825
        {
826
            agent        => 'cron',
827
            biblionumber => 1,
828
            budget_id    => 100,
829
            basket_id    => 101,
830
            fields       => {
831
                quantity        => 2,
832
                c_quantity      => 1,
833
                homebranches    => [ 1, 2 ],
834
                holdingbranches => undef,
835
                budget_codes    => [],
836
            }
837
        }
838
    );
839
840
    is( scalar( @{ $order_line_fields->{budget_code} } ), 2,   "Budget codes have been read correctly" );
841
    is( @{ $order_line_fields->{budget_code} }[0],        100, "Budget codes has been read correctly" );
842
843
    $schema->storage->txn_rollback;
844
};
845
846
subtest 'create_items_and_generate_order_hash' => sub {
847
    plan tests => 6;
848
849
    $schema->storage->txn_begin;
850
851
    my $bpid = C4::Budgets::AddBudgetPeriod(
852
        {
853
            budget_period_startdate => '2008-01-01', budget_period_enddate => '2008-12-31'
854
            , budget_period_active => 1
855
        }
856
    );
857
    my $budgetid = C4::Budgets::AddBudget(
858
        {
859
            budget_code      => "BC_1",
860
            budget_name      => "budget_name_test_1",
861
            budget_period_id => $bpid,
862
        }
863
    );
864
    my $budgetid2 = C4::Budgets::AddBudget(
865
        {
866
            budget_code      => "BC_2",
867
            budget_name      => "budget_name_test_2",
868
            budget_period_id => $bpid,
869
        }
870
    );
871
    my $fund1       = C4::Budgets::GetBudget($budgetid);
872
    my $fund2       = C4::Budgets::GetBudget($budgetid2);
873
    my $budget_id_1 = $fund1->{budget_id};
874
    my $budget_id_2 = $fund2->{budget_id};
875
876
    my $bookseller = Koha::Acquisition::Bookseller->new(
877
        {
878
            name         => "my vendor",
879
            address1     => "bookseller's address",
880
            phone        => "0123456",
881
            active       => 1,
882
            deliverytime => 5,
883
        }
884
    )->store;
885
886
    my $basket = $builder->build_object(
887
        {
888
            class => "Koha::Acquisition::Baskets",
889
            value => {
890
                booksellerid => $bookseller->id,
891
                create_items => 'ordering',
892
                is_standing  => 0,
893
                closedate    => undef
894
            }
895
        }
896
    );
897
898
    my $biblio     = $builder->build_sample_biblio;
899
    my $library    = $builder->build( { source => 'Branch' } );
900
    my $branchcode = $library->{branchcode};
901
902
    my $fields = {
903
        loop_limit   => 2,
904
        budget_code  => [ $budget_id_1, $budget_id_2 ],
905
        budget_id    => $budget_id_1,
906
        basket_id    => $basket->basketno,
907
        biblionumber => $biblio->biblionumber,
908
        homebranch   => [ $branchcode, $branchcode ],
909
        price        => [ 10,          8 ],
910
    };
911
912
    t::lib::Mocks::mock_preference( 'AcqCreateItem', 'ordering' );
913
914
    my $items_count  = Koha::Items->count;
915
    my $orders_count = Koha::Acquisition::Orders->count;
916
917
    my $order_line_details = Koha::Acquisition::MarcOrder::create_items_and_generate_order_hash(
918
        {
919
            agent           => 'cron',
920
            fields          => $fields,
921
            vendor          => $bookseller,
922
            active_currency => Koha::Acquisition::Currencies->get_active,
923
        }
924
    );
925
    my $new_items_count  = Koha::Items->count;
926
    my $new_orders_count = Koha::Acquisition::Orders->count;
927
928
    is( $new_items_count,  $items_count + 2,  'Items were successfully created' );
929
    is( $new_orders_count, $orders_count + 2, 'Orders were successfully created' );
930
931
    my @items = Koha::Items->search( { biblionumber => $biblio->biblionumber } )->as_list;
932
933
    foreach my $item (@items) {
934
        is( $item->homebranch, $branchcode, 'Item was created in correct branch' );
935
    }
936
937
    my @orderlines = sort { $a->budget_id <=> $b->budget_id }
938
        Koha::Acquisition::Orders->search( { biblionumber => $biblio->biblionumber } )->as_list;
939
940
    for ( my $i = 0 ; $i < ( scalar(@orderlines) ) ; $i++ ) {
941
        is( $orderlines[$i]->budget_id, @{ $fields->{budget_code} }[$i], 'Orderline was created with correct budget' );
942
    }
943
944
    $schema->storage->txn_rollback;
945
};
946
947
subtest '_create_item_fields_from_syspref' => sub {
948
    plan tests => 4;
949
950
    $schema->storage->txn_begin;
951
952
    t::lib::Mocks::mock_preference(
953
        'MarcItemFieldsToOrder', 'homebranch: 975$a
954
holdingbranch: 975$b
955
itype: 975$y
956
nonpublic_note: 975$x
957
public_note: 975$z
958
loc: 975$c
959
ccode: 975$8
960
notforloan: 975$7
961
uri: 975$u
962
copyno: 975$n
963
quantity: 975$q
964
budget_code: 975$h
965
price: 975$p
966
replacementprice: 975$v'
967
    );
968
969
    t::lib::Mocks::mock_preference(
970
        'MarcFieldsToOrder', 'price: 949$p
971
quantity: 949$q
972
budget_code: 949$h'
973
    );
974
975
    my $record = MARC::Record->new();
976
977
    $record->add_fields(
978
        [ '001', '1234' ],
979
        [
980
            '975', ' ', ' ', p => 10, q => 1, h => 1, a => 'CPL', b => 'CPL', y => 'Book',
981
            x => 'Private note', z => 'Public note', c => 'Shelf', 8 => 'ccode', 7 => 0,
982
            u => '12345abcde',   n => '12345',       v => 10
983
        ],
984
    );
985
    $record->add_fields(
986
        [ '001', '1234' ],
987
988
        [ '949', ' ', ' ', p => 10, q => 1, h => 1 ],
989
    );
990
991
    my $marc_item_fields_to_order = Koha::Acquisition::MarcOrder::_get_syspref_mappings(
992
        $record, 'MarcItemFieldsToOrder',
993
    );
994
995
    my $marc_fields_to_order = Koha::Acquisition::MarcOrder::_get_syspref_mappings(
996
        $record, 'MarcFieldsToOrder',
997
    );
998
999
    my $item_fields = Koha::Acquisition::MarcOrder::_create_item_fields_from_syspref(
1000
        {
1001
            marc_fields_to_order      => $marc_fields_to_order,
1002
            marc_item_fields_to_order => $marc_item_fields_to_order
1003
        }
1004
    );
1005
1006
    is(
1007
        @{ $item_fields->{itemprices} }[0], 10,
1008
        "Price has been read correctly"
1009
    );
1010
    is(
1011
        @{ $item_fields->{itypes} }[0], "Book",
1012
        "Itypes has been read correctly"
1013
    );
1014
    is( $item_fields->{quantity}, 1,  "Quantity has been read correctly" );
1015
    is( $item_fields->{c_price},  10, "MarcFieldsToOrder price has been read correctly" );
1016
1017
    $schema->storage->txn_rollback;
1018
1019
    }

Return to bug 38547