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