X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=acqui%2Fparcel.pl;h=b45155c0b88f08d3c734dca63ca4c85fecddfc64;hb=10e1cbeb1421a6351ac0df4d0c76a8ae79d4dd9d;hp=ee96e3f33372be87dc16d467b6eee3d74361d838;hpb=d932f6ff250c3a50db379b23abfc40a77620e94b;p=koha_fer diff --git a/acqui/parcel.pl b/acqui/parcel.pl index ee96e3f333..b45155c0b8 100755 --- a/acqui/parcel.pl +++ b/acqui/parcel.pl @@ -67,9 +67,11 @@ use CGI; use C4::Output; use C4::Dates qw/format_date format_date_in_iso/; use C4::Suggestions; +use C4::Reserves qw/GetReservesFromBiblionumber/; use JSON; my $input=new CGI; +my $sticky_filters = $input->param('sticky_filters') || 0; sub get_value_with_gst_params { my $value = shift; @@ -117,6 +119,18 @@ my ($template, $loggedinuser, $cookie) debug => 1, }); +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); + unless($parent_ordernumber) { + $template->param(error_cancelling_receipt => 1); + } +} + my $invoiceid = $input->param('invoiceid'); my $invoice; $invoice = GetInvoiceDetails($invoiceid) if $invoiceid; @@ -130,24 +144,14 @@ unless( $invoiceid and $invoice->{invoiceid} ) { exit; } -my $op = $input->param('op') // ''; - -if ($op eq 'cancelreceipt') { - my $ordernumber = $input->param('ordernumber'); - my $parent_ordernumber = CancelReceipt($ordernumber); - unless($parent_ordernumber) { - $template->param(error_cancelling_receipt => 1); - } -} - my $booksellerid = $invoice->{booksellerid}; my $bookseller = GetBookSellerFromId($booksellerid); my $gst = $bookseller->{gstrate} // C4::Context->preference("gist") // 0; my $datereceived = C4::Dates->new(); my $cfstr = "%.2f"; # currency format string -- could get this from currency table. -my @parcelitems = @{ $invoice->{orders} }; -my $countlines = scalar @parcelitems; +my @orders = @{ $invoice->{orders} }; +my $countlines = scalar @orders; my $totalprice = 0; my $totalquantity = 0; my $total; @@ -158,19 +162,25 @@ 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 }; +for my $order ( @orders ) { + $order->{unitprice} = get_value_with_gst_params( $order->{unitprice}, $order->{gstrate}, $bookseller ); + $total = ( $order->{unitprice} ) * $order->{quantityreceived}; + $order->{'unitprice'} += 0; + my %line = %{ $order }; my $ecost = get_value_with_gst_params( $line{ecost}, $line{gstrate}, $bookseller ); $line{ecost} = sprintf( "%.2f", $ecost ); $line{invoice} = $invoice->{invoicenumber}; $line{total} = sprintf($cfstr, $total); $line{booksellerid} = $invoice->{booksellerid}; - $totalprice += $item->{'unitprice'}; - $line{unitprice} = sprintf( $cfstr, $item->{'unitprice'} ); + $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} ); + $totalprice += $order->{unitprice}; + $line{unitprice} = sprintf( $cfstr, $order->{unitprice} ); my $gste = get_gste( $line{total}, $line{gstrate}, $bookseller ); my $gst = get_gst( $line{total}, $line{gstrate}, $bookseller ); $foot{$line{gstrate}}{gstrate} = $line{gstrate}; @@ -186,7 +196,8 @@ for my $item ( @parcelitems ) { if ( $line{parent_ordernumber} != $line{ordernumber} ) { if ( grep { $_->{ordernumber} == $line{parent_ordernumber} } - @parcelitems ) + @orders + ) { $line{cannot_cancel} = 1; } @@ -196,24 +207,50 @@ for my $item ( @parcelitems ) { $line{budget_name} = $budget->{'budget_name'}; push @loop_received, \%line; - $totalquantity += $item->{'quantityreceived'}; + $totalquantity += $order->{quantityreceived}; } 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, + }); + $template->param( + summaryfilter => $search, + eanfilter => $ean, + basketfilter => $basketname, + orderfilter => $orderno, + basketgroupnamefilter => $basketgroupname, + ); }else{ - $pendingorders = GetPendingOrders($booksellerid); + $pendingorders = SearchOrders({ + booksellerid => $booksellerid, + pending => 1 + }); } my $countpendings = scalar @$pendingorders; @@ -297,5 +334,6 @@ $template->param( total_quantity => $total_quantity, total_gste => sprintf( "%.2f", $total_gste ), total_gsti => sprintf( "%.2f", $total_gsti ), + sticky_filters => $sticky_filters, ); output_html_with_http_headers $input, $cookie, $template->output;