4 #script to show display basket of orders
7 # Copyright 2000-2002 Katipo Communications
8 # Copyright 2008-2009 BibLibre SARL
10 # This file is part of Koha.
12 # Koha is free software; you can redistribute it and/or modify it
13 # under the terms of the GNU General Public License as published by
14 # the Free Software Foundation; either version 3 of the License, or
15 # (at your option) any later version.
17 # Koha is distributed in the hope that it will be useful, but
18 # WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
22 # You should have received a copy of the GNU General Public License
23 # along with Koha; if not, see <http://www.gnu.org/licenses>.
31 This script shows all orders/parcels receipt or pending for a given supplier.
32 It allows to write an order/parcels as 'received' when it arrives.
40 To know the supplier this script has to show orders.
44 sort list of order by 'orderby'.
45 Orderby can be equals to
46 * datereceived desc (default value)
63 To know how many results have to be display / page.
77 use Koha::Acquisition::Booksellers;
78 use Koha::DateUtils qw( output_pref dt_from_string );
81 my $booksellerid = $input->param('booksellerid');
82 my $order = $input->param('orderby') || 'shipmentdate desc';
83 my $startfrom = $input->param('startfrom');
84 my $code = $input->param('filter');
85 my $datefrom = $input->param('datefrom');
86 my $dateto = $input->param('dateto');
87 my $resultsperpage = $input->param('resultsperpage');
88 my $op = $input->param('op');
89 $resultsperpage ||= 20;
91 our ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user(
92 { template_name => 'acqui/parcels.tt',
95 flagsrequired => { acquisition => 'order_receive' },
100 my $invoicenumber = $input->param('invoice');
101 my $shipmentcost = $input->param('shipmentcost');
102 my $shipmentcost_budgetid = $input->param('shipmentcost_budgetid');
103 my $shipmentdate = $input->param('shipmentdate');
104 $shipmentdate and $shipmentdate = output_pref({ str => $shipmentdate, dateformat => 'iso', dateonly => 1 });
106 if ( $op and $op eq 'new' ) {
107 if ( C4::Context->preference('AcqWarnOnDuplicateInvoice') ) {
108 my @invoices = GetInvoices(
109 supplierid => $booksellerid,
110 invoicenumber => $invoicenumber,
112 if ( scalar @invoices > 0 ) {
113 $template->{'VARS'}->{'duplicate_invoices'} = \@invoices;
114 $template->{'VARS'}->{'invoicenumber'} = $invoicenumber;
115 $template->{'VARS'}->{'shipmentdate'} = $shipmentdate;
116 $template->{'VARS'}->{'shipmentcost'} = $shipmentcost;
117 $template->{'VARS'}->{'shipmentcost_budgetid'} =
118 $shipmentcost_budgetid;
121 $op = 'confirm' unless $template->{'VARS'}->{'duplicate_invoices'};
123 if ($op and $op eq 'confirm') {
124 my $invoiceid = AddInvoice(
125 invoicenumber => $invoicenumber,
126 booksellerid => $booksellerid,
127 shipmentdate => $shipmentdate,
128 shipmentcost => $shipmentcost,
129 shipmentcost_budgetid => $shipmentcost_budgetid,
131 if(defined $invoiceid) {
133 print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid");
136 $template->param(error_failed_to_create_invoice => 1);
140 my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
141 my @parcels = GetInvoices(
142 supplierid => $booksellerid,
143 invoicenumber => $code,
144 ( $datefrom ? ( shipmentdatefrom => output_pref({ dt => dt_from_string($datefrom), dateformat => 'iso' }) ) : () ),
145 ( $dateto ? ( shipmentdateto => output_pref({ dt => dt_from_string($dateto), dateformat => 'iso' }) ) : () ),
148 my $count_parcels = @parcels;
150 # multi page display gestion
152 if ( $count_parcels > $resultsperpage ) {
153 set_page_navigation( $count_parcels, $startfrom, $resultsperpage );
157 my $next_page_start = $startfrom + $resultsperpage;
158 my $last_row = ( $next_page_start < $count_parcels ) ? $next_page_start - 1 : $count_parcels - 1;
159 for my $i ( $startfrom .. $last_row) {
160 my $p = $parcels[$i];
164 invoiceid => $p->{invoiceid},
165 code => $p->{invoicenumber},
166 nullcode => $p->{invoicenumber} eq 'NULL',
167 emptycode => $p->{invoicenumber} eq q{},
168 raw_datereceived => $p->{shipmentdate},
169 datereceived => $p->{shipmentdate},
170 bibcount => $p->{receivedbiblios} || 0,
171 reccount => $p->{receiveditems} || 0,
172 itemcount => $p->{itemsexpected} || 0,
175 if ($count_parcels) {
176 $template->param( searchresults => $loopres, count => $count_parcels );
180 my $budget_loop = [];
181 my $budgets = GetBudgetHierarchy;
182 foreach my $r (@{$budgets}) {
183 next unless (CanUserUseBudget($loggedinuser, $r, $flags));
184 if (!defined $r->{budget_amount} || $r->{budget_amount} == 0) {
187 push @{$budget_loop}, {
188 b_id => $r->{budget_id},
189 b_txt => $r->{budget_name},
190 b_active => $r->{budget_period_active},
195 sort { uc( $a->{b_txt}) cmp uc( $b->{b_txt}) } @{$budget_loop};
201 datefrom => $datefrom,
203 resultsperpage => $resultsperpage,
204 name => $bookseller->name,
205 shipmentdate_today => dt_from_string,
206 booksellerid => $booksellerid,
207 GST => C4::Context->preference('gist'),
208 budgets => $budget_loop,
211 output_html_with_http_headers $input, $cookie, $template->output;
213 sub set_page_navigation {
214 my ( $total_rows, $startfrom, $resultsperpage ) = @_;
216 my $displayprev = $startfrom;
217 my $next_row = $startfrom + $resultsperpage;
218 my $prev_row = $startfrom - $resultsperpage;
220 if ( $total_rows - $next_row > 0 ) {
224 # set up index numbers for paging
226 if ( $total_rows > $resultsperpage ) {
227 my $pages = $total_rows / $resultsperpage;
228 if ( $total_rows % $resultsperpage ) {
232 # set up page indexes for at max 15 pages
233 my $max_idx = ( $pages < 15 ) ? $pages : 15;
234 my $current_page = ( $startfrom / $resultsperpage ) - 1;
235 for my $idx ( 1 .. $max_idx ) {
238 startfrom => ( $idx - 1 ) * $resultsperpage,
239 highlight => ( $idx == $current_page ),
246 displaynext => $displaynext,
247 displayprev => $displayprev,
248 nextstartfrom => ( ( $next_row < $total_rows ) ? $next_row : $total_rows ),
249 prevstartfrom => ( ( $prev_row > 0 ) ? $prev_row : 0 )