use C4::Debug;
use C4::Templates qw(gettemplate);
use Koha::DateUtils qw( dt_from_string output_pref );
-use Koha::Acquisition::Order;
use Koha::Acquisition::Booksellers;
+use Koha::Acquisition::Orders;
use Koha::Biblios;
use Koha::Items;
use Koha::Number::Price;
=head3 NewBasket
$basket = &NewBasket( $booksellerid, $authorizedby, $basketname,
- $basketnote, $basketbooksellernote, $basketcontractnumber, $deliveryplace, $billingplace, $is_standing );
+ $basketnote, $basketbooksellernote, $basketcontractnumber, $deliveryplace, $billingplace, $is_standing, $create_items );
Create a new basket in aqbasket table
sub NewBasket {
my ( $booksellerid, $authorisedby, $basketname, $basketnote,
$basketbooksellernote, $basketcontractnumber, $deliveryplace,
- $billingplace, $is_standing ) = @_;
+ $billingplace, $is_standing, $create_items ) = @_;
my $dbh = C4::Context->dbh;
my $query =
'INSERT INTO aqbasket (creationdate,booksellerid,authorisedby) '
$basketnote ||= q{};
$basketbooksellernote ||= q{};
ModBasketHeader( $basket, $basketname, $basketnote, $basketbooksellernote,
- $basketcontractnumber, $booksellerid, $deliveryplace, $billingplace, $is_standing );
+ $basketcontractnumber, $booksellerid, $deliveryplace, $billingplace, $is_standing, $create_items );
return $basket;
}
my $dbh = C4::Context->dbh;
$dbh->do('UPDATE aqbasket SET closedate=now() WHERE basketno=?', {}, $basketno );
- $dbh->do( q{UPDATE aqorders SET orderstatus = 'ordered' WHERE basketno = ? AND orderstatus != 'complete'},
- {}, $basketno);
+ $dbh->do(
+q{UPDATE aqorders SET orderstatus = 'ordered' WHERE basketno = ? AND orderstatus NOT IN ( 'complete', 'cancelled')},
+ {}, $basketno
+ );
return;
}
UPDATE aqorders
SET orderstatus = 'new'
WHERE basketno = ?
- AND orderstatus != 'complete'
+ AND orderstatus NOT IN ( 'complete', 'cancelled' )
}, {}, $basketno);
return;
}
}
for my $order (@orders) {
my @row;
- my $bd = GetBiblioData( $order->{'biblionumber'} );
- my @biblioitems = GetBiblioItemByBiblioNumber( $order->{'biblionumber'});
- for my $biblioitem (@biblioitems) {
- if ( $biblioitem->{isbn}
- and $order->{isbn}
- and $biblioitem->{isbn} eq $order->{isbn} )
- {
- $order = { %$order, %$biblioitem };
- }
- }
+ my $biblio = Koha::Biblios->find( $order->{biblionumber} );
+ my $biblioitem = $biblio->biblioitem;
+ $order = { %$order, %{ $biblioitem->unblessed } };
if ($contract) {
$order = {%$order, %$contract};
}
- $order = {%$order, %$basket, %$bd};
+ $order = {%$order, %$basket, %{ $biblio->unblessed }};
for my $field (@fields) {
push @row, $order->{$field};
}
}
else {
foreach my $order (@orders) {
- my $bd = GetBiblioData( $order->{'biblionumber'} );
+ my $biblio = Koha::Biblios->find( $order->{biblionumber} );
+ my $biblioitem = $biblio->biblioitem;
my $row = {
contractname => $contract->{'contractname'},
ordernumber => $order->{'ordernumber'},
entrydate => $order->{'entrydate'},
isbn => $order->{'isbn'},
- author => $bd->{'author'},
- title => $bd->{'title'},
- publicationyear => $bd->{'publicationyear'},
- publishercode => $bd->{'publishercode'},
- collectiontitle => $bd->{'collectiontitle'},
+ author => $biblio->author,
+ title => $biblio->title,
+ publicationyear => $biblioitem->publicationyear,
+ publishercode => $biblioitem->publishercode,
+ collectiontitle => $biblioitem->collectiontitle,
notes => $order->{'order_vendornote'},
quantity => $order->{'quantity'},
rrp => $order->{'rrp'},
my $basketgroup = GetBasketgroup( $$basket{basketgroupid} );
foreach my $order (@orders) {
- my $bd = GetBiblioData( $order->{'biblionumber'} );
+ my $biblio = Koha::Biblios->find( $order->{biblionumber} );
+ my $biblioitem = $biblio->biblioitem;
my $row = {
clientnumber => $bookseller->accountnumber,
basketname => $basket->{basketname},
ordernumber => $order->{ordernumber},
- author => $bd->{author},
- title => $bd->{title},
- publishercode => $bd->{publishercode},
- publicationyear => $bd->{publicationyear},
- collectiontitle => $bd->{collectiontitle},
+ author => $biblio->author,
+ title => $biblio->title,
+ publishercode => $biblioitem->publishercode,
+ publicationyear => $biblioitem->publicationyear,
+ collectiontitle => $biblioitem->collectiontitle,
isbn => $order->{isbn},
quantity => $order->{quantity},
rrp_tax_included => $order->{rrp_tax_included},
=item C<$is_standing> is the "is_standing" field in the aqbasket table.
+=item C<$create_items> should be set to 'ordering', 'receiving' or 'cataloguing' (or undef, in which
+case the AcqCreateItem syspref takes precedence).
+
=back
=cut
sub ModBasketHeader {
- my ($basketno, $basketname, $note, $booksellernote, $contractnumber, $booksellerid, $deliveryplace, $billingplace, $is_standing) = @_;
+ my ($basketno, $basketname, $note, $booksellernote, $contractnumber, $booksellerid, $deliveryplace, $billingplace, $is_standing, $create_items) = @_;
my $query = qq{
UPDATE aqbasket
- SET basketname=?, note=?, booksellernote=?, booksellerid=?, deliveryplace=?, billingplace=?, is_standing=?
+ SET basketname=?, note=?, booksellernote=?, booksellerid=?, deliveryplace=?, billingplace=?, is_standing=?, create_items=?
WHERE basketno=?
};
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare($query);
- $sth->execute($basketname, $note, $booksellernote, $booksellerid, $deliveryplace, $billingplace, $is_standing, $basketno);
+ $sth->execute($basketname, $note, $booksellernote, $booksellerid, $deliveryplace, $billingplace, $is_standing, $create_items || undef, $basketno);
if ( $contractnumber ) {
my $query2 ="UPDATE aqbasket SET contractnumber=? WHERE basketno=?";
$order->{datereceived} = $datereceived;
$order->{invoiceid} = $invoice->{invoiceid};
$order->{orderstatus} = 'complete';
- $new_ordernumber = Koha::Acquisition::Order->new($order)->insert->{ordernumber};
+ $new_ordernumber = Koha::Acquisition::Order->new($order)->store->ordernumber; # TODO What if the store fails?
if ($received_items) {
foreach my $itemnumber (@$received_items) {
my $parent_ordernumber = $order->{'parent_ordernumber'};
my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
+ my $basket = Koha::Acquisition::Order->find( $order->{ordernumber} )->basket;
if($parent_ordernumber == $ordernumber || not $parent_ordernumber) {
# The order line has no parent, just mark it as not received
WHERE ordernumber = ?
|, undef, $parent_ordernumber);
- _cancel_items_receipt( $ordernumber, $parent_ordernumber );
+ _cancel_items_receipt( $basket->effective_create_items, $ordernumber, $parent_ordernumber );
# Delete order line
$query = qq{
DELETE FROM aqorders
}
- if(C4::Context->preference('AcqCreateItem') eq 'ordering') {
+ if( $basket->effective_create_items eq 'ordering' ) {
my @affects = split q{\|}, C4::Context->preference("AcqItemSetSubfieldsWhenReceiptIsCancelled");
if ( @affects ) {
for my $in ( @itemnumbers ) {
}
sub _cancel_items_receipt {
- my ( $ordernumber, $parent_ordernumber ) = @_;
+ my ( $effective_create_items, $ordernumber, $parent_ordernumber ) = @_;
$parent_ordernumber ||= $ordernumber;
my @itemnumbers = GetItemnumbersFromOrder($ordernumber);
- if(C4::Context->preference('AcqCreateItem') eq 'receiving') {
+ if ( $effective_create_items eq 'receiving' ) {
# Remove items that were created at receipt
my $query = qq{
DELETE FROM items, aqorders_items
return unless ($ordernumber and $basketno);
- my $order = GetOrder( $ordernumber );
- return if $order->{datereceived};
+ my $order = Koha::Acquisition::Orders->find( $ordernumber ) or return;
+ return if $order->datereceived;
+
+ $order = $order->unblessed;
+
my $basket = GetBasket($basketno);
return unless $basket;
delete $order->{parent_ordernumber};
$order->{'basketno'} = $basketno;
- my $newordernumber = Koha::Acquisition::Order->new($order)->insert->{ordernumber};
+ my $newordernumber = Koha::Acquisition::Order->new($order)->store->ordernumber;
$query = q{
UPDATE aqorders_items