From e3f4f042861e837feda3a11bd6e84340e83a13b6 Mon Sep 17 00:00:00 2001 From: Barton Chittenden Date: Wed, 2 Sep 2015 12:26:57 -0700 Subject: [PATCH] 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. http://bugs.koha-community.org/show_bug.cgi?id=14402 --- 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 1ad9643..d93b727 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 9496c57..d63fe86 100755 --- a/misc/cronjobs/cleanup_database.pl +++ b/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. diff --git a/t/db_dependent/Accounts.t b/t/db_dependent/Accounts.t index c8f5111..e93e67d 100644 --- a/t/db_dependent/Accounts.t +++ b/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 ) { -- 1.7.10.4