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 /;
75 use Koha::Acquisition::Booksellers;
76 use Koha::DateUtils qw( dt_from_string );
80 my $dbh = C4::Context->dbh;
81 my $invoiceid = $input->param('invoiceid');
82 my $invoice = GetInvoice($invoiceid);
83 my $booksellerid = $invoice->{booksellerid};
84 my $freight = $invoice->{shipmentcost};
85 my $ordernumber = $input->param('ordernumber');
87 my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
89 $results = SearchOrders({
90 ordernumber => $ordernumber
93 my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
95 template_name => "acqui/orderreceive.tt",
99 flagsrequired => {acquisition => 'order_receive'},
104 unless ( $results and @$results) {
105 output_html_with_http_headers $input, $cookie, $template->output;
109 # prepare the form for receiving
110 my $order = $results->[0];
112 # Check if ACQ framework exists
113 my $acq_fw = GetMarcStructure( 1, 'ACQ', { unsafe => 1 } );
115 $template->param('NoACQframework' => 1);
118 my $AcqCreateItem = C4::Context->preference('AcqCreateItem');
119 if ($AcqCreateItem eq 'receiving') {
121 AcqCreateItemReceiving => 1,
122 UniqueItemFields => C4::Context->preference('UniqueItemFields'),
124 } elsif ($AcqCreateItem eq 'ordering') {
125 my $fw = ($acq_fw) ? 'ACQ' : '';
126 my @itemnumbers = GetItemnumbersFromOrder($order->{ordernumber});
128 foreach (@itemnumbers) {
129 my $item = GetItem($_);
131 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.notforloan', authorised_value => $item->{notforloan} });
132 $item->{notforloan} = $descriptions->{lib} // '';
134 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.restricted', authorised_value => $item->{restricted} });
135 $item->{restricted} = $descriptions->{lib} // '';
137 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.location', authorised_value => $item->{location} });
138 $item->{location} = $descriptions->{lib} // '';
140 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.collection', authorised_value => $item->{collection} });
141 $item->{collection} = $descriptions->{lib} // '';
143 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.materials', authorised_value => $item->{materials} });
144 $item->{materials} = $descriptions->{lib} // '';
146 my $itemtype = getitemtypeinfo($item->{itype});
147 $item->{itemtype} = $itemtype->{description};
150 $template->param(items => \@items);
153 $order->{quantityreceived} = '' if $order->{quantityreceived} == 0;
155 my $unitprice = $order->{unitprice};
157 if ( $bookseller->invoiceincgst ) {
158 $rrp = $order->{rrp_tax_included};
159 $ecost = $order->{ecost_tax_included};
160 unless ( $unitprice != 0 and defined $unitprice) {
161 $unitprice = $order->{ecost_tax_included};
164 $rrp = $order->{rrp_tax_excluded};
165 $ecost = $order->{ecost_tax_excluded};
166 unless ( $unitprice != 0 and defined $unitprice) {
167 $unitprice = $order->{ecost_tax_excluded};
172 if( defined $order->{tax_rate_on_receiving} ) {
173 $tax_rate = $order->{tax_rate_on_receiving} + 0.0;
175 $tax_rate = $order->{tax_rate_on_ordering} + 0.0;
178 my $suggestion = GetSuggestionInfoFromBiblionumber($order->{biblionumber});
180 my $authorisedby = $order->{authorisedby};
181 my $member = GetMember( borrowernumber => $authorisedby );
183 my $budget = GetBudget( $order->{budget_id} );
185 my $datereceived = $order->{datereceived} ? dt_from_string( $order->{datereceived} ) : dt_from_string;
187 # get option values for gist syspref
188 my @gst_values = map {
190 }, split( '\|', C4::Context->preference("gist") );
193 AcqCreateItem => $AcqCreateItem,
195 biblionumber => $order->{'biblionumber'},
196 ordernumber => $order->{'ordernumber'},
197 subscriptionid => $order->{subscriptionid},
198 booksellerid => $order->{'booksellerid'},
200 name => $bookseller->name,
201 title => $order->{'title'},
202 author => $order->{'author'},
203 copyrightdate => $order->{'copyrightdate'},
204 isbn => $order->{'isbn'},
205 seriestitle => $order->{'seriestitle'},
206 bookfund => $budget->{budget_name},
207 quantity => $order->{'quantity'},
208 quantityreceivedplus1 => $order->{'quantityreceived'} + 1,
209 quantityreceived => $order->{'quantityreceived'},
212 unitprice => $unitprice,
213 tax_rate => $tax_rate,
214 memberfirstname => $member->{firstname} || "",
215 membersurname => $member->{surname} || "",
216 invoiceid => $invoice->{invoiceid},
217 invoice => $invoice->{invoicenumber},
218 datereceived => $datereceived,
219 order_internalnote => $order->{order_internalnote},
220 order_vendornote => $order->{order_vendornote},
221 suggestionid => $suggestion->{suggestionid},
222 surnamesuggestedby => $suggestion->{surnamesuggestedby},
223 firstnamesuggestedby => $suggestion->{firstnamesuggestedby},
224 gst_values => \@gst_values,
227 my $borrower = GetMember( 'borrowernumber' => $loggedinuser );
229 my $periods = GetBudgetPeriods( );
230 foreach my $period (@$periods) {
231 if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) {
232 $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'};
234 next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'};
235 my $budget_hierarchy = GetBudgetHierarchy( $period->{'budget_period_id'} );
237 foreach my $r ( @{$budget_hierarchy} ) {
238 next unless ( CanUserUseBudget( $borrower, $r, $userflags ) );
239 if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) {
244 b_id => $r->{budget_id},
245 b_txt => $r->{budget_name},
246 b_sel => ( $r->{budget_id} == $order->{budget_id} ) ? 1 : 0,
250 @funds = sort { uc( $a->{b_txt} ) cmp uc( $b->{b_txt} ) } @funds;
254 'id' => $period->{'budget_period_id'},
255 'description' => $period->{'budget_period_description'},
260 $template->{'VARS'}->{'budget_loop'} = \@budget_loop;
262 my $op = $input->param('op');
263 if ($op and $op eq 'edit'){
264 $template->param(edit => 1);
266 output_html_with_http_headers $input, $cookie, $template->output;