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.
71 use C4::Auth qw( get_template_and_user );
72 use C4::Output qw( output_html_with_http_headers );
74 use C4::Acquisition qw( GetInvoices GetInvoice AddInvoice );
75 use C4::Budgets qw( GetBudgetHierarchy GetBudget CanUserUseBudget );
77 use Koha::Acquisition::Booksellers;
78 use Koha::DateUtils qw( 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');
104 if ( $op and $op eq 'new' ) {
105 if ( C4::Context->preference('AcqWarnOnDuplicateInvoice') ) {
106 my @invoices = GetInvoices(
107 supplierid => $booksellerid,
108 invoicenumber => $invoicenumber,
110 if ( scalar @invoices > 0 ) {
111 $template->{'VARS'}->{'duplicate_invoices'} = \@invoices;
112 $template->{'VARS'}->{'invoicenumber'} = $invoicenumber;
113 $template->{'VARS'}->{'shipmentdate'} = $shipmentdate;
114 $template->{'VARS'}->{'shipmentcost'} = $shipmentcost;
115 $template->{'VARS'}->{'shipmentcost_budgetid'} =
116 $shipmentcost_budgetid;
119 $op = 'confirm' unless $template->{'VARS'}->{'duplicate_invoices'};
121 if ($op and $op eq 'confirm') {
122 my $invoiceid = AddInvoice(
123 invoicenumber => $invoicenumber,
124 booksellerid => $booksellerid,
125 shipmentdate => $shipmentdate,
126 shipmentcost => $shipmentcost,
127 shipmentcost_budgetid => $shipmentcost_budgetid,
129 if(defined $invoiceid) {
131 print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid");
134 $template->param(error_failed_to_create_invoice => 1);
138 my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
139 my @parcels = GetInvoices(
140 supplierid => $booksellerid,
141 invoicenumber => $code,
142 ( $datefrom ? ( shipmentdatefrom => $datefrom ) : () ),
143 ( $dateto ? ( shipmentdateto => $dateto ) : () ),
146 my $count_parcels = @parcels;
148 # multi page display gestion
150 if ( $count_parcels > $resultsperpage ) {
151 set_page_navigation( $count_parcels, $startfrom, $resultsperpage );
155 my $next_page_start = $startfrom + $resultsperpage;
156 my $last_row = ( $next_page_start < $count_parcels ) ? $next_page_start - 1 : $count_parcels - 1;
157 for my $i ( $startfrom .. $last_row) {
158 my $p = $parcels[$i];
162 invoiceid => $p->{invoiceid},
163 code => $p->{invoicenumber},
164 nullcode => $p->{invoicenumber} eq 'NULL',
165 emptycode => $p->{invoicenumber} eq q{},
166 raw_datereceived => $p->{shipmentdate},
167 datereceived => $p->{shipmentdate},
168 bibcount => $p->{receivedbiblios} || 0,
169 reccount => $p->{receiveditems} || 0,
170 itemcount => $p->{itemsexpected} || 0,
173 if ($count_parcels) {
174 $template->param( searchresults => $loopres, count => $count_parcels );
178 my $budget_loop = [];
179 my $budgets = GetBudgetHierarchy;
180 foreach my $r (@{$budgets}) {
181 next unless (CanUserUseBudget($loggedinuser, $r, $flags));
182 push @{$budget_loop}, {
183 b_id => $r->{budget_id},
184 b_txt => $r->{budget_name},
185 b_active => $r->{budget_period_active},
190 sort { uc( $a->{b_txt}) cmp uc( $b->{b_txt}) } @{$budget_loop};
196 datefrom => $datefrom,
198 resultsperpage => $resultsperpage,
199 name => $bookseller->name,
200 shipmentdate_today => dt_from_string,
201 booksellerid => $booksellerid,
202 GST => C4::Context->preference('TaxRates'),
203 budgets => $budget_loop,
206 output_html_with_http_headers $input, $cookie, $template->output;
208 sub set_page_navigation {
209 my ( $total_rows, $startfrom, $resultsperpage ) = @_;
211 my $displayprev = $startfrom;
212 my $next_row = $startfrom + $resultsperpage;
213 my $prev_row = $startfrom - $resultsperpage;
215 if ( $total_rows - $next_row > 0 ) {
219 # set up index numbers for paging
221 if ( $total_rows > $resultsperpage ) {
222 my $pages = $total_rows / $resultsperpage;
223 if ( $total_rows % $resultsperpage ) {
227 # set up page indexes for at max 15 pages
228 my $max_idx = ( $pages < 15 ) ? $pages : 15;
229 my $current_page = ( $startfrom / $resultsperpage ) - 1;
230 for my $idx ( 1 .. $max_idx ) {
233 startfrom => ( $idx - 1 ) * $resultsperpage,
234 highlight => ( $idx == $current_page ),
241 displaynext => $displaynext,
242 displayprev => $displayprev,
243 nextstartfrom => ( ( $next_row < $total_rows ) ? $next_row : $total_rows ),
244 prevstartfrom => ( ( $prev_row > 0 ) ? $prev_row : 0 )