8b737bae317ab31bafba65cfad87e4eea971681f
[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(
152     invoicenumber => 'invoice',
153     booksellerid => $booksellerid,
154     unknown => "unknown"
155 );
156
157 my ($datereceived, $new_ordernumber) = ModReceiveOrder(
158     $biblionumber2,
159     $ordernumber2,
160     2,
161     undef,
162     12,
163     12,
164     $invoiceid,
165     42,
166     );
167 my $order2 = GetOrder( $ordernumber2 );
168 is($order2->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
169 is($order2->{'quantity'}, 40, '40 items on original order');
170 is($order2->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
171
172 $neworder = GetOrder( $new_ordernumber );
173 is($neworder->{'quantity'}, 2, '2 items on new order');
174 is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
175 is($neworder->{'budget_id'}, $budgetid, 'Budget on new order is unchanged');
176
177 my $budgetid2 = C4::Budgets::AddBudget(
178     {
179         budget_code => "budget_code_test_modrecv",
180         budget_name => "budget_name_test_modrecv",
181     }
182 );
183
184 ($datereceived, $new_ordernumber) = ModReceiveOrder(
185     $biblionumber2,
186     $ordernumber3,
187     2,
188     undef,
189     12,
190     12,
191     $invoiceid,
192     42,
193     $budgetid2
194     );
195
196 my $order3 = GetOrder( $ordernumber3 );
197 is($order3->{'quantityreceived'}, 0, 'Splitting up order did not receive any on original order');
198 is($order3->{'quantity'}, 2, '2 items on original order');
199 is($order3->{'budget_id'}, $budgetid, 'Budget on original order is unchanged');
200
201 $neworder = GetOrder( $new_ordernumber );
202 is($neworder->{'quantity'}, 2, '2 items on new order');
203 is($neworder->{'quantityreceived'}, 2, 'Splitting up order received items on new order');
204 is($neworder->{'budget_id'}, $budgetid2, 'Budget on new order is changed');
205
206 ($datereceived, $new_ordernumber) = ModReceiveOrder(
207     $biblionumber2,
208     $ordernumber3,
209     2,
210     undef,
211     12,
212     12,
213     $invoiceid,
214     42,
215     $budgetid2
216     );
217
218 $order3 = GetOrder( $ordernumber3 );
219 is($order3->{'quantityreceived'}, 2, 'Order not split up');
220 is($order3->{'quantity'}, 2, '2 items on order');
221 is($order3->{'budget_id'}, $budgetid2, 'Budget has changed');
222
223 $dbh->rollback;