Bug 11439: (follow up) add missing rollback call
[koha.git] / t / db_dependent / Acquisition.t
1 #!/usr/bin/perl
2 #
3 # This Koha test module is a stub!
4 # Add more tests here!!!
5
6 use Modern::Perl;
7 use POSIX qw(strftime);
8
9 use C4::Bookseller qw( GetBookSellerFromId );
10
11 use Test::More tests => 62;
12
13 BEGIN {
14     use_ok('C4::Acquisition');
15     use_ok('C4::Bookseller');
16     use_ok('C4::Biblio');
17     use_ok('C4::Budgets');
18     use_ok('C4::Bookseller');
19 }
20
21 my $dbh = C4::Context->dbh;
22 $dbh->{AutoCommit} = 0;
23 $dbh->{RaiseError} = 1;
24
25 my $booksellerid = C4::Bookseller::AddBookseller(
26     {
27         name => "my vendor",
28         address1 => "bookseller's address",
29         phone => "0123456",
30         active => 1,
31         deliverytime => 5,
32     }
33 );
34
35 my $booksellerinfo = C4::Bookseller::GetBookSellerFromId( $booksellerid );
36
37 is($booksellerinfo->{deliverytime}, 5, 'set deliverytime when creating vendor (Bug 10556)');
38
39 my ($basket, $basketno);
40 ok($basketno = NewBasket($booksellerid, 1), "NewBasket(  $booksellerid , 1  ) returns $basketno");
41 ok($basket   = GetBasket($basketno), "GetBasket($basketno) returns $basket");
42
43 my $budgetid = C4::Budgets::AddBudget(
44     {
45         budget_code => "budget_code_test_getordersbybib",
46         budget_name => "budget_name_test_getordersbybib",
47     }
48 );
49 my $budget = C4::Budgets::GetBudget( $budgetid );
50
51 my ($ordernumber1, $ordernumber2, $ordernumber3);
52 my ($biblionumber1, $biblioitemnumber1) = AddBiblio(MARC::Record->new, '');
53 my ($biblionumber2, $biblioitemnumber2) = AddBiblio(MARC::Record->new, '');
54 ( undef, $ordernumber1 ) = C4::Acquisition::NewOrder(
55     {
56         basketno => $basketno,
57         quantity => 24,
58         biblionumber => $biblionumber1,
59         budget_id => $budget->{budget_id},
60     }
61 );
62
63 ( undef, $ordernumber2 ) = C4::Acquisition::NewOrder(
64     {
65         basketno => $basketno,
66         quantity => 42,
67         biblionumber => $biblionumber2,
68         budget_id => $budget->{budget_id},
69     }
70 );
71
72 ( undef, $ordernumber3 ) = C4::Acquisition::NewOrder(
73     {
74         basketno => $basketno,
75         quantity => 4,
76         biblionumber => $biblionumber2,
77         budget_id => $budget->{budget_id},
78         ecost => 42,
79         rrp => 42,
80     }
81 );
82
83 my $orders = SearchOrders({
84     booksellerid => $booksellerid,
85     pending => 1
86 });
87 isa_ok( $orders, 'ARRAY' );
88 is(scalar(@$orders), 3, 'retrieved 3 pending orders');
89
90 ok( exists( @$orders[0]->{basketgroupid} ), "SearchOrder: The basketgroupid key exists" );
91 ok( exists( @$orders[0]->{basketgroupname} ), "SearchOrder: The basketgroupname key exists" );
92
93 ok( GetBudgetByOrderNumber($ordernumber1)->{'budget_id'} eq $budgetid, "GetBudgetByOrderNumber returns expected budget" );
94
95 C4::Acquisition::CloseBasket( $basketno );
96 my @lateorders = GetLateOrders(0);
97 my $order = $lateorders[0];
98 AddClaim( $order->{ordernumber} );
99 my $neworder = GetOrder( $order->{ordernumber} );
100 is( $neworder->{claimed_date}, strftime( "%Y-%m-%d", localtime(time) ), "AddClaim : Check claimed_date" );
101
102 my @expectedfields = qw( basketno
103                          biblionumber
104                          invoiceid
105                          budgetdate
106                          cancelledby
107                          closedate
108                          creationdate
109                          currency
110                          datecancellationprinted
111                          datereceived
112                          ecost
113                          entrydate
114                          firstname
115                          freight
116                          gstrate
117                          listprice
118                          notes
119                          ordernumber
120                          purchaseordernumber
121                          quantity
122                          quantityreceived
123                          rrp
124                          sort1
125                          sort2
126                          subscriptionid
127                          supplierreference
128                          surname
129                          timestamp
130                          title
131                          totalamount
132                          unitprice );
133 my $firstorder = $orders->[0];
134 for my $field ( @expectedfields ) {
135     ok( exists( $firstorder->{ $field } ), "This order has a $field field" );
136 }
137
138 # fake receiving the order
139 ModOrder({
140     ordernumber      => $firstorder->{ordernumber},
141     biblionumber     => $firstorder->{biblionumber},
142     quantityreceived => $firstorder->{quantity},
143 });
144 my $pendingorders = SearchOrders({
145     booksellerid => $booksellerid,
146     pending => 1
147 });
148 is(scalar(@$pendingorders), 2, 'retrieved 2 pending orders after receiving on one (bug 10723)');
149 my $allorders = SearchOrders({
150     booksellerid => $booksellerid,
151 });
152 is(scalar(@$allorders), 3, 'retrieved all 3 orders even after after receiving on one (bug 10723)');
153
154 my $invoiceid = AddInvoice(
155     invoicenumber => 'invoice',
156     booksellerid => $booksellerid,
157     unknown => "unknown"
158 );
159
160 my ($datereceived, $new_ordernumber) = ModReceiveOrder(
161     $biblionumber2,
162     $ordernumber2,
163     2,
164     undef,
165     12,
166     12,
167     $invoiceid,
168     42,
169     );
170 my $order2 = GetOrder( $ordernumber2 );
171 is($order2->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
172 is($order2->{'quantity'}, 40, '40 items on original order');
173 is($order2->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
174
175 $neworder = GetOrder( $new_ordernumber );
176 is($neworder->{'quantity'}, 2, '2 items on new order');
177 is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
178 is($neworder->{'budget_id'}, $budgetid, 'Budget on new order is unchanged');
179
180 my $budgetid2 = C4::Budgets::AddBudget(
181     {
182         budget_code => "budget_code_test_modrecv",
183         budget_name => "budget_name_test_modrecv",
184     }
185 );
186
187 ($datereceived, $new_ordernumber) = ModReceiveOrder(
188     $biblionumber2,
189     $ordernumber3,
190     2,
191     undef,
192     12,
193     12,
194     $invoiceid,
195     42,
196     $budgetid2
197     );
198
199 my $order3 = GetOrder( $ordernumber3 );
200 is($order3->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
201 is($order3->{'quantity'}, 2, '2 items on original order');
202 is($order3->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
203
204 $neworder = GetOrder( $new_ordernumber );
205 is($neworder->{'quantity'}, 2, '2 items on new order');
206 is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
207 is($neworder->{'budget_id'}, $budgetid2, 'Budget on new order is changed');
208
209 ($datereceived, $new_ordernumber) = ModReceiveOrder(
210     $biblionumber2,
211     $ordernumber3,
212     2,
213     undef,
214     12,
215     12,
216     $invoiceid,
217     42,
218     $budgetid2
219     );
220
221 $order3 = GetOrder( $ordernumber3 );
222 is($order3->{'quantityreceived'}, 2, 'Order not split up');
223 is($order3->{'quantity'}, 2, '2 items on order');
224 is($order3->{'budget_id'}, $budgetid2, 'Budget has changed');
225
226 $dbh->rollback;