&DelInvoice
&MergeInvoices
- &GetItemnumbersFromOrder
-
&AddClaim
&GetBiblioCountByBasketno
}
-# Returns the itemnumber(s) associated with the ordernumber given in parameter
-sub GetItemnumbersFromOrder {
- my ($ordernumber) = @_;
- my $dbh = C4::Context->dbh;
- my $query = "SELECT itemnumber FROM aqorders_items WHERE ordernumber=?";
- my $sth = $dbh->prepare($query);
- $sth->execute($ordernumber);
- my @tab;
-
- while (my $order = $sth->fetchrow_hashref) {
- push @tab, $order->{'itemnumber'};
- }
-
- return @tab;
-
-}
-
-
-
-
-
-
=head1 NAME
C4::Acquisition - Koha functions for dealing with orders and acquisitions
my $parent_ordernumber = $order->{'parent_ordernumber'};
- my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
my $order_obj = Koha::Acquisition::Orders->find( $ordernumber ); # FIXME rewrite all this subroutine using this object
+ my @itemnumbers = $order_obj->items->get_column('itemnumber');
if($parent_ordernumber == $ordernumber || not $parent_ordernumber) {
# The order line has no parent, just mark it as not received
my @affects = split q{\|}, C4::Context->preference("AcqItemSetSubfieldsWhenReceiptIsCancelled");
if ( @affects ) {
for my $in ( @itemnumbers ) {
- my $item = Koha::Items->find( $in );
+ my $item = Koha::Items->find( $in ); # FIXME We do not need that, we already have Koha::Items from $order_obj->items
my $biblio = $item->biblio;
my ( $itemfield ) = GetMarcFromKohaField( 'items.itemnumber', $biblio->frameworkcode );
my $item_marc = C4::Items::GetMarcItem( $biblio->biblionumber, $in );
my ( $order, $parent_ordernumber ) = @_;
$parent_ordernumber ||= $order->ordernumber;
- my @itemnumbers = GetItemnumbersFromOrder($order->ordernumber); # FIXME Must be $order->items
+ my $items = $order->items;
if ( $order->basket->effective_create_items eq 'receiving' ) {
# Remove items that were created at receipt
my $query = qq{
};
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare($query);
- foreach my $itemnumber (@itemnumbers) {
- $sth->execute($itemnumber, $itemnumber);
+ while ( my $item = $items->next ) {
+ $sth->execute($item->itemnumber, $item->itemnumber);
}
} else {
# Update items
- foreach my $itemnumber (@itemnumbers) {
- ModItemOrder($itemnumber, $parent_ordernumber);
+ while ( my $item = $items->next ) {
+ ModItemOrder($item->itemnumber, $parent_ordernumber);
}
}
}
}
$sth->finish;
- my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
- foreach my $itemnumber (@itemnumbers){
- my $delcheck = C4::Items::DelItemCheck( $bibnum, $itemnumber );
+ my $order = Koha::Acquisition::Orders->find($ordernumber);
+ my $items = $order->items;
+ while ( my $item = $items->next ) { # Should be moved to Koha::Acquisition::Order->delete
+ my $delcheck = C4::Items::DelItemCheck( $bibnum, $item->itemnumber );
if($delcheck != 1) {
$error->{'delitem'} = 1;
use C4::Suggestions;
use Koha::Biblios;
use Koha::Acquisition::Booksellers;
+use Koha::Acquisition::Orders;
use Koha::Libraries;
use C4::Letters qw/SendAlerts/;
use Date::Calc qw/Add_Delta_Days/;
my $cnt_subscriptions = $biblio->subscriptions->count;
my $itemcount = $biblio->items->count;
my $holds_count = $biblio->holds->count;
- my @items = GetItemnumbersFromOrder( $ordernumber );
- my $itemholds = $biblio->holds->search({ itemnumber => { -in => \@items } })->count;
+ my $order = Koha::Acquisition::Orders->find($ordernumber); # FIXME We should certainly do that at the beginning of this sub
+ my $items = $order->items;
+ my $itemholds = $biblio->holds->search({ itemnumber => { -in => [ $items->get_column('itemnumber') ] } })->count;
# 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 && !($cnt_subscriptions) && !($holds_count);
- $line{items} = ($itemcount) - (scalar @items);
+ $line{can_del_bib} = 1 if $countbiblio <= 1 && $itemcount == $items->count && !($cnt_subscriptions) && !($holds_count);
+ $line{items} = $itemcount - $items->count;
$line{left_item} = 1 if $line{items} >= 1;
$line{left_biblio} = 1 if $countbiblio > 1;
$line{biblios} = $countbiblio - 1;
}
}
-ModItem(
- {
- booksellerid => $booksellerid,
- dateaccessioned => $datereceived,
- datelastseen => $datereceived,
- price => $unitprice,
- replacementprice => $replacementprice,
- replacementpricedate => $datereceived,
- },
- $biblionumber,
- $_
-) foreach GetItemnumbersFromOrder($new_ordernumber);
+my $new_order_object = Koha::Acquisition::Orders->find( $new_ordernumber ); # FIXME we should not need to refetch it
+my $items = $new_order_object->items;
+while ( my $item = $items->next ) {
+ ModItem(
+ {
+ booksellerid => $booksellerid,
+ dateaccessioned => $datereceived,
+ datelastseen => $datereceived,
+ price => $unitprice,
+ replacementprice => $replacementprice,
+ replacementpricedate => $datereceived,
+ },
+ $biblionumber,
+ $item->itemnumber,
+ );
+}
print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid&sticky_filters=1");
# prepare the form for receiving
my $order = $results->[0];
-my $basket = Koha::Acquisition::Orders->find( $ordernumber )->basket;
+my $order_object = Koha::Acquisition::Orders->find( $ordernumber );
+my $basket = $order_object->basket;
my $active_currency = Koha::Acquisition::Currencies->get_active;
# Check if ACQ framework exists
);
} elsif ($AcqCreateItem eq 'ordering') {
my $fw = ($acq_fw) ? 'ACQ' : '';
- my @itemnumbers = GetItemnumbersFromOrder($order->{ordernumber});
+ my @itemnumbers = $order_object->items->get_column('itemnumbers');
my @items;
foreach (@itemnumbers) {
- my $item = GetItem($_);
+ my $item = GetItem($_); # FIXME We do not need this call, we already have the Koha::Items
my $descriptions;
$descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.notforloan', authorised_value => $item->{notforloan} });
$item->{notforloan} = $descriptions->{lib} // '';
use Koha::Acquisition::Baskets;
use Koha::Acquisition::Bookseller;
+use Koha::Acquisition::Orders;
use Koha::Biblios;
use Koha::DateUtils;
use Koha::Biblios;
for my $order ( @orders ) {
$order->{'unitprice'} += 0;
+ my $order_object = Koha::Acquisition::Orders->find($order->{ordernumber});
if ( $bookseller->invoiceincgst ) {
$order->{ecost} = $order->{ecost_tax_included};
$order->{unitprice} = $order->{unitprice_tax_included};
my %line = %{ $order };
$line{invoice} = $invoice->{invoicenumber};
- my @itemnumbers = GetItemnumbersFromOrder( $order->{ordernumber} );
+ my @itemnumbers = $order_object->items->get_column('itemnumbers');
my $biblio = Koha::Biblios->find( $line{biblionumber} );
$line{total_holds} = $biblio ? $biblio->holds->count : 0;
$line{item_holds} = $biblio ? $biblio->current_holds->search(
my $biblio = Koha::Biblios->find( $biblionumber );
my $countbiblio = CountBiblioInOrders($biblionumber);
my $ordernumber = $line{'ordernumber'};
+ 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 @items = GetItemnumbersFromOrder( $ordernumber );
- my $itemholds = $biblio ? $biblio->holds->search({ itemnumber => { -in => \@items } })->count : 0;
+ my @itemnumbers = $order_object->items->get_column('itemnumbers');
+ 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 && !($cnt_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;
});
my $total_quantity = 0;
for my $order ( @$orders ) {
- my $basket = Koha::Acquisition::Orders->find( $order->{ordernumber} )->basket;
+ my $order = Koha::Acquisition::Orders->find( $order->{ordernumber} );
+ my $basket = $order->basket;
if ( $basket->effective_create_items eq 'ordering' ) {
- for my $itemnumber ( C4::Acquisition::GetItemnumbersFromOrder( $order->{ordernumber} ) ) {
- push @itemnumbers_on_order, $itemnumber;
- }
+ @itemnumbers_on_order = $order->items->get_column('itemnumber');
}
$total_quantity += $order->{quantity};
}
CancelReceipt($ordernumber);
-is(scalar GetItemnumbersFromOrder($ordernumber), 0, "Create items on receiving: 0 item exist after cancelling a receipt");
+is($order->items->count, 0, "Create items on receiving: 0 item exist after cancelling a receipt");
my $itemnumber1 = AddItem( { itype => $itemtype }, $biblionumber );
my $itemnumber2 = AddItem( { itype => $itemtype }, $biblionumber );
$order->add_item( $itemnumber2 );
is(
- scalar( GetItemnumbersFromOrder( $order->ordernumber ) ),
+ $order->items->count,
2,
"Create items on ordering: 2 items should be linked to the order before receiving"
);
}
);
-my $new_order = GetOrder( $new_ordernumber );
+my $new_order = Koha::Acquisition::Orders->find( $new_ordernumber );
-is( $new_order->{ordernumber}, $new_ordernumber,
+is( $new_order->ordernumber, $new_ordernumber,
"ModReceiveOrder should return a correct ordernumber" );
isnt( $new_ordernumber, $ordernumber,
"ModReceiveOrder should return a different ordernumber" );
-is( $new_order->{parent_ordernumber}, $ordernumber,
+is( $new_order->parent_ordernumber, $ordernumber,
"The new order created by ModReceiveOrder should be linked to the parent order"
);
is(
- scalar( GetItemnumbersFromOrder( $order->ordernumber ) ),
+ $order->items->count,
1,
"Create items on ordering: 1 item should still be linked to the original order after receiving"
);
is(
- scalar( GetItemnumbersFromOrder($new_ordernumber) ),
+ $new_order->items->count,
1,
"Create items on ordering: 1 item should be linked to new order after receiving"
);
CancelReceipt($new_ordernumber);
is(
- scalar( GetItemnumbersFromOrder($new_ordernumber) ),
+ $new_order->items->count,
0,
"Create items on ordering: no item should be linked to the cancelled order"
);
is(
- scalar( GetItemnumbersFromOrder( $order->ordernumber ) ),
+ $order->items->count,
2,
"Create items on ordering: items are not deleted after cancelling a receipt"
);
# Begin tests
is(scalar GetOrders($basketno1), 1, "1 order in basket1");
($order) = GetOrders($basketno1);
-is(scalar GetItemnumbersFromOrder($order->{ordernumber}), 1, "1 item in basket1's order");
+$order = Koha::Acquisition::Orders->find($order->{ordernumber});
+is($order->items->count, 1, "1 item in basket1's order");
is(scalar GetOrders($basketno2), 0, "0 order in basket2");
# Transfering order to basket2
is(scalar GetOrders($basketno2), 1, "1 order in basket2");
# Determine if the transfer marked things cancelled properly.
-is($order->{orderstatus},'new','Before the transfer, the order status should be new');
-($order) = GetOrders($basketno1, { 'cancelled' => 1 });
-is($order->{orderstatus},'cancelled','After the transfer, the order status should be set to cancelled');
+is($order->orderstatus,'new','Before the transfer, the order status should be new');
+$order = Koha::Acquisition::Orders->find($order->ordernumber);
+is($order->orderstatus,'cancelled','After the transfer, the order status should be set to cancelled');
($order) = GetOrders($basketno2);
-is(scalar GetItemnumbersFromOrder($order->{ordernumber}), 1, "1 item in basket2's order");
+$order = Koha::Acquisition::Orders->find($order->{ordernumber});
+is($order->items->count, 1, "1 item in basket2's order");
# Bug 11552
my $orders = SearchOrders({ ordernumber => $newordernumber });