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
; # 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
($_);
132 $av = Koha
::AuthorisedValues
->search_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.notforloan', authorised_value
=> $item->{notforloan
} });
133 $item->{notforloan
} = $av->count ?
$av->next->lib : '';
135 $av = Koha
::AuthorisedValues
->search_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.restricted', authorised_value
=> $item->{restricted
} });
136 $item->{restricted
} = $av->count ?
$av->next->lib : '';
138 $av = Koha
::AuthorisedValues
->search_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.location', authorised_value
=> $item->{location
} });
139 $item->{location
} = $av->count ?
$av->next->lib : '';
141 $av = Koha
::AuthorisedValues
->search_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.collection', authorised_value
=> $item->{collection
} });
142 $item->{collection
} = $av->count ?
$av->next->lib : '';
144 $av = Koha
::AuthorisedValues
->search_by_koha_field({frameworkcode
=> $fw, kohafield
=> 'items.materials', authorised_value
=> $item->{materials
} });
145 $item->{materials
} = $av->count ?
$av->next->lib : '';
147 my $itemtype = getitemtypeinfo
($item->{itype
});
148 $item->{itemtype
} = $itemtype->{description
};
151 $template->param(items
=> \
@items);
154 $order->{quantityreceived
} = '' if $order->{quantityreceived
} == 0;
155 $order->{unitprice
} = '' if $order->{unitprice
} == 0;
160 if ( $bookseller->{listincgst
} ) {
161 if ( $bookseller->{invoiceincgst
} ) {
162 $rrp = $order->{rrp
};
163 $ecost = $order->{ecost
};
164 $unitprice = $order->{unitprice
};
166 $rrp = $order->{rrp
} / ( 1 + $order->{gstrate
} );
167 $ecost = $order->{ecost
} / ( 1 + $order->{gstrate
} );
168 $unitprice = $order->{unitprice
} / ( 1 + $order->{gstrate
} );
171 if ( $bookseller->{invoiceincgst
} ) {
172 $rrp = $order->{rrp
} * ( 1 + $order->{gstrate
} );
173 $ecost = $order->{ecost
} * ( 1 + $order->{gstrate
} );
174 $unitprice = $order->{unitprice
} * ( 1 + $order->{gstrate
} );
176 $rrp = $order->{rrp
};
177 $ecost = $order->{ecost
};
178 $unitprice = $order->{unitprice
};
182 my $suggestion = GetSuggestionInfoFromBiblionumber
($order->{biblionumber
});
184 my $authorisedby = $order->{authorisedby
};
185 my $member = GetMember
( borrowernumber
=> $authorisedby );
187 my $budget = GetBudget
( $order->{budget_id
} );
189 my $datereceived = $order->{datereceived
} ? dt_from_string
( $order->{datereceived
} ) : dt_from_string
;
192 AcqCreateItem
=> $AcqCreateItem,
194 biblionumber
=> $order->{'biblionumber'},
195 ordernumber
=> $order->{'ordernumber'},
196 subscriptionid
=> $order->{subscriptionid
},
197 booksellerid
=> $order->{'booksellerid'},
199 name
=> $bookseller->{'name'},
200 title
=> $order->{'title'},
201 author
=> $order->{'author'},
202 copyrightdate
=> $order->{'copyrightdate'},
203 isbn
=> $order->{'isbn'},
204 seriestitle
=> $order->{'seriestitle'},
205 bookfund
=> $budget->{budget_name
},
206 quantity
=> $order->{'quantity'},
207 quantityreceivedplus1
=> $order->{'quantityreceived'} + 1,
208 quantityreceived
=> $order->{'quantityreceived'},
209 rrp
=> sprintf( "%.2f", $rrp ),
210 ecost
=> sprintf( "%.2f", $ecost ),
211 memberfirstname
=> $member->{firstname
} || "",
212 membersurname
=> $member->{surname
} || "",
213 invoiceid
=> $invoice->{invoiceid
},
214 invoice
=> $invoice->{invoicenumber
},
215 datereceived
=> $datereceived,
216 order_internalnote
=> $order->{order_internalnote
},
217 order_vendornote
=> $order->{order_vendornote
},
218 suggestionid
=> $suggestion->{suggestionid
},
219 surnamesuggestedby
=> $suggestion->{surnamesuggestedby
},
220 firstnamesuggestedby
=> $suggestion->{firstnamesuggestedby
},
223 my $borrower = GetMember
( 'borrowernumber' => $loggedinuser );
225 my $periods = GetBudgetPeriods
( );
226 foreach my $period (@
$periods) {
227 if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) {
228 $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'};
230 next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'};
231 my $budget_hierarchy = GetBudgetHierarchy
( $period->{'budget_period_id'} );
233 foreach my $r ( @
{$budget_hierarchy} ) {
234 next unless ( CanUserUseBudget
( $borrower, $r, $userflags ) );
235 if ( !defined $r->{budget_amount
} || $r->{budget_amount
} == 0 ) {
240 b_id
=> $r->{budget_id
},
241 b_txt
=> $r->{budget_name
},
242 b_sel
=> ( $r->{budget_id
} == $order->{budget_id
} ) ?
1 : 0,
246 @funds = sort { uc( $a->{b_txt
} ) cmp uc( $b->{b_txt
} ) } @funds;
250 'id' => $period->{'budget_period_id'},
251 'description' => $period->{'budget_period_description'},
256 $template->{'VARS'}->{'budget_loop'} = \
@budget_loop;
258 # regardless of the content of $unitprice e.g 0 or '' or any string will return in these cases 0.00
259 # and the 'IF' in the .tt will show 0.00 and not 'ecost' (see BZ 7129)
260 # So if $unitprice == 0 we don't create unitprice
261 if ( $unitprice != 0) {
263 unitprice
=> sprintf( "%.2f", $unitprice),
267 my $op = $input->param('op');
268 if ($op and $op eq 'edit'){
269 $template->param(edit
=> 1);
271 output_html_with_http_headers
$input, $cookie, $template->output;