Lines 23-32
use Carp;
Link Here
|
23 |
use Data::Dumper; |
23 |
use Data::Dumper; |
24 |
use List::MoreUtils qw( uniq ); |
24 |
use List::MoreUtils qw( uniq ); |
25 |
|
25 |
|
26 |
use C4::Circulation qw( ReturnLostItem ); |
26 |
use C4::Circulation qw( ReturnLostItem CanBookBeRenewed AddRenewal ); |
27 |
use C4::Letters; |
27 |
use C4::Letters; |
28 |
use C4::Log qw( logaction ); |
28 |
use C4::Log qw( logaction ); |
29 |
use C4::Stats qw( UpdateStats ); |
29 |
use C4::Stats qw( UpdateStats ); |
|
|
30 |
use C4::Overdues qw(GetFine); |
30 |
|
31 |
|
31 |
use Koha::Patrons; |
32 |
use Koha::Patrons; |
32 |
use Koha::Account::Lines; |
33 |
use Koha::Account::Lines; |
Lines 90-95
sub pay {
Link Here
|
90 |
my $interface = $params ? ( $params->{interface} || C4::Context->interface ) : C4::Context->interface; |
91 |
my $interface = $params ? ( $params->{interface} || C4::Context->interface ) : C4::Context->interface; |
91 |
|
92 |
|
92 |
my @fines_paid; # List of account lines paid on with this payment |
93 |
my @fines_paid; # List of account lines paid on with this payment |
|
|
94 |
# Item numbers that have had a fine paid where the line has a accounttype |
95 |
# of OVERDUE and a status of UNRETURNED. We might want to try and renew |
96 |
# these items. |
97 |
my $overdue_unreturned = {}; |
93 |
|
98 |
|
94 |
my $balance_remaining = $amount; # Set it now so we can adjust the amount if necessary |
99 |
my $balance_remaining = $amount; # Set it now so we can adjust the amount if necessary |
95 |
$balance_remaining ||= 0; |
100 |
$balance_remaining ||= 0; |
Lines 108-113
sub pay {
Link Here
|
108 |
$fine->amountoutstanding($new_amountoutstanding)->store(); |
113 |
$fine->amountoutstanding($new_amountoutstanding)->store(); |
109 |
$balance_remaining = $balance_remaining - $amount_to_pay; |
114 |
$balance_remaining = $balance_remaining - $amount_to_pay; |
110 |
|
115 |
|
|
|
116 |
# If we need to make a note of the item associated with this line, |
117 |
# in order that we can potentially renew it, do so. |
118 |
if ( |
119 |
$new_amountoutstanding == 0 && |
120 |
$fine->accounttype && |
121 |
$fine->accounttype eq 'OVERDUE' && |
122 |
$fine->status && |
123 |
$fine->status eq 'UNRETURNED' |
124 |
) { |
125 |
$overdue_unreturned->{$fine->itemnumber} = $fine; |
126 |
} |
127 |
|
111 |
# Same logic exists in Koha::Account::Line::apply |
128 |
# Same logic exists in Koha::Account::Line::apply |
112 |
if ( $new_amountoutstanding == 0 && $fine->itemnumber && $fine->accounttype && ( $fine->accounttype eq 'L' ) ) |
129 |
if ( $new_amountoutstanding == 0 && $fine->itemnumber && $fine->accounttype && ( $fine->accounttype eq 'L' ) ) |
113 |
{ |
130 |
{ |
Lines 165-170
sub pay {
Link Here
|
165 |
$fine->amountoutstanding( $old_amountoutstanding - $amount_to_pay ); |
182 |
$fine->amountoutstanding( $old_amountoutstanding - $amount_to_pay ); |
166 |
$fine->store(); |
183 |
$fine->store(); |
167 |
|
184 |
|
|
|
185 |
# If we need to make a note of the item associated with this line, |
186 |
# in order that we can potentially renew it, do so. |
187 |
if ( |
188 |
$old_amountoutstanding - $amount_to_pay == 0 && |
189 |
$fine->accounttype && |
190 |
$fine->accounttype eq 'OVERDUE' && |
191 |
$fine->status && |
192 |
$fine->status eq 'UNRETURNED' |
193 |
) { |
194 |
$overdue_unreturned->{$fine->itemnumber} = $fine; |
195 |
} |
196 |
|
168 |
if ( $fine->amountoutstanding == 0 && $fine->itemnumber && $fine->accounttype && ( $fine->accounttype eq 'L' ) ) |
197 |
if ( $fine->amountoutstanding == 0 && $fine->itemnumber && $fine->accounttype && ( $fine->accounttype eq 'L' ) ) |
169 |
{ |
198 |
{ |
170 |
C4::Circulation::ReturnLostItem( $self->{patron_id}, $fine->itemnumber ); |
199 |
C4::Circulation::ReturnLostItem( $self->{patron_id}, $fine->itemnumber ); |
Lines 241-246
sub pay {
Link Here
|
241 |
} |
270 |
} |
242 |
); |
271 |
); |
243 |
|
272 |
|
|
|
273 |
# If we have overdue unreturned items that have had payments made |
274 |
# against them, check whether the balance on those items is now zero |
275 |
# and, if the syspref is set, renew them |
276 |
# Same logic exists in Koha::Account::Line::apply |
277 |
if ( |
278 |
C4::Context->preference('RenewAccruingItemWhenPaid') && |
279 |
keys %{$overdue_unreturned} |
280 |
) { |
281 |
foreach my $itemnumber (keys %{$overdue_unreturned}) { |
282 |
# Only do something if this item has no fines left on it |
283 |
my $fine = C4::Overdues::GetFine( $itemnumber, $self->{patron_id} ); |
284 |
next if $fine && $fine > 0; |
285 |
|
286 |
my ( $renew_ok, $error ) = |
287 |
C4::Circulation::CanBookBeRenewed( |
288 |
$self->{patron_id}, $itemnumber |
289 |
); |
290 |
if ( $renew_ok ) { |
291 |
C4::Circulation::AddRenewal( |
292 |
$self->{patron_id}, |
293 |
$itemnumber, |
294 |
$library_id, |
295 |
undef, |
296 |
undef, |
297 |
1 |
298 |
); |
299 |
} |
300 |
} |
301 |
} |
302 |
|
244 |
if ( C4::Context->preference("FinesLog") ) { |
303 |
if ( C4::Context->preference("FinesLog") ) { |
245 |
logaction( |
304 |
logaction( |
246 |
"FINES", 'CREATE', |
305 |
"FINES", 'CREATE', |