Bug 14402: Make purge_zero_balance_fees() delete fees with NULL balance.
authorBarton Chittenden <barton@bywatersolutions.com>
Thu, 10 Sep 2015 22:03:43 +0000 (22:03 +0000)
committerTomas Cohen Arazi <tomascohen@theke.io>
Mon, 9 Nov 2015 17:58:51 +0000 (14:58 -0300)
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 <nkeener@washoecounty.us>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
C4/Accounts.pm
misc/cronjobs/cleanup_database.pl
t/db_dependent/Accounts.t

index 4b67dce..4f5f8d4 100644 (file)
@@ -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<Warning:> 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;
index ef013a1..c019486 100755 (executable)
@@ -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.
index 653fe1a..052cf2a 100644 (file)
@@ -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 ) {