Bug 38477: Only charge a new lost fine when the last patron to return the item matches the original fined patron
Set these sysprefs: - FinesMode: Calculate and Charge - WhenLostForgiveFine: Forgive - WhenLostChargeReplacementFee: Charge In circ rules: - Have a rule that charges fines - Set Refund lost item replacement fee to "Refund lost item charge and charge new overdue fine" 1 - Have/create item with replacement price 2 - Check item out to patron 1, due date in past 3 - Run fines.pl 4 - confirm fines on patron 1 5 - mark item lost 6 - confirm replacement cost generated and fine forgiven on patron 1 7 - check item in 8 - confirm replacement cost forgiven and new fine generated on patron 1 9 - check item out to patron 2, due date in future 10 - check item in 11 - mark item lost (no replacement fee generated because item is not checked out) 12 - in database, update date_due for checkout to patron 2, set to a date in the past 13 - check item in 14 - confirm patron 2 now has a fine 15 - Apply patches, restart all 16 - Repeat test plan with another item and confirm no fine is added for patron 2 Note: At step 12 we're pushing the date_due of the old issue into the past to make date_due<curdate(). In production, this comes up when there are days between steps 10 and 13. Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk> Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
parent
732c7d11ce
commit
67c95addeb
|
|
@ -2400,19 +2400,24 @@ sub AddReturn {
|
|||
my $patron = $issue->patron;
|
||||
$patron_unblessed = $patron->unblessed;
|
||||
}
|
||||
_CalculateAndUpdateFine(
|
||||
{
|
||||
issue => $issue,
|
||||
item => $item->unblessed,
|
||||
borrower => $patron_unblessed,
|
||||
return_date => $return_date
|
||||
}
|
||||
);
|
||||
_FixOverduesOnReturn(
|
||||
$patron_unblessed->{borrowernumber},
|
||||
$item->itemnumber, undef, 'RETURNED'
|
||||
);
|
||||
$messages->{'LostItemFeeCharged'} = 1;
|
||||
|
||||
# Confirm the lost charge came from the most recent patron to return the item
|
||||
# and only charge the fine if so
|
||||
if ( $message->payload->{patron_id} == $patron_unblessed->{borrowernumber} ) {
|
||||
_CalculateAndUpdateFine(
|
||||
{
|
||||
issue => $issue,
|
||||
item => $item->unblessed,
|
||||
borrower => $patron_unblessed,
|
||||
return_date => $return_date
|
||||
}
|
||||
);
|
||||
_FixOverduesOnReturn(
|
||||
$patron_unblessed->{borrowernumber},
|
||||
$item->itemnumber, undef, 'RETURNED'
|
||||
);
|
||||
$messages->{'LostItemFeeCharged'} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1755,10 +1755,12 @@ sub _set_found_trigger {
|
|||
}
|
||||
|
||||
} elsif ( $lostreturn_policy eq 'charge' && ( $lost_overdue || $lost_charge ) ) {
|
||||
my $patron_id = $lost_overdue ? $lost_overdue->borrowernumber : $lost_charge->borrowernumber;
|
||||
$self->add_message(
|
||||
{
|
||||
type => 'info',
|
||||
message => 'lost_charge',
|
||||
payload => { patron_id => $patron_id }
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue