X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=acqui%2Fparcels.pl;h=173c0c8ef22ec5b1ea8ceab6c8bf8e8f3e520360;hb=befebb8a5c7757cddd0fbb0c639ca8f909d931c9;hp=0c573bf7edb2770e2e069f72f8f363e9d2f0b684;hpb=1b757f479a6ffc3bd2ecc0878972c898b328179a;p=koha_gimpoz diff --git a/acqui/parcels.pl b/acqui/parcels.pl index 0c573bf7ed..173c0c8ef2 100755 --- a/acqui/parcels.pl +++ b/acqui/parcels.pl @@ -18,15 +18,16 @@ # 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. =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,10 +35,12 @@ 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) @@ -48,12 +51,15 @@ Orderby can be equals to =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,100 +67,118 @@ To know how many results have to be display / page. =cut use strict; +use warnings; use CGI; 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::Bookseller qw/ GetBookSellerFromId /; + +my $input = CGI->new; +my $booksellerid = $input->param('booksellerid'); +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'); my $resultsperpage = $input->param('resultsperpage'); +$resultsperpage ||= 20; + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { template_name => 'acqui/parcels.tmpl', + query => $input, + type => 'intranet', + authnotrequired => 0, + flagsrequired => { acquisition => 'order_receive' }, + debug => 1, + } +); +my $bookseller = GetBookSellerFromId($booksellerid); +my @parcels = GetParcels( $booksellerid, $order, $code, $datefrom, $dateto ); +my $count_parcels = @parcels; -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "acqui/parcels.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {acquisition => 'order_receive'}, - debug => 1, -}); +# 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, + code => $p->{booksellerinvoicenumber}, + nullcode => $p->{booksellerinvoicenumber} eq 'NULL', + emptycode => $p->{booksellerinvoicenumber} eq q{}, + raw_datereceived => $p->{datereceived}, + datereceived => format_date( $p->{datereceived} ), + bibcount => $p->{biblio}, + reccount => $p->{itemsreceived}, + itemcount => $p->{itemsexpected}, + }; +} +if ($count_parcels) { + $template->param( searchresults => $loopres, count => $count_parcels ); +} +$template->param( + orderby => $order, + filter => $code, + datefrom => $datefrom, + dateto => $dateto, + resultsperpage => $resultsperpage, + name => $bookseller->{'name'}, + DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), + datereceived_today => C4::Dates->new()->output(), + booksellerid => $booksellerid, + GST => C4::Context->preference('gist'), +); +output_html_with_http_headers $input, $cookie, $template->output; -my $bookseller=GetBookSellerFromId($supplierid); -$resultsperpage = 20 unless ($resultsperpage); -my @results =GetParcels($supplierid, $order, $code,$datefrom,$dateto); -my $count = scalar @results; +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; -# multi page display gestion -$startfrom=0 unless ($startfrom); -if ($count>$resultsperpage){ - my $displaynext=0; - my $displayprev=$startfrom; - if(($count - ($startfrom+$resultsperpage)) > 0 ) { + 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; - -for (my $i=$startfrom;$i<=($startfrom+$resultsperpage-1<$count-1?$startfrom+$resultsperpage-1:$count-1);$i++){ - - 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}; - 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 => $bookseller->{'name'}, - DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), - datereceived_today => C4::Dates->new()->output(), - 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; +}