=head1 DESCRIPTION
This script shows all orders receipt or pending for a given supplier.
-It allows to write an order as 'received' when he arrives.
+It allows to write an order as 'received' when it arrives.
=head1 CGI PARAMETERS
=cut
-use strict;
-use warnings;
+use Modern::Perl;
use C4::Auth;
use C4::Acquisition;
use C4::Output;
use C4::Suggestions;
+use Koha::Acquisition::Baskets;
use Koha::Acquisition::Bookseller;
+use Koha::Acquisition::Orders;
use Koha::Biblios;
use Koha::DateUtils;
use Koha::Biblios;
my $subtotal_for_funds;
for my $order ( @orders ) {
$order->{'unitprice'} += 0;
+ $order->{'booksellerid'} = $booksellerid; # required for basket group links
+ my $order_object = Koha::Acquisition::Orders->find($order->{ordernumber});
if ( $bookseller->invoiceincgst ) {
$order->{ecost} = $order->{ecost_tax_included};
$order->{unitprice} = $order->{unitprice_tax_included};
$order->{unitprice} = $order->{unitprice_tax_excluded};
}
- $order->{total} = $order->{unitprice} * $order->{quantity};
+ $order->{total} = get_rounded_price($order->{unitprice}) * $order->{quantity};
my %line = %{ $order };
$line{invoice} = $invoice->{invoicenumber};
- $line{holds} = 0;
- my @itemnumbers = GetItemnumbersFromOrder( $order->{ordernumber} );
- my $biblio = Koha::Biblios->find( $order->{ordernumber} );
- $line{holds} = $biblio->holds_placed_before_today->search(
+ my @itemnumbers = $order_object->items->get_column('itemnumber');
+ my $biblio = Koha::Biblios->find( $line{biblionumber} );
+ $line{total_holds} = $biblio ? $biblio->holds->count : 0;
+ $line{item_holds} = $biblio ? $biblio->current_holds->search(
{
itemnumber => { -in => \@itemnumbers },
}
- )->count;
+ )->count : 0;
$line{budget} = GetBudgetByOrderNumber( $line{ordernumber} );
$line{tax_value} = $line{tax_value_on_receiving};
$line{tax_rate} = $line{tax_rate_on_receiving};
$foot{$line{tax_rate}}{tax_rate} = $line{tax_rate};
$foot{$line{tax_rate}}{tax_value} += $line{tax_value};
- $total_tax_excluded += $line{unitprice_tax_excluded} * $line{quantity};
- $total_tax_included += $line{unitprice_tax_included} * $line{quantity};
+ $total_tax_excluded += get_rounded_price($line{unitprice_tax_excluded}) * $line{quantity};
+ $total_tax_included += get_rounded_price($line{unitprice_tax_included}) * $line{quantity};
my $suggestion = GetSuggestionInfoFromBiblionumber($line{biblionumber});
$line{suggestionid} = $suggestion->{suggestionid};
my $budget_name = GetBudgetName( $line{budget_id} );
$line{budget_name} = $budget_name;
- $subtotal_for_funds->{ $line{budget_name} }{ecost} += $order->{ecost} * $order->{quantity};
+ $subtotal_for_funds->{ $line{budget_name} }{ecost} += get_rounded_price($order->{ecost}) * $order->{quantity};
$subtotal_for_funds->{ $line{budget_name} }{unitprice} += $order->{total};
push @loop_received, \%line;
} else {
$order->{ecost} = $order->{ecost_tax_excluded};
}
- $order->{total} = $order->{ecost} * $order->{quantity};
+ $order->{total} = get_rounded_price($order->{ecost}) * $order->{quantity};
my %line = %$order;
my $biblionumber = $line{'biblionumber'};
my $biblio = Koha::Biblios->find( $biblionumber );
+ if ( ! $biblio ) {
+ use Data::Dump qw(dump);
+ warn "FATAL ERROR: biblionumber $biblionumber not found in line: ",dump( \%line );
+ }
my $countbiblio = CountBiblioInOrders($biblionumber);
my $ordernumber = $line{'ordernumber'};
- my @subscriptions = GetSubscriptionsId ($biblionumber);
- my $itemcount = $biblio->items->count;
- my $holds_count = $biblio->holds->count;
- my @items = GetItemnumbersFromOrder( $ordernumber );
- my $itemholds;
- foreach my $item (@items){
- my $nb = GetItemHolds($biblionumber, $item);
- if ($nb){
- $itemholds += $nb;
- }
- }
+ my $order_object = Koha::Acquisition::Orders->find($ordernumber);
+ my $cnt_subscriptions = $biblio ? $biblio->subscriptions->count: 0;
+ my $itemcount = $biblio ? $biblio->items->count : 0;
+ my $holds_count = $biblio ? $biblio->holds->count : 0;
+ my @itemnumbers = $order_object->items->get_column('itemnumber');
+ my $itemholds = $biblio ? $biblio->holds->search({ itemnumber => { -in => \@itemnumbers } })->count : 0;
my $suggestion = GetSuggestionInfoFromBiblionumber($line{biblionumber});
$line{suggestionid} = $suggestion->{suggestionid};
$line{firstnamesuggestedby} = $suggestion->{firstnamesuggestedby};
# if the biblio is not in other orders and if there is no items elsewhere and no subscriptions and no holds we can then show the link "Delete order and Biblio" see bug 5680
- $line{can_del_bib} = 1 if $countbiblio <= 1 && $itemcount == scalar @items && !(@subscriptions) && !($holds_count);
- $line{items} = ($itemcount) - (scalar @items);
+ $line{can_del_bib} = 1 if $countbiblio <= 1 && $itemcount == scalar @itemnumbers && !($cnt_subscriptions) && !($holds_count);
+ $line{items} = ($itemcount) - (scalar @itemnumbers);
$line{left_item} = 1 if $line{items} >= 1;
$line{left_biblio} = 1 if $countbiblio > 1;
$line{biblios} = $countbiblio - 1;
- $line{left_subscription} = 1 if scalar @subscriptions >= 1;
- $line{subscriptions} = scalar @subscriptions;
+ $line{left_subscription} = 1 if $cnt_subscriptions;
+ $line{subscriptions} = $cnt_subscriptions;
$line{left_holds} = ($holds_count >= 1) ? 1 : 0;
$line{left_holds_on_order} = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
$line{holds} = $holds_count;
$line{holds_on_order} = $itemholds?$itemholds:$holds_count if $line{left_holds_on_order};
+ $line{basket} = Koha::Acquisition::Baskets->find( $line{basketno} );
my $budget_name = GetBudgetName( $line{budget_id} );
$line{budget_name} = $budget_name;