4 #script to receive orders
5 #written by chris@katipo.co.nz 24/2/2000
7 # Copyright 2000-2002 Katipo Communications
9 # This file is part of Koha.
11 # Koha is free software; you can redistribute it and/or modify it
12 # under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 3 of the License, or
14 # (at your option) any later version.
16 # Koha is distributed in the hope that it will be useful, but
17 # WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 # GNU General Public License for more details.
21 # You should have received a copy of the GNU General Public License
22 # along with Koha; if not, see <http://www.gnu.org/licenses>.
30 This script shows all order already receive and all pendings orders.
31 It permit to write a new order as 'received'.
39 to know on what supplier this script has to display receive order.
43 the id of this invoice.
49 The biblionumber of this order.
68 use C4
::Budgets qw
/ GetBudget GetBudgetHierarchy CanUserUseBudget GetBudgetPeriods /;
75 use Koha
::Acquisition
::Booksellers
;
76 use Koha
::Acquisition
::Currencies
;
77 use Koha
::Acquisition
::Orders
;
78 use Koha
::DateUtils
qw( dt_from_string );
84 my $dbh = C4
::Context
->dbh;
85 my $invoiceid = $input->param('invoiceid');
86 my $invoice = GetInvoice
($invoiceid);
87 my $booksellerid = $invoice->{booksellerid
};
88 my $freight = $invoice->{shipmentcost
};
89 my $ordernumber = $input->param('ordernumber');
91 my $bookseller = Koha
::Acquisition
::Booksellers
->find( $booksellerid );
93 $results = SearchOrders
({
94 ordernumber
=> $ordernumber
97 my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user
(
99 template_name
=> "acqui/orderreceive.tt",
102 authnotrequired
=> 0,
103 flagsrequired
=> {acquisition
=> 'order_receive'},
108 unless ( $results and @
$results) {
109 output_html_with_http_headers
$input, $cookie, $template->output;
113 # prepare the form for receiving
114 my $order = $results->[0];
115 my $order_object = Koha
::Acquisition
::Orders
->find( $ordernumber );
116 my $basket = $order_object->basket;
117 my $currencies = Koha
::Acquisition
::Currencies
->search;
118 my $active_currency = $currencies->get_active;
120 # Check if ACQ framework exists
121 my $acq_fw = GetMarcStructure
( 1, 'ACQ', { unsafe
=> 1 } );
123 $template->param('NoACQframework' => 1);
126 my $AcqCreateItem = $basket->effective_create_items;
127 if ($AcqCreateItem eq 'receiving') {
129 AcqCreateItemReceiving
=> 1,
130 UniqueItemFields
=> C4
::Context
->preference('UniqueItemFields'),
132 } elsif ($AcqCreateItem eq 'ordering') {
133 my $fw = ($acq_fw) ?
'ACQ' : '';
134 my $items = $order_object->items;
136 while ( my $i = $items->next ) {
137 my $item = $i->unblessed;
139 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.notforloan', authorised_value
=> $item->{notforloan
} });
140 $item->{notforloan
} = $descriptions->{lib
} // '';
142 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.restricted', authorised_value
=> $item->{restricted
} });
143 $item->{restricted
} = $descriptions->{lib
} // '';
145 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.location', authorised_value
=> $item->{location
} });
146 $item->{location
} = $descriptions->{lib
} // '';
148 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.ccode', authorised_value
=> $item->{ccode
} });
149 $item->{collection
} = $descriptions->{lib
} // '';
151 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.materials', authorised_value
=> $item->{materials
} });
152 $item->{materials
} = $descriptions->{lib
} // '';
154 my $itemtype = Koha
::ItemTypes
->find($i->effective_itemtype);
155 if (defined $itemtype) {
156 # We should not do that here, but call ->itemtype->description when needed instead
157 $item->{itemtype
} = $itemtype->description; # FIXME Should not it be translated_description?
161 $template->param(items
=> \
@items);
164 $order->{quantityreceived
} = '' if $order->{quantityreceived
} == 0;
166 my $unitprice = $order->{unitprice
};
168 if ( $bookseller->invoiceincgst ) {
169 $rrp = $order->{rrp_tax_included
};
170 $ecost = $order->{ecost_tax_included
};
171 unless ( $unitprice != 0 and defined $unitprice) {
172 $unitprice = $order->{ecost_tax_included
};
175 $rrp = $order->{rrp_tax_excluded
};
176 $ecost = $order->{ecost_tax_excluded
};
177 unless ( $unitprice != 0 and defined $unitprice) {
178 $unitprice = $order->{ecost_tax_excluded
};
183 if( defined $order->{tax_rate_on_receiving
} ) {
184 $tax_rate = $order->{tax_rate_on_receiving
} + 0.0;
186 $tax_rate = $order->{tax_rate_on_ordering
} + 0.0;
189 my $suggestion = GetSuggestionInfoFromBiblionumber
($order->{biblionumber
});
191 my $creator = Koha
::Patrons
->find( $order->{created_by
} );
193 my $budget = GetBudget
( $order->{budget_id
} );
195 my $datereceived = $order->{datereceived
} ? dt_from_string
( $order->{datereceived
} ) : dt_from_string
;
197 # get option values for gist syspref
198 my @gst_values = map {
200 }, split( '\|', C4
::Context
->preference("gist") );
202 my $order_internalnote = $order->{order_internalnote
};
203 my $order_vendornote = $order->{order_vendornote
};
204 if ( $order->{subscriptionid
} ) {
205 # Order from a subscription, we will display an history of what has been received
206 my $orders = Koha
::Acquisition
::Orders
->search(
208 subscriptionid
=> $order->{subscriptionid
},
209 parent_ordernumber
=> $order->{ordernumber
},
210 ordernumber
=> { '!=' => $order->{ordernumber
} }
213 if ( $order->{parent_ordernumber
} != $order->{ordernumber
} ) {
214 my $parent_order = Koha
::Acquisition
::Orders
->find($order->{parent_ordernumber
});
215 $order_internalnote = $parent_order->{order_internalnote
};
216 $order_vendornote = $parent_order->{order_vendornote
};
224 AcqCreateItem
=> $AcqCreateItem,
226 biblionumber
=> $order->{'biblionumber'},
227 ordernumber
=> $order->{'ordernumber'},
228 subscriptionid
=> $order->{subscriptionid
},
229 booksellerid
=> $order->{'booksellerid'},
231 name
=> $bookseller->name,
232 active_currency
=> $active_currency,
233 currencies
=> scalar $currencies->search({ rate
=> { '!=' => 1 } }),
234 invoiceincgst
=> $bookseller->invoiceincgst,
235 title
=> $order->{'title'},
236 author
=> $order->{'author'},
237 copyrightdate
=> $order->{'copyrightdate'},
238 isbn
=> $order->{'isbn'},
239 seriestitle
=> $order->{'seriestitle'},
240 bookfund
=> $budget->{budget_name
},
241 quantity
=> $order->{'quantity'},
242 quantityreceivedplus1
=> $order->{'quantityreceived'} + 1,
243 quantityreceived
=> $order->{'quantityreceived'},
245 replacementprice
=> $order->{'replacementprice'},
247 unitprice
=> $unitprice,
248 tax_rate
=> $tax_rate,
250 invoiceid
=> $invoice->{invoiceid
},
251 invoice
=> $invoice->{invoicenumber
},
252 datereceived
=> $datereceived,
253 order_internalnote
=> $order_internalnote,
254 order_vendornote
=> $order_vendornote,
255 suggestionid
=> $suggestion->{suggestionid
},
256 surnamesuggestedby
=> $suggestion->{surnamesuggestedby
},
257 firstnamesuggestedby
=> $suggestion->{firstnamesuggestedby
},
258 gst_values
=> \
@gst_values,
261 my $patron = Koha
::Patrons
->find( $loggedinuser )->unblessed;
263 my $periods = GetBudgetPeriods
( );
264 foreach my $period (@
$periods) {
265 if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) {
266 $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'};
268 next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'};
269 my $budget_hierarchy = GetBudgetHierarchy
( $period->{'budget_period_id'} );
271 foreach my $r ( @
{$budget_hierarchy} ) {
272 next unless ( CanUserUseBudget
( $patron, $r, $userflags ) );
273 if ( !defined $r->{budget_amount
} || $r->{budget_amount
} == 0 ) {
278 b_id
=> $r->{budget_id
},
279 b_txt
=> $r->{budget_name
},
280 b_sel
=> ( $r->{budget_id
} == $order->{budget_id
} ) ?
1 : 0,
284 @funds = sort { uc( $a->{b_txt
} ) cmp uc( $b->{b_txt
} ) } @funds;
288 'id' => $period->{'budget_period_id'},
289 'description' => $period->{'budget_period_description'},
294 $template->{'VARS'}->{'budget_loop'} = \
@budget_loop;
296 my $op = $input->param('op');
297 if ($op and $op eq 'edit'){
298 $template->param(edit
=> 1);
300 output_html_with_http_headers
$input, $cookie, $template->output;