X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=acqui%2Fparcels.pl;h=ffcbb66bbf3a2595230e806f1aa2de4b05a5ea97;hb=19a977dc7b779173c4a3e96b6b06dc35db663601;hp=213ba23f37339f44d41f18e63cf6d4490aa20868;hpb=52e1a15e5ada589f211f5a95ab46c799fe24738d;p=koha.git diff --git a/acqui/parcels.pl b/acqui/parcels.pl index 213ba23f37..ffcbb66bbf 100755 --- a/acqui/parcels.pl +++ b/acqui/parcels.pl @@ -2,31 +2,32 @@ #script to show display basket of orders -#written by chris@katipo.co.nz 24/2/2000 # Copyright 2000-2002 Katipo Communications +# Copyright 2008-2009 BibLibre SARL # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . =head1 NAME parcels.pl =head1 DESCRIPTION + This script shows all orders/parcels receipt or pending for a given supplier. It allows to write an order/parcels as 'received' when he arrives. @@ -34,26 +35,31 @@ It allows to write an order/parcels as 'received' when he arrives. =over 4 -=item supplierid +=item booksellerid + To know the supplier this script has to show orders. =item orderby + sort list of order by 'orderby'. Orderby can be equals to * datereceived desc (default value) - * aqorders.booksellerinvoicenumber + * invoicenumber * datereceived - * aqorders.booksellerinvoicenumber desc + * invoicenumber desc =item filter =item datefrom + To filter on date =item dateto + To filter on date =item resultsperpage + To know how many results have to be display / page. =back @@ -61,108 +67,188 @@ To know how many results have to be display / page. =cut use strict; -use CGI; +use warnings; +use CGI qw ( -utf8 ); use C4::Auth; use C4::Output; -use C4::Dates qw/format_date/; use C4::Acquisition; -use C4::Bookseller; - -my $input=new CGI; -my $supplierid=$input->param('supplierid'); -my $order=$input->param('orderby') || "datereceived desc"; -my $startfrom=$input->param('startfrom'); -my $code=$input->param('filter'); -my $datefrom=$input->param('datefrom'); -my $dateto=$input->param('dateto'); +use C4::Budgets; + +use Koha::Acquisition::Bookseller; +use Koha::DateUtils qw( output_pref dt_from_string ); + +my $input = CGI->new; +my $booksellerid = $input->param('booksellerid'); +my $order = $input->param('orderby') || 'shipmentdate desc'; +my $startfrom = $input->param('startfrom'); +my $code = $input->param('filter'); +my $datefrom = $input->param('datefrom'); +my $dateto = $input->param('dateto'); my $resultsperpage = $input->param('resultsperpage'); +my $op = $input->param('op'); +$resultsperpage ||= 20; + +our ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user( + { template_name => 'acqui/parcels.tt', + query => $input, + type => 'intranet', + authnotrequired => 0, + flagsrequired => { acquisition => 'order_receive' }, + debug => 1, + } +); + +my $invoicenumber = $input->param('invoice'); +my $shipmentcost = $input->param('shipmentcost'); +my $shipmentcost_budgetid = $input->param('shipmentcost_budgetid'); +my $shipmentdate = $input->param('shipmentdate'); +$shipmentdate and $shipmentdate = output_pref({ str => $shipmentdate, dateformat => 'iso', dateonly => 1 }); + +if ( $op and $op eq 'new' ) { + if ( C4::Context->preference('AcqWarnOnDuplicateInvoice') ) { + my @invoices = GetInvoices( + supplierid => $booksellerid, + invoicenumber => $invoicenumber, + ); + if ( scalar @invoices > 0 ) { + $template->{'VARS'}->{'duplicate_invoices'} = \@invoices; + $template->{'VARS'}->{'invoicenumber'} = $invoicenumber; + $template->{'VARS'}->{'shipmentdate'} = $shipmentdate; + $template->{'VARS'}->{'shipmentcost'} = $shipmentcost; + $template->{'VARS'}->{'shipmentcost_budgetid'} = + $shipmentcost_budgetid; + } + } + $op = 'confirm' unless $template->{'VARS'}->{'duplicate_invoices'}; +} +if ($op and $op eq 'confirm') { + my $invoiceid = AddInvoice( + invoicenumber => $invoicenumber, + booksellerid => $booksellerid, + shipmentdate => $shipmentdate, + shipmentcost => $shipmentcost, + shipmentcost_budgetid => $shipmentcost_budgetid, + ); + if(defined $invoiceid) { + # Successful 'Add' + print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid"); + exit 0; + } else { + $template->param(error_failed_to_create_invoice => 1); + } +} + +my $bookseller = Koha::Acquisition::Bookseller->fetch({ id => $booksellerid }); +my @parcels = GetInvoices( + supplierid => $booksellerid, + invoicenumber => $code, + ( $datefrom ? ( shipmentdatefrom => output_pref({ dt => dt_from_string($datefrom), dateformat => 'iso' }) ) : () ), + ( $dateto ? ( shipmentdateto => output_pref({ dt => dt_from_string($dateto), dateformat => 'iso' }) ) : () ), + order_by => $order +); +my $count_parcels = @parcels; + +# multi page display gestion +$startfrom ||= 0; +if ( $count_parcels > $resultsperpage ) { + set_page_navigation( $count_parcels, $startfrom, $resultsperpage ); +} +my $loopres = []; + +my $next_page_start = $startfrom + $resultsperpage; +my $last_row = ( $next_page_start < $count_parcels ) ? $next_page_start - 1 : $count_parcels - 1; +for my $i ( $startfrom .. $last_row) { + my $p = $parcels[$i]; + + push @{$loopres}, + { number => $i + 1, + invoiceid => $p->{invoiceid}, + code => $p->{invoicenumber}, + nullcode => $p->{invoicenumber} eq 'NULL', + emptycode => $p->{invoicenumber} eq q{}, + raw_datereceived => $p->{shipmentdate}, + datereceived => $p->{shipmentdate}, + bibcount => $p->{receivedbiblios} || 0, + reccount => $p->{receiveditems} || 0, + itemcount => $p->{itemsexpected} || 0, + }; +} +if ($count_parcels) { + $template->param( searchresults => $loopres, count => $count_parcels ); +} -my @booksellers=GetBookSeller($supplierid); -my $count = scalar @booksellers; +# build budget list +my $budget_loop = []; +my $budgets = GetBudgetHierarchy; +foreach my $r (@{$budgets}) { + next unless (CanUserUseBudget($loggedinuser, $r, $flags)); + if (!defined $r->{budget_amount} || $r->{budget_amount} == 0) { + next; + } + push @{$budget_loop}, { + b_id => $r->{budget_id}, + b_txt => $r->{budget_name}, + b_active => $r->{budget_period_active}, + }; +} -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "acqui/parcels.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {acquisition => 1}, - debug => 1, -}); +@{$budget_loop} = + sort { uc( $a->{b_txt}) cmp uc( $b->{b_txt}) } @{$budget_loop}; -$resultsperpage = 20 unless ($resultsperpage); -my @results =GetParcels($supplierid, $order, $code,$datefrom,$dateto); -$count = scalar @results; +$template->param( + orderby => $order, + filter => $code, + datefrom => $datefrom, + dateto => $dateto, + resultsperpage => $resultsperpage, + name => $bookseller->{'name'}, + shipmentdate_today => dt_from_string, + booksellerid => $booksellerid, + GST => C4::Context->preference('gist'), + budgets => $budget_loop, +); -# multi page display gestion -$startfrom=0 unless ($startfrom); -if ($count>$resultsperpage){ - my $displaynext=0; - my $displayprev=$startfrom; - if(($count - ($startfrom+$resultsperpage)) > 0 ) { +output_html_with_http_headers $input, $cookie, $template->output; + +sub set_page_navigation { + my ( $total_rows, $startfrom, $resultsperpage ) = @_; + my $displaynext = 0; + my $displayprev = $startfrom; + my $next_row = $startfrom + $resultsperpage; + my $prev_row = $startfrom - $resultsperpage; + + if ( $total_rows - $next_row > 0 ) { $displaynext = 1; } - my @numbers = (); - if ($count>$resultsperpage) { - for (my $i=1; $i<$count/$resultsperpage+1; $i++) { - if ($i<16) { - my $highlight=0; - ($startfrom/$resultsperpage==($i-1)) && ($highlight=1); - push @numbers, { number => $i, - highlight => $highlight , -# searchdata=> "test", - startfrom => ($i-1)*$resultsperpage}; - } + # set up index numbers for paging + my $numbers = []; + if ( $total_rows > $resultsperpage ) { + my $pages = $total_rows / $resultsperpage; + if ( $total_rows % $resultsperpage ) { + ++$pages; } - } - my $from = $startfrom*$resultsperpage+1; - my $to; - if($count < (($startfrom+1)*$resultsperpage)){ - $to = $count; - } else { - $to = (($startfrom+1)*$resultsperpage); + # set up page indexes for at max 15 pages + my $max_idx = ( $pages < 15 ) ? $pages : 15; + my $current_page = ( $startfrom / $resultsperpage ) - 1; + for my $idx ( 1 .. $max_idx ) { + push @{$numbers}, + { number => $idx, + startfrom => ( $idx - 1 ) * $resultsperpage, + highlight => ( $idx == $current_page ), + }; + } } - $template->param(numbers=>\@numbers, - displaynext=>$displaynext, - displayprev=>$displayprev, - nextstartfrom=>(($startfrom+$resultsperpage<$count)?$startfrom+$resultsperpage:$count), - prevstartfrom=>(($startfrom-$resultsperpage>0)?$startfrom-$resultsperpage:0) - ); -} -my @loopres; - -my $hilighted=0; -for (my $i=$startfrom;$i<=($startfrom+$resultsperpage-1<$count-1?$startfrom+$resultsperpage-1:$count-1);$i++){ -### startfrom: $startfrom -### resultsperpage: $resultsperpage -### count: $count -### code: $results[$i]->{booksellerinvoicenumber} -### datereceived: $results[$i]->{datereceived} - - my %cell; - $cell{number}=$i+1; - $cell{code}=$results[$i]->{booksellerinvoicenumber}; - $cell{nullcode}=$results[$i]->{booksellerinvoicenumber} eq "NULL"; - $cell{emptycode}=$results[$i]->{booksellerinvoicenumber} eq ''; - $cell{raw_datereceived}=$results[$i]->{datereceived}; - $cell{datereceived}=format_date($results[$i]->{datereceived}); - $cell{bibcount}=$results[$i]->{biblio}; - $cell{reccount}=$results[$i]->{itemsreceived}; - $cell{itemcount}=$results[$i]->{itemsexpected}; - $cell{hilighted} = $hilighted%2; - $hilighted++; - push @loopres, \%cell; -} -$template->param(searchresults=>\@loopres, count=>$count) if ($count); -$template->param(orderby=>$order, filter=>$code, datefrom=>$datefrom,dateto=>$dateto, resultsperpage=>$resultsperpage); -$template->param( - name => $booksellers[0]->{'name'}, - DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), - supplierid => $supplierid, - GST => C4::Context->preference("gist"), - ); -output_html_with_http_headers $input, $cookie, $template->output; + $template->param( + numbers => $numbers, + displaynext => $displaynext, + displayprev => $displayprev, + nextstartfrom => ( ( $next_row < $total_rows ) ? $next_row : $total_rows ), + prevstartfrom => ( ( $prev_row > 0 ) ? $prev_row : 0 ) + ); + return; +}