From 41ffdeb7319c0127ef146d294c8517b420c5701e Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 10 Aug 2020 16:39:08 +0200 Subject: [PATCH] Bug 18501: Prepare the ground This code was duplicated and we are going to need it. Signed-off-by: Martin Renvoize Signed-off-by: Jonathan Druart --- C4/Circulation.pm | 57 +++++++---------------------------------------- Koha/Item.pm | 37 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 49 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 7951fbe471..31f9e91ba4 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1510,30 +1510,7 @@ sub AddIssue { ## If item was lost, it has now been found, reverse any list item charges if necessary. if ( $item_object->itemlost ) { - my $refund = 1; - my $no_refund_after_days = C4::Context->preference('NoRefundOnLostReturnedItemsAge'); - if ($no_refund_after_days) { - my $today = dt_from_string(); - my $lost_age_in_days = - dt_from_string( $item_object->itemlost_on ) - ->delta_days($today) - ->in_units('days'); - - $refund = 0 unless ( $lost_age_in_days < $no_refund_after_days ); - } - - if ( - $refund && Koha::CirculationRules->get_lostreturn_policy( - { - return_branch => C4::Context->userenv->{branch}, - item => $item_object - } - ) - ) - { - _FixAccountForLostAndFound( $item_object->itemnumber, undef, - $item_object->barcode ); - } + $item_object->set_found; } $item_object->issues( ( $item_object->issues || 0 ) + 1); @@ -2068,32 +2045,14 @@ sub AddReturn { if ( $item->itemlost ) { $messages->{'WasLost'} = 1; unless ( C4::Context->preference("BlockReturnOfLostItems") ) { - my $refund = 1; - my $no_refund_after_days = C4::Context->preference('NoRefundOnLostReturnedItemsAge'); - if ($no_refund_after_days) { - my $today = dt_from_string(); - my $lost_age_in_days = - dt_from_string( $item->itemlost_on ) - ->delta_days($today) - ->in_units('days'); - - $refund = 0 unless ( $lost_age_in_days < $no_refund_after_days ); - } + my $refunded = $item->set_found( + { + holdingbranch => $item_holding_branch, + borrowernumber => $borrowernumber + } + ); - if ( - $refund && - Koha::CirculationRules->get_lostreturn_policy( - { - return_branch => C4::Context->userenv->{branch}, - item => $item, - } - ) - ) - { - _FixAccountForLostAndFound( $item->itemnumber, - $borrowernumber, $barcode ); - $messages->{'LostItemFeeRefunded'} = 1; - } + $messages->{'LostItemFeeRefunded'} = $refunded; } } diff --git a/Koha/Item.pm b/Koha/Item.pm index 8602b9a308..fbc0983fee 100644 --- a/Koha/Item.pm +++ b/Koha/Item.pm @@ -763,6 +763,43 @@ sub renewal_branchcode { return $branchcode; } +sub set_found { + my ($self, $params) = @_; + + my $holdingbranch = $params->{holdingbranch} || $self->holdingbranch; + my $borrowernumber = $params->{borrowernumber} || undef; + + ## If item was lost, it has now been found, reverse any list item charges if necessary. + my $refund = 1; + my $no_refund_after_days = + C4::Context->preference('NoRefundOnLostReturnedItemsAge'); + if ($no_refund_after_days) { + my $today = dt_from_string(); + my $lost_age_in_days = + dt_from_string( $self->itemlost_on )->delta_days($today) + ->in_units('days'); + + $refund = 0 unless ( $lost_age_in_days < $no_refund_after_days ); + } + + my $refunded; + if ( + $refund + && Koha::CirculationRules->get_lostreturn_policy( + { + current_branch => C4::Context->userenv->{branch}, + item => $self, + } + ) + ) + { + _FixAccountForLostAndFound( $self->itemnumber, borrowernumber, $self->barcode ); + $refunded = 1; + } + + return $refunded; +} + =head3 to_api_mapping This method returns the mapping for representing a Koha::Item object -- 2.20.1