@@ -, +, @@ receving --- C4/Acquisition.pm | 20 ++++++++++++++++++++ t/db_dependent/Acquisition/CancelReceipt.t | 6 +++++- 2 files changed, 25 insertions(+), 1 deletion(-) --- a/C4/Acquisition.pm +++ a/C4/Acquisition.pm @@ -1665,6 +1665,26 @@ sub CancelReceipt { } + if(C4::Context->preference('AcqCreateItem') eq 'ordering') { + my @affects = split q{\|}, C4::Context->preference("AcqItemSetSubfieldsWhenReceiptIsCancelled"); + if ( @affects ) { + my @itemnumbers = GetItemnumbersFromOrder( $parent_ordernumber ); + for my $in ( @itemnumbers ) { + my $biblionumber = C4::Biblio::GetBiblionumberFromItemnumber( $in ); + my $frameworkcode = GetFrameworkCode($biblionumber); + my ( $itemfield ) = GetMarcFromKohaField( 'items.itemnumber', $frameworkcode ); + my $item = C4::Items::GetMarcItem( $biblionumber, $in ); + for my $affect ( @affects ) { + my ( $sf, $v ) = split q{=}, $affect, 2; + foreach ( $item->field($itemfield) ) { + $_->update( $sf => $v ); + } + } + C4::Items::ModItemFromMarc( $item, $biblionumber, $in ); + } + } + } + return $parent_ordernumber; } --- a/t/db_dependent/Acquisition/CancelReceipt.t +++ a/t/db_dependent/Acquisition/CancelReceipt.t @@ -2,7 +2,7 @@ use Modern::Perl; -use Test::More tests => 2; +use Test::More tests => 3; use C4::Context; use C4::Acquisition; use C4::Biblio; @@ -70,6 +70,7 @@ my $order = GetOrder( $ordernumber ); is(scalar GetItemnumbersFromOrder($order->{ordernumber}), 0, "Create items on receiving: 0 item exist after cancelling a receipt"); t::lib::Mocks::mock_preference('AcqCreateItem', 'ordering'); +t::lib::Mocks::mock_preference('AcqItemSetSubfieldsWhenReceiptIsCancelled', '7=9'); # notforloan is mapped with 952$7 ( undef, $ordernumber ) = C4::Acquisition::NewOrder( { basketno => $basketno1, @@ -95,4 +96,7 @@ CancelReceipt($ordernumber); $order = GetOrder( $ordernumber ); is(scalar GetItemnumbersFromOrder($order->{ordernumber}), 1, "Create items on ordering: items are not deleted after cancelling a receipt"); +my $item = C4::Items::GetItem( $itemnumber ); +is( $item->{notforloan}, 9, "The notforloan value has been updated with '9'" ); + $dbh->rollback; --