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