=cut
+=head3 patron
+
+Return the patron linked to this account line
+
+=cut
+
+sub patron {
+ my ( $self ) = @_;
+ my $rs = $self->_result->borrowernumber;
+ return unless $rs;
+ return Koha::Patron->_new_from_dbic( $rs );
+}
+
=head3 item
Return the item linked to this account line if exists
=head3 void
-$payment_accountline->void();
+ $payment_accountline->void();
+
+Used to 'void' (or reverse) a payment/credit. It will roll back any offsets
+created by the application of this credit upon any debits and mark the credit
+as 'void' by updating it's status to "VOID".
=cut
$self->set(
{
- accounttype => 'VOID',
+ status => 'VOID',
amountoutstanding => 0,
amount => 0,
}
my $debits = $account->outstanding_debits;
my $outstanding_amount = $credit->apply( { debits => $debits, [ offset_type => $offset_type ] } );
-Applies the credit to a given debits set.
+Applies the credit to a given debits array reference.
=head4 arguments hashref
my $schema = Koha::Database->new->schema;
$schema->txn_do( sub {
- while ( my $debit = $debits->next ) {
+ for my $debit ( @{$debits} ) {
unless ( $debit->is_debit ) {
Koha::Exceptions::Account::IsNotDebit->throw(
$self->amountoutstanding( $available_credit * -1 )->store;
$debit->amountoutstanding( $owed - $amount_to_cancel )->store;
+
+ # Same logic exists in Koha::Account::pay
+ if ( $debit->amountoutstanding == 0
+ && $debit->itemnumber
+ && $debit->accounttype
+ && $debit->accounttype eq 'LOST' )
+ {
+ C4::Circulation::ReturnLostItem( $self->borrowernumber, $debit->itemnumber );
+ }
+
}
});
$account_line->adjust(
{
- amount => $amount,
- type => $update_type,
+ amount => $amount,
+ type => $update_type,
+ interface => $interface
}
);
$update_type can be any of:
- - fine_update
+ - overdue_update
Authors Note: The intention here is that this method is only used
to adjust accountlines where the final amount is not yet known/fixed.
my $amount = $params->{amount};
my $update_type = $params->{type};
+ my $interface = $params->{interface};
unless ( exists($Koha::Account::Line::allowed_update->{$update_type}) ) {
Koha::Exceptions::Account::UnrecognisedType->throw(
);
}
- my $account_type = $self->accounttype;
- unless ( $Koha::Account::Line::allowed_update->{$update_type} eq $account_type ) {
+ my $account_type = $self->accounttype;
+ my $account_status = $self->status;
+ unless (
+ (
+ exists(
+ $Koha::Account::Line::allowed_update->{$update_type}
+ ->{$account_type}
+ )
+ && ( $Koha::Account::Line::allowed_update->{$update_type}
+ ->{$account_type} eq $account_status )
+ )
+ )
+ {
Koha::Exceptions::Account::UnrecognisedType->throw(
- error => 'Update type not allowed on this accounttype'
- );
+ error => 'Update type not allowed on this accounttype' );
}
my $schema = Koha::Database->new->schema;
my $difference = $amount - $amount_before;
my $new_outstanding = $amount_outstanding_before + $difference;
- my $offset_type = substr( $update_type, 0, index( $update_type, '_' ) );
- $offset_type .= ( $difference > 0 ) ? "_increase" : "_decrease";
+ my $offset_type = $account_type;
+ $offset_type .= ( $difference > 0 ) ? "_INCREASE" : "_DECREASE";
# Catch cases that require patron refunds
if ( $new_outstanding < 0 ) {
amount => $new_outstanding * -1,
description => 'Overpayment refund',
type => 'credit',
- ( $update_type eq 'fine_update' ? ( item_id => $self->itemnumber ) : ()),
+ interface => $interface,
+ ( $update_type eq 'overdue_update' ? ( item_id => $self->itemnumber ) : ()),
}
);
$new_outstanding = 0;
date => \'NOW()',
amount => $amount,
amountoutstanding => $new_outstanding,
- ( $update_type eq 'fine_update' ? ( lastincrement => $difference ) : ()),
}
)->store();
Dumper(
{ action => $update_type,
borrowernumber => $self->borrowernumber,
- accountno => $self->accountno,
amount => $amount,
description => undef,
amountoutstanding => $new_outstanding,
manager_id => undef,
}
)
- ) if ( $update_type eq 'fine_update' );
+ ) if ( $update_type eq 'overdue_update' );
}
}
);
return !$self->is_credit;
}
+=head3 to_api_mapping
+
+This method returns the mapping for representing a Koha::Account::Line object
+on the API.
+
+=cut
+
+sub to_api_mapping {
+ return {
+ accountlines_id => 'account_line_id',
+ accounttype => 'account_type',
+ amountoutstanding => 'amount_outstanding',
+ borrowernumber => 'patron_id',
+ branchcode => 'library_id',
+ issue_id => 'checkout_id',
+ itemnumber => 'item_id',
+ manager_id => 'user_id',
+ note => 'internal_note',
+ };
+}
+
=head2 Internal methods
=cut
=cut
-our $allowed_update = { 'fine_update' => 'FU', };
+our $allowed_update = { 'overdue_update' => { 'OVERDUE' => 'UNRETURNED' } };
=head1 AUTHORS