use Modern::Perl;
-
+use Koha::Account::Lines;
use Koha::Database;
use Koha::Patrons;
use Koha::Biblios;
) 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;
$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;
}
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
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