X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=acqui%2Fbasket.pl;h=0e2947328e1c30eface8aa7e72c3da664022145f;hb=718d8ba2aa2abeaf177827f55f98bf27c5fe6177;hp=8f646d05d53bbb5a58440f7badca384bc97c8dd8;hpb=271aa9043df1229790808aef1b3a0a4228adbb74;p=koha.git diff --git a/acqui/basket.pl b/acqui/basket.pl index 8f646d05d5..0e2947328e 100755 --- a/acqui/basket.pl +++ b/acqui/basket.pl @@ -20,18 +20,16 @@ # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA - use strict; use C4::Auth; use C4::Koha; use C4::Output; use CGI; - - use C4::Acquisition; use C4::Bookfund; use C4::Bookseller; -use C4::Date; +use C4::Dates qw/format_date/; +use C4::Debug; =head1 NAME @@ -40,8 +38,8 @@ basket.pl =head1 DESCRIPTION This script display all informations about basket for the supplier given - on input arg. Moreover, it allow to add a new order for this supplier from - an existing record, a suggestion or from a new record. + 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 @@ -49,7 +47,7 @@ basket.pl =item $basketno -this parameter seems to be unused. +The basket number. =item supplierid @@ -57,8 +55,6 @@ the supplier this script have to display the basket. =item order - - =back =cut @@ -66,7 +62,28 @@ the supplier this script have to display the basket. my $query = new CGI; my $basketno = $query->param('basketno'); my $booksellerid = $query->param('supplierid'); -my $order = $query->param('order'); +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", @@ -80,110 +97,120 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( 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 @booksellers = GetBookSeller($booksellerid); -my $count2 = scalar @booksellers; - -# 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} ); -warn $loggedinuser; -warn $basket->{creationdate}; -warn $basket->{authorisedby} ; - -my ( $count, @results ); -@results = GetOrders( $basketno, $order ); -$count = scalar @results; - -my $line_total; # total of each line -my $sub_total; # total of line totals -my $gist; # GST -my $grand_total; # $subttotal + $gist -my $toggle = 0; - - -# 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 = ConvertCurrency( $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=%{$results[$i]}; - if ( $toggle == 0 ) { - $line{color} = '#EEEEEE'; - $toggle = 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; + + 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; } - else { - $line{color} = 'white'; - $toggle = 0; + 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 } - $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; + 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;