X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=acqui%2Fparcel.pl;h=6dee09a9e4b4deed3df16ae65764d8e2da7c40c8;hb=df97814f3034a3d5015546c4eca21f08ae951e37;hp=0e0f41bce384819a98aeab4310bba375435b0e22;hpb=65be03846d064dd6d9e7159550a269a352054b65;p=srvgit diff --git a/acqui/parcel.pl b/acqui/parcel.pl index 0e0f41bce3..6dee09a9e4 100755 --- a/acqui/parcel.pl +++ b/acqui/parcel.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -#script to recieve orders +#script to receive orders # Copyright 2000-2002 Katipo Communications @@ -8,18 +8,18 @@ # # 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., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . =head1 NAME @@ -60,56 +60,23 @@ use warnings; use C4::Auth; use C4::Acquisition; use C4::Budgets; -use C4::Bookseller qw/ GetBookSellerFromId /; use C4::Biblio; use C4::Items; -use CGI; +use CGI qw ( -utf8 ); use C4::Output; -use C4::Dates qw/format_date format_date_in_iso/; use C4::Suggestions; -use JSON; - -my $input=new CGI; +use C4::Reserves qw/GetReservesFromBiblionumber/; -sub get_value_with_gst_params { - my $value = shift; - my $gstrate = shift; - my $bookseller = shift; - if ( $bookseller->{listincgst} ) { - if ( $bookseller->{invoiceincgst} ) { - return $value; - } else { - return $value / ( 1 + $gstrate ); - } - } else { - if ( $bookseller->{invoiceincgst} ) { - return $value * ( 1 + $gstrate ); - } else { - return $value; - } - } -} +use Koha::Acquisition::Bookseller; +use Koha::DateUtils; -sub get_gste { - my $value = shift; - my $gstrate = shift; - my $bookseller = shift; - return $bookseller->{invoiceincgst} - ? $value / ( 1 + $gstrate ) - : $value; -} +use JSON; -sub get_gst { - my $value = shift; - my $gstrate = shift; - my $bookseller = shift; - return $bookseller->{invoiceincgst} - ? $value / ( 1 + $gstrate ) * $gstrate - : $value * ( 1 + $gstrate ) - $value; -} +my $input=new CGI; +my $sticky_filters = $input->param('sticky_filters') || 0; my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "acqui/parcel.tmpl", + = get_template_and_user({template_name => "acqui/parcel.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -117,9 +84,10 @@ my ($template, $loggedinuser, $cookie) debug => 1, }); -my $invoiceid = $input->param('invoiceid'); my $op = $input->param('op') // ''; +# process cancellation first so that list of +# orders to display is calculated after if ($op eq 'cancelreceipt') { my $ordernumber = $input->param('ordernumber'); my $parent_ordernumber = CancelReceipt($ordernumber); @@ -128,67 +96,59 @@ if ($op eq 'cancelreceipt') { } } -my $invoice = GetInvoiceDetails($invoiceid); +my $invoiceid = $input->param('invoiceid'); +my $invoice; +$invoice = GetInvoiceDetails($invoiceid) if $invoiceid; + +unless( $invoiceid and $invoice->{invoiceid} ) { + $template->param( + error_invoice_not_known => 1, + no_orders_to_display => 1 + ); + output_html_with_http_headers $input, $cookie, $template->output; + exit; +} + my $booksellerid = $invoice->{booksellerid}; -my $bookseller = GetBookSellerFromId($booksellerid); +my $bookseller = Koha::Acquisition::Bookseller->fetch({ id => $booksellerid }); my $gst = $bookseller->{gstrate} // C4::Context->preference("gist") // 0; -my $datereceived = C4::Dates->new(); -my $code = $input->param('code'); -my @rcv_err = $input->param('error'); -my @rcv_err_barcode = $input->param('error_bc'); -my $startfrom=$input->param('startfrom'); -my $resultsperpage = $input->param('resultsperpage'); -$resultsperpage = 20 unless ($resultsperpage); -$startfrom=0 unless ($startfrom); - - - -# If receiving error, report the error (coming from finishrecieve.pl(sic)). -if( scalar(@rcv_err) ) { - my $cnt=0; - my $error_loop; - for my $err (@rcv_err) { - push @$error_loop, { "error_$err" => 1 , barcode => $rcv_err_barcode[$cnt] }; - $cnt++; - } - $template->param( receive_error => 1 , - error_loop => $error_loop, - ); -} -my $cfstr = "%.2f"; # currency format string -- could get this from currency table. -my @parcelitems = @{ $invoice->{orders} }; -my $countlines = scalar @parcelitems; -my $totalprice = 0; -my $totalquantity = 0; -my $total; +my @orders = @{ $invoice->{orders} }; +my $countlines = scalar @orders; my @loop_received = (); my @book_foot_loop; my %foot; -my $total_quantity = 0; my $total_gste = 0; my $total_gsti = 0; -for my $item ( @parcelitems ) { - $item->{unitprice} = get_value_with_gst_params( $item->{unitprice}, $item->{gstrate}, $bookseller ); - $total = ( $item->{'unitprice'} ) * $item->{'quantityreceived'}; - $item->{'unitprice'} += 0; - my %line; - %line = %{ $item }; - my $ecost = get_value_with_gst_params( $line{ecost}, $line{gstrate}, $bookseller ); - $line{ecost} = sprintf( "%.2f", $ecost ); +my $subtotal_for_funds; +for my $order ( @orders ) { + $order = C4::Acquisition::populate_order_with_prices({ order => $order, booksellerid => $bookseller->{id}, receiving => 1, ordering => 1 }); + $order->{'unitprice'} += 0; + + if ( $bookseller->{listincgst} and not $bookseller->{invoiceincgst} ) { + $order->{ecost} = $order->{ecostgste}; + $order->{unitprice} = $order->{unitpricegste}; + } + elsif ( not $bookseller->{listinct} and $bookseller->{invoiceincgst} ) { + $order->{ecost} = $order->{ecostgsti}; + $order->{unitprice} = $order->{unitpricegsti}; + } + $order->{total} = $order->{unitprice} * $order->{quantity}; + + my %line = %{ $order }; $line{invoice} = $invoice->{invoicenumber}; - $line{total} = sprintf($cfstr, $total); - $line{booksellerid} = $invoice->{booksellerid}; - $totalprice += $item->{'unitprice'}; - $line{unitprice} = sprintf( $cfstr, $item->{'unitprice'} ); - my $gste = get_gste( $line{total}, $line{gstrate}, $bookseller ); - my $gst = get_gst( $line{total}, $line{gstrate}, $bookseller ); + $line{holds} = 0; + my @itemnumbers = GetItemnumbersFromOrder( $order->{ordernumber} ); + for my $itemnumber ( @itemnumbers ) { + my $holds = GetReservesFromBiblionumber({ biblionumber => $line{biblionumber}, itemnumber => $itemnumber }); + $line{holds} += scalar( @$holds ); + } + $line{budget} = GetBudgetByOrderNumber( $line{ordernumber} ); $foot{$line{gstrate}}{gstrate} = $line{gstrate}; - $foot{$line{gstrate}}{value} += sprintf( "%.2f", $gst ); - $total_quantity += $line{quantity}; - $total_gste += $gste; - $total_gsti += $gste + $gst; + $foot{$line{gstrate}}{gstvalue} += $line{gstvalue}; + $total_gste += $line{totalgste}; + $total_gsti += $line{totalgsti}; my $suggestion = GetSuggestionInfoFromBiblionumber($line{biblionumber}); $line{suggestionid} = $suggestion->{suggestionid}; @@ -197,53 +157,81 @@ for my $item ( @parcelitems ) { if ( $line{parent_ordernumber} != $line{ordernumber} ) { if ( grep { $_->{ordernumber} == $line{parent_ordernumber} } - @parcelitems ) + @orders + ) { $line{cannot_cancel} = 1; } } - my $budget = GetBudget( $line{budget_id} ); - $line{budget_name} = $budget->{'budget_name'}; + my $budget_name = GetBudgetName( $line{budget_id} ); + $line{budget_name} = $budget_name; - push @loop_received, \%line; - $totalquantity += $item->{'quantityreceived'}; + $subtotal_for_funds->{ $line{budget_name} }{ecost} += $order->{ecost} * $order->{quantity}; + $subtotal_for_funds->{ $line{budget_name} }{unitprice} += $order->{total}; + push @loop_received, \%line; } push @book_foot_loop, map { $_ } values %foot; my @loop_orders = (); -if(!defined $invoice->{closedate}) { +unless( defined $invoice->{closedate} ) { my $pendingorders; - if($input->param('op') eq "search"){ - my $search = $input->param('summaryfilter') || ''; - my $ean = $input->param('eanfilter') || ''; - my $basketno = $input->param('basketfilter') || ''; - my $orderno = $input->param('orderfilter') || ''; - my $grouped; - my $owner; - $pendingorders = GetPendingOrders($booksellerid,$grouped,$owner,$basketno,$orderno,$search,$ean); + if ( $op eq "search" or $sticky_filters ) { + my ( $search, $ean, $basketname, $orderno, $basketgroupname ); + if ( $sticky_filters ) { + $search = $input->cookie("filter_parcel_summary"); + $ean = $input->cookie("filter_parcel_ean"); + $basketname = $input->cookie("filter_parcel_basketname"); + $orderno = $input->cookie("filter_parcel_orderno"); + $basketgroupname = $input->cookie("filter_parcel_basketgroupname"); + } else { + $search = $input->param('summaryfilter') || ''; + $ean = $input->param('eanfilter') || ''; + $basketname = $input->param('basketfilter') || ''; + $orderno = $input->param('orderfilter') || ''; + $basketgroupname = $input->param('basketgroupnamefilter') || ''; + } + $pendingorders = SearchOrders({ + booksellerid => $booksellerid, + basketname => $basketname, + ordernumber => $orderno, + search => $search, + ean => $ean, + basketgroupname => $basketgroupname, + pending => 1, + ordered => 1, + }); + $template->param( + summaryfilter => $search, + eanfilter => $ean, + basketfilter => $basketname, + orderfilter => $orderno, + basketgroupnamefilter => $basketgroupname, + ); }else{ - $pendingorders = GetPendingOrders($booksellerid); + $pendingorders = SearchOrders({ + booksellerid => $booksellerid, + ordered => 1 + }); } my $countpendings = scalar @$pendingorders; for (my $i = 0 ; $i < $countpendings ; $i++) { - my %line; - %line = %{$pendingorders->[$i]}; - - my $ecost = get_value_with_gst_params( $line{ecost}, $line{gstrate}, $bookseller ); - $line{unitprice} = get_value_with_gst_params( $line{unitprice}, $line{gstrate}, $bookseller ); - $line{quantity} += 0; - $line{quantityreceived} += 0; - $line{unitprice}+=0; - $line{ecost} = sprintf( "%.2f", $ecost ); - $line{ordertotal} = sprintf( "%.2f", $ecost * $line{quantity} ); - $line{unitprice} = sprintf("%.2f",$line{unitprice}); - $line{invoice} = $invoice; - $line{booksellerid} = $booksellerid; + my $order = $pendingorders->[$i]; + $order = C4::Acquisition::populate_order_with_prices({ order => $order, booksellerid => $bookseller->{id}, receiving => 1, ordering => 1 }); + + if ( $bookseller->{listincgst} and not $bookseller->{invoiceincgst} ) { + $order->{ecost} = $order->{ecostgste}; + } elsif ( not $bookseller->{listinct} and $bookseller->{invoiceincgst} ) { + $order->{ecost} = $order->{ecostgsti}; + } + $order->{total} = $order->{ecost} * $order->{quantity}; + my %line = %$order; + $line{invoice} = $invoice; + $line{booksellerid} = $booksellerid; my $biblionumber = $line{'biblionumber'}; my $countbiblio = CountBiblioInOrders($biblionumber); @@ -278,43 +266,10 @@ if(!defined $invoice->{closedate}) { $line{holds} = $holds; $line{holds_on_order} = $itemholds?$itemholds:$holds if $line{left_holds_on_order}; - my $budget = GetBudget( $line{budget_id} ); - $line{budget_name} = $budget->{'budget_name'}; - - push @loop_orders, \%line if ($i >= $startfrom and $i < $startfrom + $resultsperpage); - } - - my $count = $countpendings; + my $budget_name = GetBudgetName( $line{budget_id} ); + $line{budget_name} = $budget_name; - if ($count>$resultsperpage){ - my $displaynext=0; - my $displayprev=$startfrom; - if(($count - ($startfrom+$resultsperpage)) > 0 ) { - $displaynext = 1; - } - - my @numbers = (); - for (my $i=1; $i<$count/$resultsperpage+1; $i++) { - my $highlight=0; - ($startfrom/$resultsperpage==($i-1)) && ($highlight=1); - push @numbers, { number => $i, - highlight => $highlight , - startfrom => ($i-1)*$resultsperpage}; - } - - my $from = $startfrom*$resultsperpage+1; - my $to; - if($count < (($startfrom+1)*$resultsperpage)){ - $to = $count; - } else { - $to = (($startfrom+1)*$resultsperpage); - } - $template->param(numbers=>\@numbers, - displaynext=>$displaynext, - displayprev=>$displayprev, - nextstartfrom=>(($startfrom+$resultsperpage<$count)?$startfrom+$resultsperpage:$count), - prevstartfrom=>(($startfrom-$resultsperpage>0)?$startfrom-$resultsperpage:0) - ); + push @loop_orders, \%line; } $template->param( @@ -326,22 +281,16 @@ $template->param( invoiceid => $invoice->{invoiceid}, invoice => $invoice->{invoicenumber}, invoiceclosedate => $invoice->{closedate}, - datereceived => $datereceived->output('iso'), - invoicedatereceived => $datereceived->output('iso'), - formatteddatereceived => $datereceived->output(), + datereceived => dt_from_string, name => $bookseller->{'name'}, booksellerid => $bookseller->{id}, - countreceived => $countlines, loop_received => \@loop_received, - booksellerid => $booksellerid, loop_orders => \@loop_orders, book_foot_loop => \@book_foot_loop, - totalprice => sprintf($cfstr, $totalprice), - totalquantity => $totalquantity, - resultsperpage => $resultsperpage, (uc(C4::Context->preference("marcflavour"))) => 1, - total_quantity => $total_quantity, - total_gste => sprintf( "%.2f", $total_gste ), - total_gsti => sprintf( "%.2f", $total_gsti ), + total_gste => $total_gste, + total_gsti => $total_gsti, + subtotal_for_funds => $subtotal_for_funds, + sticky_filters => $sticky_filters, ); output_html_with_http_headers $input, $cookie, $template->output;