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' },
99 my $invoicenumber = $input->param('invoice');
100 my $shipmentcost = $input->param('shipmentcost');
101 my $shipmentcost_budgetid = $input->param('shipmentcost_budgetid');
102 my $shipmentdate = $input->param('shipmentdate');
103 $shipmentdate and $shipmentdate = output_pref({ str => $shipmentdate, dateformat => 'iso', dateonly => 1 });
105 if ( $op and $op eq 'new' ) {
106 if ( C4::Context->preference('AcqWarnOnDuplicateInvoice') ) {
107 my @invoices = GetInvoices(
108 supplierid => $booksellerid,
109 invoicenumber => $invoicenumber,
111 if ( scalar @invoices > 0 ) {
112 $template->{'VARS'}->{'duplicate_invoices'} = \@invoices;
113 $template->{'VARS'}->{'invoicenumber'} = $invoicenumber;
114 $template->{'VARS'}->{'shipmentdate'} = $shipmentdate;
115 $template->{'VARS'}->{'shipmentcost'} = $shipmentcost;
116 $template->{'VARS'}->{'shipmentcost_budgetid'} =
117 $shipmentcost_budgetid;
120 $op = 'confirm' unless $template->{'VARS'}->{'duplicate_invoices'};
122 if ($op and $op eq 'confirm') {
123 my $invoiceid = AddInvoice(
124 invoicenumber => $invoicenumber,
125 booksellerid => $booksellerid,
126 shipmentdate => $shipmentdate,
127 shipmentcost => $shipmentcost,
128 shipmentcost_budgetid => $shipmentcost_budgetid,
130 if(defined $invoiceid) {
132 print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid");
135 $template->param(error_failed_to_create_invoice => 1);
139 my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
140 my @parcels = GetInvoices(
141 supplierid => $booksellerid,
142 invoicenumber => $code,
143 ( $datefrom ? ( shipmentdatefrom => output_pref({ dt => dt_from_string($datefrom), dateformat => 'iso' }) ) : () ),
144 ( $dateto ? ( shipmentdateto => output_pref({ dt => dt_from_string($dateto), dateformat => 'iso' }) ) : () ),
147 my $count_parcels = @parcels;
149 # multi page display gestion
151 if ( $count_parcels > $resultsperpage ) {
152 set_page_navigation( $count_parcels, $startfrom, $resultsperpage );
156 my $next_page_start = $startfrom + $resultsperpage;
157 my $last_row = ( $next_page_start < $count_parcels ) ? $next_page_start - 1 : $count_parcels - 1;
158 for my $i ( $startfrom .. $last_row) {
159 my $p = $parcels[$i];
163 invoiceid => $p->{invoiceid},
164 code => $p->{invoicenumber},
165 nullcode => $p->{invoicenumber} eq 'NULL',
166 emptycode => $p->{invoicenumber} eq q{},
167 raw_datereceived => $p->{shipmentdate},
168 datereceived => $p->{shipmentdate},
169 bibcount => $p->{receivedbiblios} || 0,
170 reccount => $p->{receiveditems} || 0,
171 itemcount => $p->{itemsexpected} || 0,
174 if ($count_parcels) {
175 $template->param( searchresults => $loopres, count => $count_parcels );
179 my $budget_loop = [];
180 my $budgets = GetBudgetHierarchy;
181 foreach my $r (@{$budgets}) {
182 next unless (CanUserUseBudget($loggedinuser, $r, $flags));
183 push @{$budget_loop}, {
184 b_id => $r->{budget_id},
185 b_txt => $r->{budget_name},
186 b_active => $r->{budget_period_active},
191 sort { uc( $a->{b_txt}) cmp uc( $b->{b_txt}) } @{$budget_loop};
197 datefrom => $datefrom,
199 resultsperpage => $resultsperpage,
200 name => $bookseller->name,
201 shipmentdate_today => dt_from_string,
202 booksellerid => $booksellerid,
203 GST => C4::Context->preference('TaxRates'),
204 budgets => $budget_loop,
207 output_html_with_http_headers $input, $cookie, $template->output;
209 sub set_page_navigation {
210 my ( $total_rows, $startfrom, $resultsperpage ) = @_;
212 my $displayprev = $startfrom;
213 my $next_row = $startfrom + $resultsperpage;
214 my $prev_row = $startfrom - $resultsperpage;
216 if ( $total_rows - $next_row > 0 ) {
220 # set up index numbers for paging
222 if ( $total_rows > $resultsperpage ) {
223 my $pages = $total_rows / $resultsperpage;
224 if ( $total_rows % $resultsperpage ) {
228 # set up page indexes for at max 15 pages
229 my $max_idx = ( $pages < 15 ) ? $pages : 15;
230 my $current_page = ( $startfrom / $resultsperpage ) - 1;
231 for my $idx ( 1 .. $max_idx ) {
234 startfrom => ( $idx - 1 ) * $resultsperpage,
235 highlight => ( $idx == $current_page ),
242 displaynext => $displaynext,
243 displayprev => $displayprev,
244 nextstartfrom => ( ( $next_row < $total_rows ) ? $next_row : $total_rows ),
245 prevstartfrom => ( ( $prev_row > 0 ) ? $prev_row : 0 )