Bug 17600: Standardize our EXPORT_OK
[srvgit] / t / db_dependent / Acquisition / StandingOrders.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4
5 use Test::More tests => 14;
6 use C4::Context;
7 use C4::Acquisition qw( NewBasket GetBasket SearchOrders AddInvoice ModReceiveOrder CancelReceipt );
8 use C4::Biblio qw( AddBiblio );
9 use C4::Items;
10 use C4::Budgets;
11 use Koha::Acquisition::Orders;
12 use t::lib::Mocks;
13 use t::lib::TestBuilder;
14
15 my $schema = Koha::Database->schema;
16 $schema->storage->txn_begin;
17 my $builder = t::lib::TestBuilder->new;
18
19 # Set up configuration data
20
21 my $branch = $builder->build( { source => 'Branch' } );
22 my $bookseller = $builder->build( { source => 'Aqbookseller' } );
23 my $budget = $builder->build( { source => 'Aqbudget' } );
24 my $staffmember = $builder->build( { source => 'Borrower' } );
25 my $curcode = $builder->build( { source => 'Currency' })->{currencycode};
26
27 # Create baskets and orders
28
29 my $basketno = NewBasket(
30     $bookseller->{id},
31     $staffmember->{borrowernumber},
32     'Standing order basket', # basketname
33     '', # basketnote
34     '', # basketbooksellernote
35     undef, # basketcontractnumber
36     $branch->{branchcode}, # deliveryplace
37     $branch->{branchcode}, # billingplace
38     1 # is_standing
39 );
40
41 my $nonstandingbasketno = NewBasket(
42     $bookseller->{id},
43     $staffmember->{borrowernumber},
44     'Non-standing order basket', # basketname
45     '', # basketnote
46     '', # basketbooksellernote
47     undef, # basketcontractnumber
48     $branch->{branchcode}, # deliveryplace
49     $branch->{branchcode}, # billingplace
50     0 # is_standing
51 );
52
53 my $basket = GetBasket($basketno);
54
55 is( $basket->{is_standing}, 1, 'basket correctly created as standing order basket' );
56
57 my ( $biblionumber, $biblioitemnumber ) = C4::Biblio::AddBiblio( MARC::Record->new, '' );
58
59
60 my $ordernumber = Koha::Acquisition::Order->new(
61     {
62         basketno                 => $basketno,
63         biblionumber             => $biblionumber,
64         budget_id                => $budget->{budget_id},
65         currency                 => $curcode,
66         quantity                 => 0,
67         rrp                      => 42,
68         rrp_tax_included         => 42,
69         rrp_tax_excluded         => 42,
70         ecost                    => 22,
71         ecost_tax_included       => 22,
72         ecost_tax_excluded       => 22,
73         unitprice                => 12,
74         unitprice_tax_included   => 12,
75         unitprice_tax_excluded   => 12,
76         tax_rate_on_ordering     => 0,
77         tax_rate_on_receiving    => 0,
78     }
79 )->store->ordernumber;
80
81 isnt( $ordernumber, undef, 'standing order successfully created' );
82
83 my $search_orders = SearchOrders( {
84     basketno => $basketno,
85     pending => 1,
86     ordered => 1,
87 } );
88
89 ok(
90     scalar @$search_orders == 1 && $search_orders->[0]->{ordernumber} == $ordernumber,
91     'standing order counts as a pending/ordered order'
92 );
93
94 my $invoiceid = AddInvoice(
95     invoicenumber => 'invoice',
96     booksellerid  => $bookseller->{id},
97     unknown       => "unknown"
98 );
99
100 my $order = Koha::Acquisition::Orders->find( $ordernumber );
101
102 my ( $datereceived, $new_ordernumber ) = ModReceiveOrder(
103     {
104         biblionumber     => $biblionumber,
105         order            => $order->unblessed,
106         quantityreceived => 2,
107         invoiceid        => $invoiceid,
108     }
109 );
110
111 isnt( $ordernumber, $new_ordernumber, "standing order split on receive" );
112
113 #order has been updated, refetch
114 $order = Koha::Acquisition::Orders->find( $ordernumber );
115 my $neworder = Koha::Acquisition::Orders->find( $new_ordernumber );
116
117 is( $order->orderstatus, 'partial', 'original order set to partially received' );
118 is( $order->quantity, 1, 'original order quantity unchanged' );
119 is( $order->quantityreceived, 0, 'original order has no received items' );
120 isnt( $order->unitprice, 12, 'original order does not get cost' );
121 is( $neworder->orderstatus, 'complete', 'new order set to complete' );
122 is( $neworder->quantityreceived, 2, 'new order has received items' );
123 cmp_ok( $neworder->unitprice, '==', 12, 'new order does get cost' );
124
125 $search_orders = SearchOrders( {
126     basketno => $basketno,
127     pending => 1,
128     ordered => 1,
129 } );
130
131 is( scalar @$search_orders, 1, 'only one pending order after receive' );
132 is( $search_orders->[0]->{ordernumber}, $ordernumber, 'original order is only pending order' );
133
134 CancelReceipt($new_ordernumber);
135 $order = Koha::Acquisition::Orders->find( $ordernumber );
136 is( $order->quantity, 1, 'CancelReceipt should not have increased the quantity if order is standing');
137
138
139 $schema->storage->txn_rollback();