Bug 11777: add regression test
[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 => 63;
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 ok( exists( @$orders[0]->{authorisedby} ), "SearchOrders: The authorised key exists (bug 11777)" );
93
94 ok( GetBudgetByOrderNumber($ordernumber1)->{'budget_id'} eq $budgetid, "GetBudgetByOrderNumber returns expected budget" );
95
96 C4::Acquisition::CloseBasket( $basketno );
97 my @lateorders = GetLateOrders(0);
98 my $order = $lateorders[0];
99 AddClaim( $order->{ordernumber} );
100 my $neworder = GetOrder( $order->{ordernumber} );
101 is( $neworder->{claimed_date}, strftime( "%Y-%m-%d", localtime(time) ), "AddClaim : Check claimed_date" );
102
103 my @expectedfields = qw( basketno
104                          biblionumber
105                          invoiceid
106                          budgetdate
107                          cancelledby
108                          closedate
109                          creationdate
110                          currency
111                          datecancellationprinted
112                          datereceived
113                          ecost
114                          entrydate
115                          firstname
116                          freight
117                          gstrate
118                          listprice
119                          notes
120                          ordernumber
121                          purchaseordernumber
122                          quantity
123                          quantityreceived
124                          rrp
125                          sort1
126                          sort2
127                          subscriptionid
128                          supplierreference
129                          surname
130                          timestamp
131                          title
132                          totalamount
133                          unitprice );
134 my $firstorder = $orders->[0];
135 for my $field ( @expectedfields ) {
136     ok( exists( $firstorder->{ $field } ), "This order has a $field field" );
137 }
138
139 # fake receiving the order
140 ModOrder({
141     ordernumber      => $firstorder->{ordernumber},
142     biblionumber     => $firstorder->{biblionumber},
143     quantityreceived => $firstorder->{quantity},
144 });
145 my $pendingorders = SearchOrders({
146     booksellerid => $booksellerid,
147     pending => 1
148 });
149 is(scalar(@$pendingorders), 2, 'retrieved 2 pending orders after receiving on one (bug 10723)');
150 my $allorders = SearchOrders({
151     booksellerid => $booksellerid,
152 });
153 is(scalar(@$allorders), 3, 'retrieved all 3 orders even after after receiving on one (bug 10723)');
154
155 my $invoiceid = AddInvoice(
156     invoicenumber => 'invoice',
157     booksellerid => $booksellerid,
158     unknown => "unknown"
159 );
160
161 my ($datereceived, $new_ordernumber) = ModReceiveOrder(
162     $biblionumber2,
163     $ordernumber2,
164     2,
165     undef,
166     12,
167     12,
168     $invoiceid,
169     42,
170     );
171 my $order2 = GetOrder( $ordernumber2 );
172 is($order2->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
173 is($order2->{'quantity'}, 40, '40 items on original order');
174 is($order2->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
175
176 $neworder = GetOrder( $new_ordernumber );
177 is($neworder->{'quantity'}, 2, '2 items on new order');
178 is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
179 is($neworder->{'budget_id'}, $budgetid, 'Budget on new order is unchanged');
180
181 my $budgetid2 = C4::Budgets::AddBudget(
182     {
183         budget_code => "budget_code_test_modrecv",
184         budget_name => "budget_name_test_modrecv",
185     }
186 );
187
188 ($datereceived, $new_ordernumber) = ModReceiveOrder(
189     $biblionumber2,
190     $ordernumber3,
191     2,
192     undef,
193     12,
194     12,
195     $invoiceid,
196     42,
197     $budgetid2
198     );
199
200 my $order3 = GetOrder( $ordernumber3 );
201 is($order3->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
202 is($order3->{'quantity'}, 2, '2 items on original order');
203 is($order3->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
204
205 $neworder = GetOrder( $new_ordernumber );
206 is($neworder->{'quantity'}, 2, '2 items on new order');
207 is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
208 is($neworder->{'budget_id'}, $budgetid2, 'Budget on new order is changed');
209
210 ($datereceived, $new_ordernumber) = ModReceiveOrder(
211     $biblionumber2,
212     $ordernumber3,
213     2,
214     undef,
215     12,
216     12,
217     $invoiceid,
218     42,
219     $budgetid2
220     );
221
222 $order3 = GetOrder( $ordernumber3 );
223 is($order3->{'quantityreceived'}, 2, 'Order not split up');
224 is($order3->{'quantity'}, 2, '2 items on order');
225 is($order3->{'budget_id'}, $budgetid2, 'Budget has changed');
226
227 $dbh->rollback;