X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=sidebyside;f=acqui%2Fbasket.pl;h=0e2947328e1c30eface8aa7e72c3da664022145f;hb=5d23aafbee3e44efc3f352897483bc93cf0188c3;hp=0e9b533608d196ada92a06d95e08ec238abaaee4;hpb=3d78e15b315a205bd39bbf85a28d423a2cdc11cf;p=koha.git diff --git a/acqui/basket.pl b/acqui/basket.pl index 0e9b533608..0e2947328e 100755 --- a/acqui/basket.pl +++ b/acqui/basket.pl @@ -1,11 +1,8 @@ #!/usr/bin/perl -# $Id$ - #script to show display basket of orders #written by chris@katipo.co.nz 24/2/2000 - # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. @@ -28,123 +25,192 @@ use C4::Auth; use C4::Koha; use C4::Output; use CGI; -use C4::Interface::CGI::Output; -use C4::Database; -use HTML::Template; use C4::Acquisition; -use C4::Date; +use C4::Bookfund; +use C4::Bookseller; +use C4::Dates qw/format_date/; +use C4::Debug; + +=head1 NAME + +basket.pl + +=head1 DESCRIPTION + + This script display all informations about basket for the supplier given + on input arg. Moreover, it allows us to add a new order for this supplier from + an existing record, a suggestion or a new record. + +=head1 CGI PARAMETERS + +=over 4 -my $query =new CGI; -my $basketno = $query->param('basket'); +=item $basketno + +The basket number. + +=item supplierid + +the supplier this script have to display the basket. + +=item order + +=back + +=cut + +my $query = new CGI; +my $basketno = $query->param('basketno'); my $booksellerid = $query->param('supplierid'); -my $order = $query->param('order'); -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "acqui/basket.tmpl", - query => $query, - type => "intranet", - authnotrequired => 0, - flagsrequired => {acquisition => 1}, - debug => 1, - }); -my ($count,@results); - - -my $basket = getbasket($basketno); +my $sort = $query->param('order'); + +my @sort_loop; +if (defined $sort) { + foreach (split /\,/, $sort) { + my %sorthash = ( + string => $_, + ); + # other possibly valid tables for later: aqbookfund biblio biblioitems + if ( + (/^\s*(aqorderbreakdown)\.(\w+)\s*$/ and $2 eq 'bookfundid' ) or + (/^\s*(biblioitems)\.(\w+)\s*$/ and $2 eq 'publishercode') + ) { + $sorthash{table} = $1; + $sorthash{field} = $2; + } else { + $sorthash{error} = 1; + } + push @sort_loop, \%sorthash; + } +} + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "acqui/basket.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => { acquisition => 1 }, + debug => 1, + } +); + +my $basket = GetBasket($basketno); + +# FIXME : what about the "discount" percentage? # FIXME : the query->param('supplierid') below is probably useless. The bookseller is always known from the basket # if no booksellerid in parameter, get it from basket # warn "=>".$basket->{booksellerid}; $booksellerid = $basket->{booksellerid} unless $booksellerid; -my ($count2,@booksellers)=bookseller($booksellerid); - -# get librarian branch... -if (C4::Context->preference("IndependantBranches")) { - my $userenv = C4::Context->userenv; - unless ($userenv->{flags} == 1){ - my $validtest = ($basket->{creationdate} eq '') - || ($basket->{branch} eq '') - || ($userenv->{branch} eq $basket->{branch}) - || ($userenv->{branch} eq '') - || ($basket->{branch} eq ''); - unless ($validtest) { - print $query->redirect("../mainpage.pl"); - exit 1; - } - } +my ($bookseller) = GetBookSellerFromId($booksellerid); + +if ( !$bookseller ) { + $template->param( NO_BOOKSELLER => 1 ); } +else { + + # get librarian branch... + if ( C4::Context->preference("IndependantBranches") ) { + my $userenv = C4::Context->userenv; + unless ( $userenv->{flags} == 1 ) { + my $validtest = ( $basket->{creationdate} eq '' ) + || ( $userenv->{branch} eq $basket->{branch} ) + || ( $userenv->{branch} eq '' ) + || ( $basket->{branch} eq '' ); + unless ($validtest) { + print $query->redirect("../mainpage.pl"); + exit 1; + } + } + } + + # if new basket, pre-fill infos + $basket->{creationdate} = "" unless ( $basket->{creationdate} ); + $basket->{authorisedby} = $loggedinuser unless ( $basket->{authorisedby} ); + $debug + and warn sprintf + "loggedinuser: $loggedinuser; creationdate: %s; authorisedby: %s", + $basket->{creationdate}, $basket->{authorisedby}; + + my @results = GetOrders( $basketno, $sort ); + my $count = scalar @results; -# if new basket, pre-fill infos -$basket->{creationdate} = "" unless ($basket->{creationdate}); -$basket->{authorisedby} = $loggedinuser unless ($basket->{authorisedby}); -($count,@results)=getbasketcontent($basketno,'',$order); - -my $line_total; # total of each line -my $sub_total; # total of line totals -my $gist; # GST -my $grand_total; # $subttotal + $gist - -# my $line_total_est; # total of each line -my $sub_total_est; # total of line totals -my $gist_est; # GST -my $grand_total_est; # $subttotal + $gist - -my $qty_total; - -my @books_loop; -for (my $i=0;$i<$count;$i++){ - my $rrp=$results[$i]->{'listprice'}; - $rrp=curconvert($results[$i]->{'currency'},$rrp); - - $sub_total_est+=$results[$i]->{'quantity'}*$results[$i]->{'rrp'}; - $line_total=$results[$i]->{'quantity'}*$results[$i]->{'ecost'}; - $sub_total+=$line_total; - $qty_total += $results[$i]->{'quantity'}; - my %line; - $line{ordernumber} = $results[$i]->{'ordernumber'}; - $line{publishercode} = $results[$i]->{'publishercode'}; - $line{isbn} = $results[$i]->{'isbn'}; - $line{booksellerid} = $results[$i]->{'booksellerid'}; - $line{basketno}=$basketno; - $line{title} = $results[$i]->{'title'}; - $line{notes} = $results[$i]->{'notes'}; - $line{author} = $results[$i]->{'author'}; - $line{i} = $i; - $line{rrp} = sprintf("%.2f",$results[$i]->{'rrp'}); - $line{ecost} = sprintf("%.2f",$results[$i]->{'ecost'}); - $line{quantity} = $results[$i]->{'quantity'}; - $line{quantityrecieved} = $results[$i]->{'quantityreceived'}; - $line{line_total} = sprintf("%.2f",$line_total); - $line{biblionumber} = $results[$i]->{'biblionumber'}; - $line{bookfundid} = $results[$i]->{'bookfundid'}; - $line{odd} = $i %2; - push @books_loop, \%line; + my $sub_total; # total of line totals + my $grand_total; # $subttotal + $gist + + # my $line_total_est; # total of each line + my $sub_total_est; # total of line totals + my $sub_total_rrp; # total of line totals + my $grand_total_est; # $subttotal + $gist + + my $qty_total; + my @books_loop; + for ( my $i = 0 ; $i < $count ; $i++ ) { + my $rrp = $results[$i]->{'listprice'}; + my $qty = $results[$i]->{'quantity'}; + $rrp = ConvertCurrency( $results[$i]->{'currency'}, $rrp ); + $sub_total_rrp += $qty * $results[$i]->{'rrp'}; + my $line_total = $qty * $results[$i]->{'ecost'}; + # FIXME: what about the "actual cost" field? + $sub_total += $line_total; + $qty_total += $qty; + my %line = %{ $results[$i] }; + ($i%2) and $line{toggle} = 1; + $line{order_received}= ( $qty eq $results[$i]->{'quantityreceived'} ); + $line{basketno} = $basketno; + $line{i} = $i; + $line{rrp} = sprintf( "%.2f", $line{'rrp'} ); + $line{ecost} = sprintf( "%.2f", $line{'ecost'} ); + $line{line_total} = sprintf( "%.2f", $line_total ); + $line{odd} = $i % 2; + push @books_loop, \%line; + } + my $prefgist = C4::Context->preference("gist") || 0; + my $gist = $sub_total * $prefgist; + my $gist_rrp = $sub_total_rrp * $prefgist; + $grand_total = $sub_total_est = $sub_total; + $grand_total_est = $sub_total_est; # FIXME: Too many things that are ALL the SAME + my $temp; + if ($temp = $bookseller->{'listincgst'}) { + $template->param(listincgst => $temp); + $gist = 0; + } else { + $grand_total += $gist; + $grand_total_est += $sub_total_est * $prefgist; # same thing as += gist + } + if ($temp = $bookseller->{'discount'}) { + $template->param(discount => sprintf( "%.2f", $temp )); + } + $template->param( + basketno => $basketno, + creationdate => format_date( $basket->{creationdate} ), + authorisedby => $basket->{authorisedby}, + authorisedbyname => $basket->{authorisedbyname}, + closedate => format_date( $basket->{closedate} ), + active => $bookseller->{'active'}, + booksellerid => $bookseller->{'id'}, + name => $bookseller->{'name'}, + address1 => $bookseller->{'address1'}, + address2 => $bookseller->{'address2'}, + address3 => $bookseller->{'address3'}, + address4 => $bookseller->{'address4'}, + entrydate => format_date( $results[0]->{'entrydate'} ), + books_loop => \@books_loop, + sort_loop => \@sort_loop, + count => $count, + gist => $gist ? sprintf( "%.2f", $gist ) : 0, + gist_rate => sprintf( "%.2f", $prefgist * 100) . '%', + gist_est => sprintf( "%.2f", $sub_total_est * $prefgist ), + gist_rrp => sprintf( "%.2f", $gist_rrp), + sub_total => sprintf( "%.2f", $sub_total ), + grand_total => sprintf( "%.2f", $grand_total ), + sub_total_est => sprintf( "%.2f", $sub_total_est), + grand_total_est => sprintf( "%.2f", $grand_total_est), + sub_total_rrp => sprintf( "%.2f", $sub_total_rrp), + grand_total_rrp => sprintf( "%.2f", $sub_total_rrp + $gist_rrp), + currency => $bookseller->{'listprice'}, + qty_total => $qty_total, + GST => $prefgist, + ); } -my $prefgist =C4::Context->preference("gist"); -$gist=sprintf("%.2f",$sub_total*$prefgist); -$grand_total=$sub_total+$gist; -$grand_total_est = $sub_total_est+sprintf("%.2f",$sub_total_est*$prefgist); -$gist_est = sprintf("%.2f",$sub_total_est*$prefgist); -$template->param(basketno => $basketno, - creationdate => format_date($basket->{creationdate}), - authorisedby => $basket->{authorisedby}, - authorisedbyname => $basket->{authorisedbyname}, - closedate => format_date($basket->{closedate}), - active => $booksellers[0]->{'active'}, - booksellerid=> $booksellers[0]->{'id'}, - name => $booksellers[0]->{'name'}, - address1 => $booksellers[0]->{'address1'}, - address2 => $booksellers[0]->{'address2'}, - address3 => $booksellers[0]->{'address3'}, - address4 => $booksellers[0]->{'address4'}, - entrydate => format_date($results[0]->{'entrydate'}), - books_loop => \@books_loop, - count =>$count, - sub_total => $sub_total, - gist => $gist, - grand_total =>$grand_total, - sub_total_est => $sub_total_est, - gist_est => $gist_est, - grand_total_est =>$grand_total_est, - currency => $booksellers[0]->{'listprice'}, - qty_total => $qty_total, - ); output_html_with_http_headers $query, $cookie, $template->output;