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.
69 use C4::Budgets qw/ GetBudget GetBudgetHierarchy CanUserUseBudget GetBudgetPeriods /;
76 use Koha::Acquisition::Booksellers;
77 use Koha::DateUtils qw( dt_from_string );
82 my $dbh = C4::Context->dbh;
83 my $invoiceid = $input->param('invoiceid');
84 my $invoice = GetInvoice($invoiceid);
85 my $booksellerid = $invoice->{booksellerid};
86 my $freight = $invoice->{shipmentcost};
87 my $ordernumber = $input->param('ordernumber');
89 my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
91 $results = SearchOrders({
92 ordernumber => $ordernumber
95 my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
97 template_name => "acqui/orderreceive.tt",
100 authnotrequired => 0,
101 flagsrequired => {acquisition => 'order_receive'},
106 unless ( $results and @$results) {
107 output_html_with_http_headers $input, $cookie, $template->output;
111 # prepare the form for receiving
112 my $order = $results->[0];
114 # Check if ACQ framework exists
115 my $acq_fw = GetMarcStructure( 1, 'ACQ', { unsafe => 1 } );
117 $template->param('NoACQframework' => 1);
120 my $AcqCreateItem = C4::Context->preference('AcqCreateItem');
121 if ($AcqCreateItem eq 'receiving') {
123 AcqCreateItemReceiving => 1,
124 UniqueItemFields => C4::Context->preference('UniqueItemFields'),
126 } elsif ($AcqCreateItem eq 'ordering') {
127 my $fw = ($acq_fw) ? 'ACQ' : '';
128 my @itemnumbers = GetItemnumbersFromOrder($order->{ordernumber});
130 foreach (@itemnumbers) {
131 my $item = GetItem($_);
133 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.notforloan', authorised_value => $item->{notforloan} });
134 $item->{notforloan} = $descriptions->{lib} // '';
136 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.restricted', authorised_value => $item->{restricted} });
137 $item->{restricted} = $descriptions->{lib} // '';
139 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.location', authorised_value => $item->{location} });
140 $item->{location} = $descriptions->{lib} // '';
142 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.collection', authorised_value => $item->{collection} });
143 $item->{collection} = $descriptions->{lib} // '';
145 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.materials', authorised_value => $item->{materials} });
146 $item->{materials} = $descriptions->{lib} // '';
148 my $itemtype = Koha::ItemsTypes->find( $item->{itype} );
149 $item->{itemtype} = $itemtype->description; # FIXME Should not it be translated_description?
152 $template->param(items => \@items);
155 $order->{quantityreceived} = '' if $order->{quantityreceived} == 0;
157 my $unitprice = $order->{unitprice};
159 if ( $bookseller->invoiceincgst ) {
160 $rrp = $order->{rrp_tax_included};
161 $ecost = $order->{ecost_tax_included};
162 unless ( $unitprice != 0 and defined $unitprice) {
163 $unitprice = $order->{ecost_tax_included};
166 $rrp = $order->{rrp_tax_excluded};
167 $ecost = $order->{ecost_tax_excluded};
168 unless ( $unitprice != 0 and defined $unitprice) {
169 $unitprice = $order->{ecost_tax_excluded};
174 if( defined $order->{tax_rate_on_receiving} ) {
175 $tax_rate = $order->{tax_rate_on_receiving} + 0.0;
177 $tax_rate = $order->{tax_rate_on_ordering} + 0.0;
180 my $suggestion = GetSuggestionInfoFromBiblionumber($order->{biblionumber});
182 my $authorisedby = $order->{authorisedby};
183 my $member = GetMember( borrowernumber => $authorisedby );
185 my $budget = GetBudget( $order->{budget_id} );
187 my $datereceived = $order->{datereceived} ? dt_from_string( $order->{datereceived} ) : dt_from_string;
189 # get option values for gist syspref
190 my @gst_values = map {
192 }, split( '\|', C4::Context->preference("gist") );
195 AcqCreateItem => $AcqCreateItem,
197 biblionumber => $order->{'biblionumber'},
198 ordernumber => $order->{'ordernumber'},
199 subscriptionid => $order->{subscriptionid},
200 booksellerid => $order->{'booksellerid'},
202 name => $bookseller->name,
203 title => $order->{'title'},
204 author => $order->{'author'},
205 copyrightdate => $order->{'copyrightdate'},
206 isbn => $order->{'isbn'},
207 seriestitle => $order->{'seriestitle'},
208 bookfund => $budget->{budget_name},
209 quantity => $order->{'quantity'},
210 quantityreceivedplus1 => $order->{'quantityreceived'} + 1,
211 quantityreceived => $order->{'quantityreceived'},
214 unitprice => $unitprice,
215 tax_rate => $tax_rate,
216 memberfirstname => $member->{firstname} || "",
217 membersurname => $member->{surname} || "",
218 invoiceid => $invoice->{invoiceid},
219 invoice => $invoice->{invoicenumber},
220 datereceived => $datereceived,
221 order_internalnote => $order->{order_internalnote},
222 order_vendornote => $order->{order_vendornote},
223 suggestionid => $suggestion->{suggestionid},
224 surnamesuggestedby => $suggestion->{surnamesuggestedby},
225 firstnamesuggestedby => $suggestion->{firstnamesuggestedby},
226 gst_values => \@gst_values,
229 my $borrower = GetMember( 'borrowernumber' => $loggedinuser );
231 my $periods = GetBudgetPeriods( );
232 foreach my $period (@$periods) {
233 if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) {
234 $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'};
236 next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'};
237 my $budget_hierarchy = GetBudgetHierarchy( $period->{'budget_period_id'} );
239 foreach my $r ( @{$budget_hierarchy} ) {
240 next unless ( CanUserUseBudget( $borrower, $r, $userflags ) );
241 if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) {
246 b_id => $r->{budget_id},
247 b_txt => $r->{budget_name},
248 b_sel => ( $r->{budget_id} == $order->{budget_id} ) ? 1 : 0,
252 @funds = sort { uc( $a->{b_txt} ) cmp uc( $b->{b_txt} ) } @funds;
256 'id' => $period->{'budget_period_id'},
257 'description' => $period->{'budget_period_description'},
262 $template->{'VARS'}->{'budget_loop'} = \@budget_loop;
264 my $op = $input->param('op');
265 if ($op and $op eq 'edit'){
266 $template->param(edit => 1);
268 output_html_with_http_headers $input, $cookie, $template->output;