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 $active_currency = Koha
::Acquisition
::Currencies
->get_active;
119 # Check if ACQ framework exists
120 my $acq_fw = GetMarcStructure
( 1, 'ACQ', { unsafe
=> 1 } );
122 $template->param('NoACQframework' => 1);
125 my $AcqCreateItem = $basket->effective_create_items;
126 if ($AcqCreateItem eq 'receiving') {
128 AcqCreateItemReceiving
=> 1,
129 UniqueItemFields
=> C4
::Context
->preference('UniqueItemFields'),
131 } elsif ($AcqCreateItem eq 'ordering') {
132 my $fw = ($acq_fw) ?
'ACQ' : '';
133 my @itemnumbers = $order_object->items->get_column('itemnumber');
135 foreach (@itemnumbers) {
136 my $item = GetItem
($_); # FIXME We do not need this call, we already have the Koha::Items
138 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.notforloan', authorised_value
=> $item->{notforloan
} });
139 $item->{notforloan
} = $descriptions->{lib
} // '';
141 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.restricted', authorised_value
=> $item->{restricted
} });
142 $item->{restricted
} = $descriptions->{lib
} // '';
144 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.location', authorised_value
=> $item->{location
} });
145 $item->{location
} = $descriptions->{lib
} // '';
147 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.collection', authorised_value
=> $item->{collection
} });
148 $item->{collection
} = $descriptions->{lib
} // '';
150 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.materials', authorised_value
=> $item->{materials
} });
151 $item->{materials
} = $descriptions->{lib
} // '';
153 my $itemtype = Koha
::ItemTypes
->find( $item->{itype
} );
154 if (defined $itemtype) {
155 $item->{itemtype
} = $itemtype->description; # FIXME Should not it be translated_description?
159 $template->param(items
=> \
@items);
162 $order->{quantityreceived
} = '' if $order->{quantityreceived
} == 0;
164 my $unitprice = $order->{unitprice
};
166 if ( $bookseller->invoiceincgst ) {
167 $rrp = $order->{rrp_tax_included
};
168 $ecost = $order->{ecost_tax_included
};
169 unless ( $unitprice != 0 and defined $unitprice) {
170 $unitprice = $order->{ecost_tax_included
};
173 $rrp = $order->{rrp_tax_excluded
};
174 $ecost = $order->{ecost_tax_excluded
};
175 unless ( $unitprice != 0 and defined $unitprice) {
176 $unitprice = $order->{ecost_tax_excluded
};
181 if( defined $order->{tax_rate_on_receiving
} ) {
182 $tax_rate = $order->{tax_rate_on_receiving
} + 0.0;
184 $tax_rate = $order->{tax_rate_on_ordering
} + 0.0;
187 my $suggestion = GetSuggestionInfoFromBiblionumber
($order->{biblionumber
});
189 my $creator = Koha
::Patrons
->find( $order->{created_by
} );
191 my $budget = GetBudget
( $order->{budget_id
} );
193 my $datereceived = $order->{datereceived
} ? dt_from_string
( $order->{datereceived
} ) : dt_from_string
;
195 # get option values for gist syspref
196 my @gst_values = map {
198 }, split( '\|', C4
::Context
->preference("gist") );
200 if ( $order->{subscriptionid
} ) {
201 # Order from a subscription, we will display an history of what has been received
202 my $orders = Koha
::Acquisition
::Orders
->search(
204 subscriptionid
=> $order->{subscriptionid
},
205 parent_ordernumber
=> $order->{ordernumber
},
206 ordernumber
=> { '!=' => $order->{ordernumber
} }
209 $template->param( orders
=> $orders );
213 AcqCreateItem
=> $AcqCreateItem,
215 biblionumber
=> $order->{'biblionumber'},
216 ordernumber
=> $order->{'ordernumber'},
217 subscriptionid
=> $order->{subscriptionid
},
218 booksellerid
=> $order->{'booksellerid'},
220 name
=> $bookseller->name,
221 cur_active_sym
=> $active_currency->symbol,
222 cur_active
=> $active_currency->currency,
223 listincgst
=> $bookseller->listincgst,
224 invoiceincgst
=> $bookseller->invoiceincgst,
225 title
=> $order->{'title'},
226 author
=> $order->{'author'},
227 copyrightdate
=> $order->{'copyrightdate'},
228 isbn
=> $order->{'isbn'},
229 seriestitle
=> $order->{'seriestitle'},
230 bookfund
=> $budget->{budget_name
},
231 quantity
=> $order->{'quantity'},
232 quantityreceivedplus1
=> $order->{'quantityreceived'} + 1,
233 quantityreceived
=> $order->{'quantityreceived'},
235 replacementprice
=> $order->{'replacementprice'},
237 unitprice
=> $unitprice,
238 tax_rate
=> $tax_rate,
240 invoiceid
=> $invoice->{invoiceid
},
241 invoice
=> $invoice->{invoicenumber
},
242 datereceived
=> $datereceived,
243 order_internalnote
=> $order->{order_internalnote
},
244 order_vendornote
=> $order->{order_vendornote
},
245 suggestionid
=> $suggestion->{suggestionid
},
246 surnamesuggestedby
=> $suggestion->{surnamesuggestedby
},
247 firstnamesuggestedby
=> $suggestion->{firstnamesuggestedby
},
248 gst_values
=> \
@gst_values,
251 my $patron = Koha
::Patrons
->find( $loggedinuser )->unblessed;
253 my $periods = GetBudgetPeriods
( );
254 foreach my $period (@
$periods) {
255 if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) {
256 $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'};
258 next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'};
259 my $budget_hierarchy = GetBudgetHierarchy
( $period->{'budget_period_id'} );
261 foreach my $r ( @
{$budget_hierarchy} ) {
262 next unless ( CanUserUseBudget
( $patron, $r, $userflags ) );
263 if ( !defined $r->{budget_amount
} || $r->{budget_amount
} == 0 ) {
268 b_id
=> $r->{budget_id
},
269 b_txt
=> $r->{budget_name
},
270 b_sel
=> ( $r->{budget_id
} == $order->{budget_id
} ) ?
1 : 0,
274 @funds = sort { uc( $a->{b_txt
} ) cmp uc( $b->{b_txt
} ) } @funds;
278 'id' => $period->{'budget_period_id'},
279 'description' => $period->{'budget_period_description'},
284 $template->{'VARS'}->{'budget_loop'} = \
@budget_loop;
286 my $op = $input->param('op');
287 if ($op and $op eq 'edit'){
288 $template->param(edit
=> 1);
290 output_html_with_http_headers
$input, $cookie, $template->output;