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.
78 use Koha
::Acquisition
::Booksellers
;
79 use Koha
::DateUtils
qw( output_pref dt_from_string );
82 my $booksellerid = $input->param('booksellerid');
83 my $order = $input->param('orderby') || 'shipmentdate desc';
84 my $startfrom = $input->param('startfrom');
85 my $code = $input->param('filter');
86 my $datefrom = $input->param('datefrom');
87 my $dateto = $input->param('dateto');
88 my $resultsperpage = $input->param('resultsperpage');
89 my $op = $input->param('op');
90 $resultsperpage ||= 20;
92 our ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user
(
93 { template_name
=> 'acqui/parcels.tt',
97 flagsrequired
=> { acquisition
=> 'order_receive' },
102 my $invoicenumber = $input->param('invoice');
103 my $shipmentcost = $input->param('shipmentcost');
104 my $shipmentcost_budgetid = $input->param('shipmentcost_budgetid');
105 my $shipmentdate = $input->param('shipmentdate');
106 $shipmentdate and $shipmentdate = output_pref
({ str
=> $shipmentdate, dateformat
=> 'iso', dateonly
=> 1 });
108 if ( $op and $op eq 'new' ) {
109 if ( C4
::Context
->preference('AcqWarnOnDuplicateInvoice') ) {
110 my @invoices = GetInvoices
(
111 supplierid
=> $booksellerid,
112 invoicenumber
=> $invoicenumber,
114 if ( scalar @invoices > 0 ) {
115 $template->{'VARS'}->{'duplicate_invoices'} = \
@invoices;
116 $template->{'VARS'}->{'invoicenumber'} = $invoicenumber;
117 $template->{'VARS'}->{'shipmentdate'} = $shipmentdate;
118 $template->{'VARS'}->{'shipmentcost'} = $shipmentcost;
119 $template->{'VARS'}->{'shipmentcost_budgetid'} =
120 $shipmentcost_budgetid;
123 $op = 'confirm' unless $template->{'VARS'}->{'duplicate_invoices'};
125 if ($op and $op eq 'confirm') {
126 my $invoiceid = AddInvoice
(
127 invoicenumber
=> $invoicenumber,
128 booksellerid
=> $booksellerid,
129 shipmentdate
=> $shipmentdate,
130 shipmentcost
=> $shipmentcost,
131 shipmentcost_budgetid
=> $shipmentcost_budgetid,
133 if(defined $invoiceid) {
135 print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid");
138 $template->param(error_failed_to_create_invoice
=> 1);
142 my $bookseller = Koha
::Acquisition
::Booksellers
->find( $booksellerid );
143 my @parcels = GetInvoices
(
144 supplierid
=> $booksellerid,
145 invoicenumber
=> $code,
146 ( $datefrom ?
( shipmentdatefrom
=> output_pref
({ dt
=> dt_from_string
($datefrom), dateformat
=> 'iso' }) ) : () ),
147 ( $dateto ?
( shipmentdateto
=> output_pref
({ dt
=> dt_from_string
($dateto), dateformat
=> 'iso' }) ) : () ),
150 my $count_parcels = @parcels;
152 # multi page display gestion
154 if ( $count_parcels > $resultsperpage ) {
155 set_page_navigation
( $count_parcels, $startfrom, $resultsperpage );
159 my $next_page_start = $startfrom + $resultsperpage;
160 my $last_row = ( $next_page_start < $count_parcels ) ?
$next_page_start - 1 : $count_parcels - 1;
161 for my $i ( $startfrom .. $last_row) {
162 my $p = $parcels[$i];
166 invoiceid
=> $p->{invoiceid
},
167 code
=> $p->{invoicenumber
},
168 nullcode
=> $p->{invoicenumber
} eq 'NULL',
169 emptycode
=> $p->{invoicenumber
} eq q{},
170 raw_datereceived
=> $p->{shipmentdate
},
171 datereceived
=> $p->{shipmentdate
},
172 bibcount
=> $p->{receivedbiblios
} || 0,
173 reccount
=> $p->{receiveditems
} || 0,
174 itemcount
=> $p->{itemsexpected
} || 0,
177 if ($count_parcels) {
178 $template->param( searchresults
=> $loopres, count
=> $count_parcels );
182 my $budget_loop = [];
183 my $budgets = GetBudgetHierarchy
;
184 foreach my $r (@
{$budgets}) {
185 next unless (CanUserUseBudget
($loggedinuser, $r, $flags));
186 if (!defined $r->{budget_amount
} || $r->{budget_amount
} == 0) {
189 push @
{$budget_loop}, {
190 b_id
=> $r->{budget_id
},
191 b_txt
=> $r->{budget_name
},
192 b_active
=> $r->{budget_period_active
},
197 sort { uc( $a->{b_txt
}) cmp uc( $b->{b_txt
}) } @
{$budget_loop};
203 datefrom
=> $datefrom,
205 resultsperpage
=> $resultsperpage,
206 name
=> $bookseller->name,
207 shipmentdate_today
=> dt_from_string
,
208 booksellerid
=> $booksellerid,
209 GST
=> C4
::Context
->preference('gist'),
210 budgets
=> $budget_loop,
213 output_html_with_http_headers
$input, $cookie, $template->output;
215 sub set_page_navigation
{
216 my ( $total_rows, $startfrom, $resultsperpage ) = @_;
218 my $displayprev = $startfrom;
219 my $next_row = $startfrom + $resultsperpage;
220 my $prev_row = $startfrom - $resultsperpage;
222 if ( $total_rows - $next_row > 0 ) {
226 # set up index numbers for paging
228 if ( $total_rows > $resultsperpage ) {
229 my $pages = $total_rows / $resultsperpage;
230 if ( $total_rows % $resultsperpage ) {
234 # set up page indexes for at max 15 pages
235 my $max_idx = ( $pages < 15 ) ?
$pages : 15;
236 my $current_page = ( $startfrom / $resultsperpage ) - 1;
237 for my $idx ( 1 .. $max_idx ) {
240 startfrom
=> ( $idx - 1 ) * $resultsperpage,
241 highlight
=> ( $idx == $current_page ),
248 displaynext
=> $displaynext,
249 displayprev
=> $displayprev,
250 nextstartfrom
=> ( ( $next_row < $total_rows ) ?
$next_row : $total_rows ),
251 prevstartfrom
=> ( ( $prev_row > 0 ) ?
$prev_row : 0 )