Bug 23384: Fix use statement order for ArticleRequest::Status
[srvgit] / Koha / Account.pm
index 04bbd08..81f7a34 100644 (file)
@@ -24,14 +24,16 @@ use Data::Dumper;
 use List::MoreUtils qw( uniq );
 use Try::Tiny;
 
-use C4::Circulation qw( ReturnLostItem );
+use C4::Circulation qw( ReturnLostItem CanBookBeRenewed AddRenewal );
 use C4::Letters;
 use C4::Log qw( logaction );
 use C4::Stats qw( UpdateStats );
+use C4::Overdues qw(GetFine);
 
 use Koha::Patrons;
 use Koha::Account::Lines;
 use Koha::Account::Offsets;
+use Koha::Account::DebitTypes;
 use Koha::DateUtils qw( dt_from_string );
 use Koha::Exceptions;
 use Koha::Exceptions::Account;
@@ -96,6 +98,10 @@ sub pay {
 
     my @fines_paid; # List of account lines paid on with this payment
 
+    # The outcome of any attempted item renewals as a result of fines being
+    # paid off
+    my $renew_outcomes = [];
+
     my $balance_remaining = $amount; # Set it now so we can adjust the amount if necessary
     $balance_remaining ||= 0;
 
@@ -113,6 +119,16 @@ sub pay {
         $fine->amountoutstanding($new_amountoutstanding)->store();
         $balance_remaining = $balance_remaining - $amount_to_pay;
 
+        # Attempt to renew the item associated with this debit if
+        # appropriate
+        if ($fine->renewable) {
+            # We're ignoring the definition of $interface above, by all
+            # accounts we can't rely on C4::Context::interface, so here
+            # we're only using what we've been explicitly passed
+            my $outcome = $fine->renew_item({ interface => $interface });
+            push @{$renew_outcomes}, $outcome if $outcome;
+        }
+
         # Same logic exists in Koha::Account::Line::apply
         if (   $new_amountoutstanding == 0
             && $fine->itemnumber
@@ -173,6 +189,14 @@ sub pay {
         $fine->amountoutstanding( $old_amountoutstanding - $amount_to_pay );
         $fine->store();
 
+        # If we need to make a note of the item associated with this line,
+        # in order that we can potentially renew it, do so.
+        my $amt = $old_amountoutstanding - $amount_to_pay;
+        if ($fine->renewable) {
+            my $outcome = $fine->renew_item;
+            push @{$renew_outcomes}, $outcome;
+        }
+
         if (   $fine->amountoutstanding == 0
             && $fine->itemnumber
             && $fine->debit_type_code
@@ -247,7 +271,7 @@ sub pay {
     UpdateStats(
         {
             branch         => $library_id,
-            type           => $type,
+            type           => lc($type),
             amount         => $amount,
             borrowernumber => $self->{patron_id},
         }
@@ -281,7 +305,7 @@ sub pay {
                 lang    => $patron->lang,
                 tables => {
                     borrowers       => $self->{patron_id},
-                    branches        => $self->{library_id},
+                    branches        => $library_id,
                 },
                 substitute => {
                     credit => $payment,
@@ -300,7 +324,7 @@ sub pay {
         }
     }
 
-    return $payment->id;
+    return { payment_id => $payment->id, renew_result => $renew_outcomes };
 }
 
 =head3 add_credit
@@ -325,7 +349,7 @@ $credit_type can be any of:
   - 'CREDIT'
   - 'PAYMENT'
   - 'FORGIVEN'
-  - 'LOST_RETURN'
+  - 'LOST_FOUND'
   - 'WRITEOFF'
 
 =cut
@@ -395,7 +419,7 @@ sub add_credit {
                 my $account_offset = Koha::Account::Offset->new(
                     {
                         credit_id => $line->id,
-                        type   => $Koha::Account::offset_type->{$credit_type},
+                        type   => $Koha::Account::offset_type->{$credit_type} // $Koha::Account::offset_type->{CREDIT},
                         amount => $amount
                     }
                 )->store();
@@ -403,7 +427,7 @@ sub add_credit {
                 UpdateStats(
                     {
                         branch         => $library_id,
-                        type           => $credit_type,
+                        type           => lc($credit_type),
                         amount         => $amount,
                         borrowernumber => $self->{patron_id},
                     }
@@ -740,7 +764,7 @@ sub reconcile_balance {
 our $offset_type = {
     'CREDIT'           => 'Manual Credit',
     'FORGIVEN'         => 'Writeoff',
-    'LOST_RETURN'      => 'Lost Item',
+    'LOST_FOUND'       => 'Lost Item Found',
     'PAYMENT'          => 'Payment',
     'WRITEOFF'         => 'Writeoff',
     'ACCOUNT'          => 'Account Fee',