@@ -, +, @@ balance. --- C4/Accounts.pm | 9 +++++++-- misc/cronjobs/cleanup_database.pl | 5 ++++- t/db_dependent/Accounts.t | 23 ++++++++++++----------- 3 files changed, 23 insertions(+), 14 deletions(-) --- a/C4/Accounts.pm +++ a/C4/Accounts.pm @@ -829,10 +829,15 @@ sub WriteOffFee { purge_zero_balance_fees( $days ); -Delete accountlines entries where amountoutstanding is 0 which are more than a given number of days old. +Delete accountlines entries where amountoutstanding is 0 or NULL which are more than a given number of days old. B<$days> -- Zero balance fees older than B<$days> days old will be deleted. +B Because fines and payments are not linked in accountlines, it is +possible for a fine to be deleted without the accompanying payment, +or vise versa. This won't affect the account balance, but might be +confusing to staff. + =cut sub purge_zero_balance_fees { @@ -844,7 +849,7 @@ sub purge_zero_balance_fees { q{ DELETE FROM accountlines WHERE date < date_sub(curdate(), INTERVAL ? DAY) - AND amountoutstanding = 0; + AND ( amountoutstanding = 0 or amountoutstanding IS NULL ); } ); $sth->execute($days) or die $dbh->errstr; --- a/misc/cronjobs/cleanup_database.pl +++ a/misc/cronjobs/cleanup_database.pl @@ -62,7 +62,10 @@ Usage: $0 [-h|--help] [--sessions] [--sessdays DAYS] [-v|--verbose] [--zebraqueu --z3950 purge records from import tables that are the result of Z39.50 searches --fees DAYS purge entries accountlines older than DAYS days, where - amountoutstanding is 0. + amountoutstanding is 0 or NULL. + WARNING: Fees and payments may not be deleted together. + This will not affect the account balance but may be + confusing to staff. --logs DAYS purge entries from action_logs older than DAYS days. Defaults to 180 days if no days specified. --searchhistory DAYS purge entries from search_history older than DAYS days. --- a/t/db_dependent/Accounts.t +++ a/t/db_dependent/Accounts.t @@ -19,7 +19,7 @@ use strict; use warnings; -use Test::More tests => 25; +use Test::More tests => 26; use Test::Warn; BEGIN { @@ -192,16 +192,17 @@ $sth = $dbh->prepare( my $days = 5; my @test_data = ( - { amount => 0 , days_ago => 0 , description =>'purge_zero_balance_fees should not delete 0 balance fees with date today' , delete => 0 } , - { amount => 0 , days_ago => $days - 1 , description =>'purge_zero_balance_fees should not delete 0 balance fees with date before threshold day' , delete => 0 } , - { amount => 0 , days_ago => $days , description =>'purge_zero_balance_fees should not delete 0 balance fees with date on threshold day' , delete => 0 } , - { amount => 0 , days_ago => $days + 1 , description =>'purge_zero_balance_fees should delete 0 balance fees with date after threshold day' , delete => 1 } , - { amount => 5 , days_ago => $days - 1 , description =>'purge_zero_balance_fees should not delete fees with postive amout owed before threshold day' , delete => 0 } , - { amount => 5 , days_ago => $days , description =>'purge_zero_balance_fees should not delete fees with postive amout owed on threshold day' , delete => 0 } , - { amount => 5 , days_ago => $days + 1 , description =>'purge_zero_balance_fees should not delete fees with postive amout owed after threshold day' , delete => 0 } , - { amount => -5 , days_ago => $days - 1 , description =>'purge_zero_balance_fees should not delete fees with negative amout owed before threshold day' , delete => 0 } , - { amount => -5 , days_ago => $days , description =>'purge_zero_balance_fees should not delete fees with negative amout owed on threshold day' , delete => 0 } , - { amount => -5 , days_ago => $days + 1 , description =>'purge_zero_balance_fees should not delete fees with negative amout owed after threshold day' , delete => 0 } + { amount => 0 , days_ago => 0 , description =>'purge_zero_balance_fees should not delete 0 balance fees with date today' , delete => 0 } , + { amount => 0 , days_ago => $days - 1 , description =>'purge_zero_balance_fees should not delete 0 balance fees with date before threshold day' , delete => 0 } , + { amount => 0 , days_ago => $days , description =>'purge_zero_balance_fees should not delete 0 balance fees with date on threshold day' , delete => 0 } , + { amount => 0 , days_ago => $days + 1 , description =>'purge_zero_balance_fees should delete 0 balance fees with date after threshold day' , delete => 1 } , + { amount => undef , days_ago => $days + 1 , description =>'purge_zero_balance_fees should delete NULL balance fees with date after threshold day' , delete => 1 } , + { amount => 5 , days_ago => $days - 1 , description =>'purge_zero_balance_fees should not delete fees with postive amout owed before threshold day' , delete => 0 } , + { amount => 5 , days_ago => $days , description =>'purge_zero_balance_fees should not delete fees with postive amout owed on threshold day' , delete => 0 } , + { amount => 5 , days_ago => $days + 1 , description =>'purge_zero_balance_fees should not delete fees with postive amout owed after threshold day' , delete => 0 } , + { amount => -5 , days_ago => $days - 1 , description =>'purge_zero_balance_fees should not delete fees with negative amout owed before threshold day' , delete => 0 } , + { amount => -5 , days_ago => $days , description =>'purge_zero_balance_fees should not delete fees with negative amout owed on threshold day' , delete => 0 } , + { amount => -5 , days_ago => $days + 1 , description =>'purge_zero_balance_fees should not delete fees with negative amout owed after threshold day' , delete => 0 } ); for my $data ( @test_data ) { --