From ee6029c841840f82ba1d8c3c181bba8d55c43bc4 Mon Sep 17 00:00:00 2001 From: Barton Chittenden Date: Thu, 10 Sep 2015 22:03:43 +0000 Subject: [PATCH] Bug 14402: Make purge_zero_balance_fees() delete fees with NULL balance. Also, add notes to perldocs and usage that payments and credits are not linked to fines and may be deleted independently of the associated fine. Signed-off-by: Nancy Keener Signed-off-by: Jonathan Druart Signed-off-by: Tomas Cohen Arazi --- C4/Accounts.pm | 9 +++++++-- misc/cronjobs/cleanup_database.pl | 5 ++++- t/db_dependent/Accounts.t | 23 ++++++++++++----------- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/C4/Accounts.pm b/C4/Accounts.pm index 4b67dceedd..4f5f8d445c 100644 --- a/C4/Accounts.pm +++ b/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; diff --git a/misc/cronjobs/cleanup_database.pl b/misc/cronjobs/cleanup_database.pl index ef013a1467..c01948630d 100755 --- a/misc/cronjobs/cleanup_database.pl +++ b/misc/cronjobs/cleanup_database.pl @@ -63,7 +63,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. diff --git a/t/db_dependent/Accounts.t b/t/db_dependent/Accounts.t index 653fe1a0b6..052cf2a047 100644 --- a/t/db_dependent/Accounts.t +++ b/t/db_dependent/Accounts.t @@ -18,7 +18,7 @@ use Modern::Perl; -use Test::More tests => 18; +use Test::More tests => 19; use Test::MockModule; use Test::Warn; @@ -94,16 +94,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 ) { -- 2.39.5