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 $basket = Koha::Acquisition::Orders->find( $ordernumber )->basket;
116 my $active_currency = Koha::Acquisition::Currencies->get_active;
118 # Check if ACQ framework exists
119 my $acq_fw = GetMarcStructure( 1, 'ACQ', { unsafe => 1 } );
121 $template->param('NoACQframework' => 1);
124 my $AcqCreateItem = $basket->effective_create_items;
125 if ($AcqCreateItem eq 'receiving') {
127 AcqCreateItemReceiving => 1,
128 UniqueItemFields => C4::Context->preference('UniqueItemFields'),
130 } elsif ($AcqCreateItem eq 'ordering') {
131 my $fw = ($acq_fw) ? 'ACQ' : '';
132 my @itemnumbers = GetItemnumbersFromOrder($order->{ordernumber});
134 foreach (@itemnumbers) {
135 my $item = GetItem($_);
137 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.notforloan', authorised_value => $item->{notforloan} });
138 $item->{notforloan} = $descriptions->{lib} // '';
140 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.restricted', authorised_value => $item->{restricted} });
141 $item->{restricted} = $descriptions->{lib} // '';
143 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.location', authorised_value => $item->{location} });
144 $item->{location} = $descriptions->{lib} // '';
146 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.ccode', authorised_value => $item->{ccode} });
147 $item->{collection} = $descriptions->{lib} // '';
149 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.materials', authorised_value => $item->{materials} });
150 $item->{materials} = $descriptions->{lib} // '';
152 my $itemtype = Koha::ItemTypes->find( $item->{itype} );
153 if (defined $itemtype) {
154 $item->{itemtype} = $itemtype->description; # FIXME Should not it be translated_description?
158 $template->param(items => \@items);
161 $order->{quantityreceived} = '' if $order->{quantityreceived} == 0;
163 my $unitprice = $order->{unitprice};
165 if ( $bookseller->invoiceincgst ) {
166 $rrp = $order->{rrp_tax_included};
167 $ecost = $order->{ecost_tax_included};
168 unless ( $unitprice != 0 and defined $unitprice) {
169 $unitprice = $order->{ecost_tax_included};
172 $rrp = $order->{rrp_tax_excluded};
173 $ecost = $order->{ecost_tax_excluded};
174 unless ( $unitprice != 0 and defined $unitprice) {
175 $unitprice = $order->{ecost_tax_excluded};
180 if( defined $order->{tax_rate_on_receiving} ) {
181 $tax_rate = $order->{tax_rate_on_receiving} + 0.0;
183 $tax_rate = $order->{tax_rate_on_ordering} + 0.0;
186 my $suggestion = GetSuggestionInfoFromBiblionumber($order->{biblionumber});
188 my $authorisedby = $order->{authorisedby};
189 my $authorised_patron = Koha::Patrons->find( $authorisedby );
190 if ( $authorised_patron ) { # This should not happen unless there was a migration issue (or very old install?)
192 memberfirstname => $authorised_patron->firstname || "",
193 membersurname => $authorised_patron->surname || "",
197 my $budget = GetBudget( $order->{budget_id} );
199 my $datereceived = $order->{datereceived} ? dt_from_string( $order->{datereceived} ) : dt_from_string;
201 # get option values for gist syspref
202 my @gst_values = map {
204 }, split( '\|', C4::Context->preference("gist") );
207 AcqCreateItem => $AcqCreateItem,
209 biblionumber => $order->{'biblionumber'},
210 ordernumber => $order->{'ordernumber'},
211 subscriptionid => $order->{subscriptionid},
212 booksellerid => $order->{'booksellerid'},
214 name => $bookseller->name,
215 cur_active_sym => $active_currency->symbol,
216 cur_active => $active_currency->currency,
217 listincgst => $bookseller->listincgst,
218 invoiceincgst => $bookseller->invoiceincgst,
219 title => $order->{'title'},
220 author => $order->{'author'},
221 copyrightdate => $order->{'copyrightdate'},
222 isbn => $order->{'isbn'},
223 seriestitle => $order->{'seriestitle'},
224 bookfund => $budget->{budget_name},
225 quantity => $order->{'quantity'},
226 quantityreceivedplus1 => $order->{'quantityreceived'} + 1,
227 quantityreceived => $order->{'quantityreceived'},
230 unitprice => $unitprice,
231 tax_rate => $tax_rate,
232 invoiceid => $invoice->{invoiceid},
233 invoice => $invoice->{invoicenumber},
234 datereceived => $datereceived,
235 order_internalnote => $order->{order_internalnote},
236 order_vendornote => $order->{order_vendornote},
237 suggestionid => $suggestion->{suggestionid},
238 surnamesuggestedby => $suggestion->{surnamesuggestedby},
239 firstnamesuggestedby => $suggestion->{firstnamesuggestedby},
240 gst_values => \@gst_values,
243 my $patron = Koha::Patrons->find( $loggedinuser )->unblessed;
245 my $periods = GetBudgetPeriods( );
246 foreach my $period (@$periods) {
247 if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) {
248 $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'};
250 next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'};
251 my $budget_hierarchy = GetBudgetHierarchy( $period->{'budget_period_id'} );
253 foreach my $r ( @{$budget_hierarchy} ) {
254 next unless ( CanUserUseBudget( $patron, $r, $userflags ) );
255 if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) {
260 b_id => $r->{budget_id},
261 b_txt => $r->{budget_name},
262 b_sel => ( $r->{budget_id} == $order->{budget_id} ) ? 1 : 0,
266 @funds = sort { uc( $a->{b_txt} ) cmp uc( $b->{b_txt} ) } @funds;
270 'id' => $period->{'budget_period_id'},
271 'description' => $period->{'budget_period_description'},
276 $template->{'VARS'}->{'budget_loop'} = \@budget_loop;
278 my $op = $input->param('op');
279 if ($op and $op eq 'edit'){
280 $template->param(edit => 1);
282 output_html_with_http_headers $input, $cookie, $template->output;