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

(-)a/C4/Acquisition.pm (+25 lines)
Lines 30-35 use C4::Templates qw(gettemplate); Link Here
30
use Koha::DateUtils qw( dt_from_string );
30
use Koha::DateUtils qw( dt_from_string );
31
use Koha::Acquisition::Baskets;
31
use Koha::Acquisition::Baskets;
32
use Koha::Acquisition::Booksellers;
32
use Koha::Acquisition::Booksellers;
33
use Koha::Acquisition::Invoices;
33
use Koha::Acquisition::Orders;
34
use Koha::Acquisition::Orders;
34
use Koha::Biblios;
35
use Koha::Biblios;
35
use Koha::Exceptions;
36
use Koha::Exceptions;
Lines 2412-2417 asc is the default if omitted Link Here
2412
sub GetInvoices {
2413
sub GetInvoices {
2413
    my %args = @_;
2414
    my %args = @_;
2414
2415
2416
    my $additional_fields = $args{additional_fields} // [];
2417
    my $matching_invoice_ids_for_additional_fields = [];
2418
    if ( @$additional_fields ) {
2419
        my @invoices = Koha::Acquisition::Invoices->filter_by_additional_fields($additional_fields)->as_list;
2420
2421
        return () unless @invoices;
2422
2423
        $matching_invoice_ids_for_additional_fields = [ map {
2424
            $_->id
2425
        } @invoices ];
2426
    }
2427
2415
    my @columns = qw(invoicenumber booksellerid shipmentdate billingdate
2428
    my @columns = qw(invoicenumber booksellerid shipmentdate billingdate
2416
        closedate shipmentcost shipmentcost_budgetid);
2429
        closedate shipmentcost shipmentcost_budgetid);
2417
2430
Lines 2504-2509 sub GetInvoices { Link Here
2504
    }
2517
    }
2505
2518
2506
    $query .= " WHERE " . join(" AND ", @bind_strs) if @bind_strs;
2519
    $query .= " WHERE " . join(" AND ", @bind_strs) if @bind_strs;
2520
2521
    # Handle additional fields filtering
2522
    if ( @$additional_fields ) {
2523
        my $operator = ' WHERE';
2524
        if ( @bind_strs ) { # there's a WHERE already
2525
            $operator = ' AND';
2526
        }
2527
        $query .= "$operator aqinvoices.invoiceid IN ("
2528
            . join( ', ', @$matching_invoice_ids_for_additional_fields )
2529
        . ')';
2530
    }
2531
2507
    $query .= " GROUP BY aqinvoices.invoiceid, aqinvoices.invoicenumber, aqinvoices.booksellerid, aqinvoices.shipmentdate, aqinvoices.billingdate, aqinvoices.closedate, aqinvoices.shipmentcost, aqinvoices.shipmentcost_budgetid, aqinvoices.message_id, aqbooksellers.name";
2532
    $query .= " GROUP BY aqinvoices.invoiceid, aqinvoices.invoicenumber, aqinvoices.booksellerid, aqinvoices.shipmentdate, aqinvoices.billingdate, aqinvoices.closedate, aqinvoices.shipmentcost, aqinvoices.shipmentcost_budgetid, aqinvoices.message_id, aqbooksellers.name";
2508
2533
2509
    if($args{order_by}) {
2534
    if($args{order_by}) {
(-)a/t/db_dependent/Acquisition.t (-3 / +71 lines)
Lines 19-25 use Modern::Perl; Link Here
19
19
20
use POSIX qw(strftime);
20
use POSIX qw(strftime);
21
21
22
use Test::More tests => 70;
22
use Test::More tests => 71;
23
use t::lib::Mocks;
23
use t::lib::Mocks;
24
use Koha::Database;
24
use Koha::Database;
25
use Koha::DateUtils qw(dt_from_string output_pref);
25
use Koha::DateUtils qw(dt_from_string output_pref);
Lines 28-34 use Koha::Acquisition::Basket; Link Here
28
use MARC::File::XML ( BinaryEncoding => 'utf8', RecordFormat => 'MARC21' );
28
use MARC::File::XML ( BinaryEncoding => 'utf8', RecordFormat => 'MARC21' );
29
29
30
BEGIN {
30
BEGIN {
31
    use_ok('C4::Acquisition', qw( NewBasket GetBasket AddInvoice GetInvoice ModReceiveOrder SearchOrders GetOrder GetHistory ModOrder get_rounding_sql get_rounded_price ReopenBasket ModBasket ModBasketHeader ModBasketUsers ));
31
    use_ok('C4::Acquisition', qw( NewBasket GetBasket AddInvoice GetInvoice GetInvoices ModReceiveOrder SearchOrders GetOrder GetHistory ModOrder get_rounding_sql get_rounded_price ReopenBasket ModBasket ModBasketHeader ModBasketUsers ));
32
    use_ok('C4::Biblio', qw( AddBiblio GetMarcSubfieldStructure ));
32
    use_ok('C4::Biblio', qw( AddBiblio GetMarcSubfieldStructure ));
33
    use_ok('C4::Budgets', qw( AddBudgetPeriod AddBudget GetBudget GetBudgetByOrderNumber GetBudgetsReport GetBudgets GetBudgetReport ));
33
    use_ok('C4::Budgets', qw( AddBudgetPeriod AddBudget GetBudget GetBudgetByOrderNumber GetBudgetsReport GetBudgets GetBudgetReport ));
34
    use_ok('Koha::Acquisition::Orders');
34
    use_ok('Koha::Acquisition::Orders');
Lines 983-985 subtest 'Acquisition logging' => sub { Link Here
983
};
983
};
984
984
985
$schema->storage->txn_rollback();
985
$schema->storage->txn_rollback();
986
- 
986
987
subtest 'GetInvoices() tests with additional fields' => sub {
988
989
    plan tests => 7;
990
991
    $schema->storage->txn_begin;
992
993
    my $builder = t::lib::TestBuilder->new;
994
995
    my $invoice_1 = $builder->build_object(
996
        {
997
             class => 'Koha::Acquisition::Invoices',
998
             value => {
999
                invoicenumber => 'whataretheodds1'
1000
             }
1001
        }
1002
    );
1003
    my $invoice_2 = $builder->build_object(
1004
        {
1005
             class => 'Koha::Acquisition::Invoices',
1006
             value => {
1007
                invoicenumber => 'whataretheodds2'
1008
             }
1009
        }
1010
    );
1011
1012
1013
    my $invoices = [ GetInvoices( invoicenumber => 'whataretheodds' ) ];
1014
    is( scalar @{$invoices}, 2, 'Two invoices retrieved' );
1015
    is( $invoices->[0]->{invoiceid}, $invoice_1->id );
1016
    is( $invoices->[1]->{invoiceid}, $invoice_2->id );
1017
1018
    my $additional_field_1 = $builder->build_object(
1019
        {   class => 'Koha::AdditionalFields',
1020
            value => {
1021
                tablename                 => 'aqinvoices',
1022
                authorised_value_category => "",
1023
            }
1024
        }
1025
    );
1026
1027
    my $additional_field_2 = $builder->build_object(
1028
        {   class => 'Koha::AdditionalFields',
1029
            value => {
1030
                tablename                 => 'aqinvoices',
1031
                authorised_value_category => "",
1032
            }
1033
        }
1034
    );
1035
1036
    $invoice_1->set_additional_fields([ { id => $additional_field_1->id, value => 'Ya-Hey' } ]);
1037
    $invoice_2->set_additional_fields([ { id => $additional_field_2->id, value => "Hey ho let's go" } ]);
1038
1039
    $invoices = [ GetInvoices(
1040
        invoicenumber => 'whataretheodds',
1041
        additional_fields => [{ id => $additional_field_1->id, value => 'Ya-Hey' }]
1042
    )];
1043
    is( scalar @{$invoices}, 1, 'One invoice retrieved' );
1044
    is( $invoices->[0]->{invoiceid}, $invoice_1->id, 'Ya-Hey' );
1045
1046
    $invoices = [ GetInvoices(
1047
        invoicenumber => 'whataretheodds',
1048
        additional_fields => [{ id => $additional_field_2->id, value => "Hey ho let's go" }]
1049
    )];
1050
    is( scalar @{$invoices}, 1, 'One invoice retrieved' );
1051
    is( $invoices->[0]->{invoiceid}, $invoice_2->id, "Hey ho let's go" );
1052
1053
    $schema->storage->txn_rollback;
1054
};

Return to bug 31115