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 $item->{notforloan
} = GetKohaAuthorisedValueLib
($code, $item->{notforloan
});
134 if(my $code = GetAuthValCode
("items.restricted", $fw)) {
135 $item->{restricted
} = GetKohaAuthorisedValueLib
($code, $item->{restricted
});
137 if(my $code = GetAuthValCode
("items.location", $fw)) {
138 $item->{location
} = GetKohaAuthorisedValueLib
($code, $item->{location
});
140 if(my $code = GetAuthValCode
("items.ccode", $fw)) {
141 $item->{collection
} = GetKohaAuthorisedValueLib
($code, $item->{ccode
});
143 if(my $code = GetAuthValCode
("items.materials", $fw)) {
144 $item->{materials
} = GetKohaAuthorisedValueLib
($code, $item->{materials
});
146 my $itemtype = getitemtypeinfo
($item->{itype
});
147 $item->{itemtype
} = $itemtype->{description
};
150 $template->param(items
=> \
@items);
153 $order->{quantityreceived
} = '' if $order->{quantityreceived
} == 0;
154 $order->{unitprice
} = '' if $order->{unitprice
} == 0;
159 if ( $bookseller->{listincgst
} ) {
160 if ( $bookseller->{invoiceincgst
} ) {
161 $rrp = $order->{rrp
};
162 $ecost = $order->{ecost
};
163 $unitprice = $order->{unitprice
};
165 $rrp = $order->{rrp
} / ( 1 + $order->{gstrate
} );
166 $ecost = $order->{ecost
} / ( 1 + $order->{gstrate
} );
167 $unitprice = $order->{unitprice
} / ( 1 + $order->{gstrate
} );
170 if ( $bookseller->{invoiceincgst
} ) {
171 $rrp = $order->{rrp
} * ( 1 + $order->{gstrate
} );
172 $ecost = $order->{ecost
} * ( 1 + $order->{gstrate
} );
173 $unitprice = $order->{unitprice
} * ( 1 + $order->{gstrate
} );
175 $rrp = $order->{rrp
};
176 $ecost = $order->{ecost
};
177 $unitprice = $order->{unitprice
};
181 my $suggestion = GetSuggestionInfoFromBiblionumber
($order->{biblionumber
});
183 my $authorisedby = $order->{authorisedby
};
184 my $member = GetMember
( borrowernumber
=> $authorisedby );
186 my $budget = GetBudget
( $order->{budget_id
} );
188 my $datereceived = $order->{datereceived
} ? dt_from_string
( $order->{datereceived
} ) : dt_from_string
;
191 AcqCreateItem
=> $AcqCreateItem,
193 biblionumber
=> $order->{'biblionumber'},
194 ordernumber
=> $order->{'ordernumber'},
195 subscriptionid
=> $order->{subscriptionid
},
196 booksellerid
=> $order->{'booksellerid'},
198 name
=> $bookseller->{'name'},
199 title
=> $order->{'title'},
200 author
=> $order->{'author'},
201 copyrightdate
=> $order->{'copyrightdate'},
202 isbn
=> $order->{'isbn'},
203 seriestitle
=> $order->{'seriestitle'},
204 bookfund
=> $budget->{budget_name
},
205 quantity
=> $order->{'quantity'},
206 quantityreceivedplus1
=> $order->{'quantityreceived'} + 1,
207 quantityreceived
=> $order->{'quantityreceived'},
208 rrp
=> sprintf( "%.2f", $rrp ),
209 ecost
=> sprintf( "%.2f", $ecost ),
210 memberfirstname
=> $member->{firstname
} || "",
211 membersurname
=> $member->{surname
} || "",
212 invoiceid
=> $invoice->{invoiceid
},
213 invoice
=> $invoice->{invoicenumber
},
214 datereceived
=> $datereceived,
215 order_internalnote
=> $order->{order_internalnote
},
216 order_vendornote
=> $order->{order_vendornote
},
217 suggestionid
=> $suggestion->{suggestionid
},
218 surnamesuggestedby
=> $suggestion->{surnamesuggestedby
},
219 firstnamesuggestedby
=> $suggestion->{firstnamesuggestedby
},
222 my $borrower = GetMember
( 'borrowernumber' => $loggedinuser );
224 my $periods = GetBudgetPeriods
( );
225 foreach my $period (@
$periods) {
226 if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) {
227 $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'};
229 next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'};
230 my $budget_hierarchy = GetBudgetHierarchy
( $period->{'budget_period_id'} );
232 foreach my $r ( @
{$budget_hierarchy} ) {
233 next unless ( CanUserUseBudget
( $borrower, $r, $userflags ) );
234 if ( !defined $r->{budget_amount
} || $r->{budget_amount
} == 0 ) {
239 b_id
=> $r->{budget_id
},
240 b_txt
=> $r->{budget_name
},
241 b_sel
=> ( $r->{budget_id
} == $order->{budget_id
} ) ?
1 : 0,
245 @funds = sort { uc( $a->{b_txt
} ) cmp uc( $b->{b_txt
} ) } @funds;
249 'id' => $period->{'budget_period_id'},
250 'description' => $period->{'budget_period_description'},
255 $template->{'VARS'}->{'budget_loop'} = \
@budget_loop;
257 # regardless of the content of $unitprice e.g 0 or '' or any string will return in these cases 0.00
258 # and the 'IF' in the .tt will show 0.00 and not 'ecost' (see BZ 7129)
259 # So if $unitprice == 0 we don't create unitprice
260 if ( $unitprice != 0) {
262 unitprice
=> sprintf( "%.2f", $unitprice),
266 my $op = $input->param('op');
267 if ($op and $op eq 'edit'){
268 $template->param(edit
=> 1);
270 output_html_with_http_headers
$input, $cookie, $template->output;