Bug 18501: Prepare the ground
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 10 Aug 2020 14:39:08 +0000 (16:39 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 20 Aug 2020 10:31:59 +0000 (12:31 +0200)
This code was duplicated and we are going to need it.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

C4/Circulation.pm
Koha/Item.pm

index 7951fbe..31f9e91 100644 (file)
@@ -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;
         }
     }
 
index 8602b9a..fbc0983 100644 (file)
@@ -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