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.
66 use C4
::Koha
; # GetKohaAuthorisedValues GetItemTypes
70 use C4
::Budgets qw
/ GetBudget GetBudgetHierarchy CanUserUseBudget GetBudgetPeriods /;
76 use Koha
::Acquisition
::Bookseller
;
77 use Koha
::DateUtils
qw( dt_from_string );
81 my $dbh = C4
::Context
->dbh;
82 my $invoiceid = $input->param('invoiceid');
83 my $invoice = GetInvoice
($invoiceid);
84 my $booksellerid = $invoice->{booksellerid
};
85 my $freight = $invoice->{shipmentcost
};
86 my $ordernumber = $input->param('ordernumber');
88 my $bookseller = Koha
::Acquisition
::Bookseller
->fetch({ id
=> $booksellerid });
90 $results = SearchOrders
({
91 ordernumber
=> $ordernumber
94 my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user
(
96 template_name
=> "acqui/orderreceive.tt",
100 flagsrequired
=> {acquisition
=> 'order_receive'},
105 unless ( $results and @
$results) {
106 output_html_with_http_headers
$input, $cookie, $template->output;
110 # prepare the form for receiving
111 my $order = $results->[0];
113 # Check if ACQ framework exists
114 my $acq_fw = GetMarcStructure
( 1, 'ACQ', { unsafe
=> 1 } );
116 $template->param('NoACQframework' => 1);
119 my $AcqCreateItem = C4
::Context
->preference('AcqCreateItem');
120 if ($AcqCreateItem eq 'receiving') {
122 AcqCreateItemReceiving
=> 1,
123 UniqueItemFields
=> C4
::Context
->preference('UniqueItemFields'),
125 } elsif ($AcqCreateItem eq 'ordering') {
126 my $fw = ($acq_fw) ?
'ACQ' : '';
127 my @itemnumbers = GetItemnumbersFromOrder
($order->{ordernumber
});
129 foreach (@itemnumbers) {
130 my $item = GetItem
($_);
131 if(my $code = GetAuthValCode
("items.notforloan", $fw)) {
132 my $av = Koha
::AuthorisedValues
->search({ category
=> $code, authorised_value
=> $item->{notforloan
} });
133 $item->{notforloan
} = $av->count ?
$av->next->lib : '';
135 if(my $code = GetAuthValCode
("items.restricted", $fw)) {
136 my $av = Koha
::AuthorisedValues
->search({ category
=> $code, authorised_value
=> $item->{restricted
} });
137 $item->{restricted
} = $av->count ?
$av->next->lib : '';
139 if(my $code = GetAuthValCode
("items.location", $fw)) {
140 my $av = Koha
::AuthorisedValues
->search({ category
=> $code, authorised_value
=> $item->{location
} });
141 $item->{location
} = $av->count ?
$av->next->lib : '';
143 if(my $code = GetAuthValCode
("items.ccode", $fw)) {
144 my $av = Koha
::AuthorisedValues
->search({ category
=> $code, authorised_value
=> $item->{collection
} });
145 $item->{collection
} = $av->count ?
$av->next->lib : '';
147 if(my $code = GetAuthValCode
("items.materials", $fw)) {
148 my $av = Koha
::AuthorisedValues
->search({ category
=> $code, authorised_value
=> $item->{materials
} });
149 $item->{materials
} = $av->count ?
$av->next->lib : '';
151 my $itemtype = getitemtypeinfo
($item->{itype
});
152 $item->{itemtype
} = $itemtype->{description
};
155 $template->param(items
=> \
@items);
158 $order->{quantityreceived
} = '' if $order->{quantityreceived
} == 0;
159 $order->{unitprice
} = '' if $order->{unitprice
} == 0;
164 if ( $bookseller->{listincgst
} ) {
165 if ( $bookseller->{invoiceincgst
} ) {
166 $rrp = $order->{rrp
};
167 $ecost = $order->{ecost
};
168 $unitprice = $order->{unitprice
};
170 $rrp = $order->{rrp
} / ( 1 + $order->{gstrate
} );
171 $ecost = $order->{ecost
} / ( 1 + $order->{gstrate
} );
172 $unitprice = $order->{unitprice
} / ( 1 + $order->{gstrate
} );
175 if ( $bookseller->{invoiceincgst
} ) {
176 $rrp = $order->{rrp
} * ( 1 + $order->{gstrate
} );
177 $ecost = $order->{ecost
} * ( 1 + $order->{gstrate
} );
178 $unitprice = $order->{unitprice
} * ( 1 + $order->{gstrate
} );
180 $rrp = $order->{rrp
};
181 $ecost = $order->{ecost
};
182 $unitprice = $order->{unitprice
};
186 my $suggestion = GetSuggestionInfoFromBiblionumber
($order->{biblionumber
});
188 my $authorisedby = $order->{authorisedby
};
189 my $member = GetMember
( borrowernumber
=> $authorisedby );
191 my $budget = GetBudget
( $order->{budget_id
} );
193 my $datereceived = $order->{datereceived
} ? dt_from_string
( $order->{datereceived
} ) : dt_from_string
;
196 AcqCreateItem
=> $AcqCreateItem,
198 biblionumber
=> $order->{'biblionumber'},
199 ordernumber
=> $order->{'ordernumber'},
200 subscriptionid
=> $order->{subscriptionid
},
201 booksellerid
=> $order->{'booksellerid'},
203 name
=> $bookseller->{'name'},
204 title
=> $order->{'title'},
205 author
=> $order->{'author'},
206 copyrightdate
=> $order->{'copyrightdate'},
207 isbn
=> $order->{'isbn'},
208 seriestitle
=> $order->{'seriestitle'},
209 bookfund
=> $budget->{budget_name
},
210 quantity
=> $order->{'quantity'},
211 quantityreceivedplus1
=> $order->{'quantityreceived'} + 1,
212 quantityreceived
=> $order->{'quantityreceived'},
213 rrp
=> sprintf( "%.2f", $rrp ),
214 ecost
=> sprintf( "%.2f", $ecost ),
215 memberfirstname
=> $member->{firstname
} || "",
216 membersurname
=> $member->{surname
} || "",
217 invoiceid
=> $invoice->{invoiceid
},
218 invoice
=> $invoice->{invoicenumber
},
219 datereceived
=> $datereceived,
220 order_internalnote
=> $order->{order_internalnote
},
221 order_vendornote
=> $order->{order_vendornote
},
222 suggestionid
=> $suggestion->{suggestionid
},
223 surnamesuggestedby
=> $suggestion->{surnamesuggestedby
},
224 firstnamesuggestedby
=> $suggestion->{firstnamesuggestedby
},
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 # regardless of the content of $unitprice e.g 0 or '' or any string will return in these cases 0.00
263 # and the 'IF' in the .tt will show 0.00 and not 'ecost' (see BZ 7129)
264 # So if $unitprice == 0 we don't create unitprice
265 if ( $unitprice != 0) {
267 unitprice
=> sprintf( "%.2f", $unitprice),
271 my $op = $input->param('op');
272 if ($op and $op eq 'edit'){
273 $template->param(edit
=> 1);
275 output_html_with_http_headers
$input, $cookie, $template->output;