Bug 32030: Link eHolding with packages
[koha-ffzg.git] / Koha / ArticleRequest.pm
index 2d7f559..83c88be 100644 (file)
@@ -19,7 +19,7 @@ package Koha::ArticleRequest;
 
 use Modern::Perl;
 
-
+use Koha::Account::Lines;
 use Koha::Database;
 use Koha::Patrons;
 use Koha::Biblios;
@@ -57,6 +57,12 @@ sub request {
     ) unless $self->borrower->can_request_article;
 
     $self->status(Koha::ArticleRequest::Status::Requested);
+
+    # Handle possible fees
+    my $debit = $self->borrower->add_article_request_fee_if_needed({ item_id => $self->itemnumber });
+    $self->debit_id( $debit->id )
+        if $debit;
+
     $self->store();
     $self->notify();
     return $self;
@@ -132,6 +138,34 @@ sub cancel {
     $self->notes($notes) if $notes;
     $self->store();
     $self->notify();
+
+    my $debit = $self->debit;
+
+    if ( $debit ) {
+        # fees found, refund
+        my $account = $self->borrower->account;
+
+        my $total_reversible = $debit->debit_offsets->filter_by_reversible->total;
+        if ( $total_reversible ) {
+
+            $account->add_credit(
+                {
+                    amount       => abs $total_reversible,
+                    interface    => C4::Context->interface,
+                    type         => 'REFUND',
+                }
+            );
+        }
+
+        if ( $debit->amountoutstanding ) {
+            $debit->reduce({
+                reduction_type => 'REFUND',
+                amount         => $debit->amountoutstanding,
+                interface      => C4::Context->interface,
+            })->discard_changes;
+        }
+    }
+
     return $self;
 }
 
@@ -149,6 +183,23 @@ sub biblio {
     return $self->{_biblio};
 }
 
+=head3 debit
+
+    my $debit = $article_request->debit;
+
+Returns the related Koha::Account::Line object for this article request
+
+=cut
+
+sub debit {
+    my ($self) = @_;
+
+    my $debit_rs = $self->_result->debit;
+    return unless $debit_rs;
+
+    return Koha::Account::Line->_new_from_dbic( $debit_rs );
+}
+
 =head3 item
 
 Returns the Koha::Item object for this article request
@@ -200,12 +251,12 @@ will have notifications sent.
 
 sub store {
     my ($self) = @_;
-    if ( $self->in_storage ) {
-        return $self->SUPER::store;
-    } else {
+
+    if ( !$self->in_storage ) {
         $self->created_on( dt_from_string() );
-        return $self->SUPER::store;
     }
+
+    return $self->SUPER::store;
 }
 
 =head2 Internal methods