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 flagsrequired
=> {acquisition
=> 'order_receive'},
107 unless ( $results and @
$results) {
108 output_html_with_http_headers
$input, $cookie, $template->output;
112 # prepare the form for receiving
113 my $order = $results->[0];
114 my $order_object = Koha
::Acquisition
::Orders
->find( $ordernumber );
115 my $basket = $order_object->basket;
116 my $currencies = Koha
::Acquisition
::Currencies
->search;
117 my $active_currency = $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 $items = $order_object->items;
135 while ( my $i = $items->next ) {
136 my $item = $i->unblessed;
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.ccode', authorised_value
=> $item->{ccode
} });
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($i->effective_itemtype);
154 if (defined $itemtype) {
155 # We should not do that here, but call ->itemtype->description when needed instead
156 $item->{itemtype
} = $itemtype->description; # FIXME Should not it be translated_description?
160 $template->param(items
=> \
@items);
163 $order->{quantityreceived
} = '' if $order->{quantityreceived
} == 0;
165 my $unitprice = $order->{unitprice
};
167 if ( $bookseller->invoiceincgst ) {
168 $rrp = $order->{rrp_tax_included
};
169 $ecost = $order->{ecost_tax_included
};
170 unless ( $unitprice != 0 and defined $unitprice) {
171 $unitprice = $order->{ecost_tax_included
};
174 $rrp = $order->{rrp_tax_excluded
};
175 $ecost = $order->{ecost_tax_excluded
};
176 unless ( $unitprice != 0 and defined $unitprice) {
177 $unitprice = $order->{ecost_tax_excluded
};
182 if( defined $order->{tax_rate_on_receiving
} ) {
183 $tax_rate = $order->{tax_rate_on_receiving
} + 0.0;
185 $tax_rate = $order->{tax_rate_on_ordering
} + 0.0;
188 my $creator = Koha
::Patrons
->find( $order->{created_by
} );
190 my $budget = GetBudget
( $order->{budget_id
} );
192 my $datereceived = $order->{datereceived
} ? dt_from_string
( $order->{datereceived
} ) : dt_from_string
;
194 # get option values for gist syspref
195 my @gst_values = map {
197 }, split( '\|', C4
::Context
->preference("gist") );
199 my $order_internalnote = $order->{order_internalnote
};
200 my $order_vendornote = $order->{order_vendornote
};
201 if ( $order->{subscriptionid
} ) {
202 # Order from a subscription, we will display an history of what has been received
203 my $orders = Koha
::Acquisition
::Orders
->search(
205 subscriptionid
=> $order->{subscriptionid
},
206 parent_ordernumber
=> $order->{ordernumber
},
207 ordernumber
=> { '!=' => $order->{ordernumber
} }
210 if ( $order->{parent_ordernumber
} != $order->{ordernumber
} ) {
211 my $parent_order = Koha
::Acquisition
::Orders
->find($order->{parent_ordernumber
});
212 $order_internalnote = $parent_order->{order_internalnote
};
213 $order_vendornote = $parent_order->{order_vendornote
};
221 AcqCreateItem
=> $AcqCreateItem,
223 biblionumber
=> $order->{'biblionumber'},
224 ordernumber
=> $order->{'ordernumber'},
225 subscriptionid
=> $order->{subscriptionid
},
226 booksellerid
=> $order->{'booksellerid'},
228 name
=> $bookseller->name,
229 active_currency
=> $active_currency,
230 currencies
=> scalar $currencies->search({ rate
=> { '!=' => 1 } }),
231 invoiceincgst
=> $bookseller->invoiceincgst,
232 title
=> $order->{'title'},
233 author
=> $order->{'author'},
234 copyrightdate
=> $order->{'copyrightdate'},
235 isbn
=> $order->{'isbn'},
236 seriestitle
=> $order->{'seriestitle'},
237 bookfund
=> $budget->{budget_name
},
238 quantity
=> $order->{'quantity'},
239 quantityreceivedplus1
=> $order->{'quantityreceived'} + 1,
240 quantityreceived
=> $order->{'quantityreceived'},
242 replacementprice
=> $order->{'replacementprice'},
244 unitprice
=> $unitprice,
245 tax_rate
=> $tax_rate,
247 invoiceid
=> $invoice->{invoiceid
},
248 invoice
=> $invoice->{invoicenumber
},
249 datereceived
=> $datereceived,
250 order_internalnote
=> $order_internalnote,
251 order_vendornote
=> $order_vendornote,
252 gst_values
=> \
@gst_values,
255 my $suggestion = GetSuggestionInfoFromBiblionumber
($order->{biblionumber
});
257 $template->param( suggestion
=> $suggestion );
260 my $patron = Koha
::Patrons
->find( $loggedinuser )->unblessed;
262 my $periods = GetBudgetPeriods
( );
263 foreach my $period (@
$periods) {
264 if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) {
265 $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'};
267 next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'};
268 my $budget_hierarchy = GetBudgetHierarchy
( $period->{'budget_period_id'} );
270 foreach my $r ( @
{$budget_hierarchy} ) {
271 next unless ( CanUserUseBudget
( $patron, $r, $userflags ) );
274 b_id
=> $r->{budget_id
},
275 b_txt
=> $r->{budget_name
},
276 b_sel
=> ( $r->{budget_id
} == $order->{budget_id
} ) ?
1 : 0,
280 @funds = sort { uc( $a->{b_txt
} ) cmp uc( $b->{b_txt
} ) } @funds;
284 'id' => $period->{'budget_period_id'},
285 'description' => $period->{'budget_period_description'},
290 $template->{'VARS'}->{'budget_loop'} = \
@budget_loop;
292 my $op = $input->param('op');
293 if ($op and $op eq 'edit'){
294 $template->param(edit
=> 1);
296 output_html_with_http_headers
$input, $cookie, $template->output;