my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare(
q{
- DELETE FROM accountlines
- WHERE date < date_sub(curdate(), INTERVAL ? DAY)
- AND ( amountoutstanding = 0 or amountoutstanding IS NULL );
+ DELETE a1 FROM accountlines a1
+
+ LEFT JOIN account_offsets credit_offset ON ( a1.accountlines_id = credit_offset.credit_id )
+ LEFT JOIN accountlines a2 ON ( credit_offset.debit_id = a2.accountlines_id )
+
+ LEFT JOIN account_offsets debit_offset ON ( a1.accountlines_id = debit_offset.debit_id )
+ LEFT JOIN accountlines a3 ON ( debit_offset.credit_id = a3.accountlines_id )
+
+ WHERE a1.date < date_sub(curdate(), INTERVAL ? DAY)
+ AND ( a1.amountoutstanding = 0 OR a1.amountoutstanding IS NULL )
+ AND ( a2.amountoutstanding = 0 OR a2.amountoutstanding IS NULL )
+ AND ( a3.amountoutstanding = 0 OR a3.amountoutstanding IS NULL )
}
);
$sth->execute($days) or die $dbh->errstr;
use Modern::Perl;
-use Test::More tests => 24;
+use Test::More tests => 30;
use Test::MockModule;
use Test::Warn;
}
$dbh->do(q|DELETE FROM accountlines|);
+my $debit = Koha::Account::Line->new({ borrowernumber => $borrower->id, date => '1900-01-01', amountoutstanding => 0 })->store();
+my $credit = Koha::Account::Line->new({ borrowernumber => $borrower->id, date => '1900-01-01', amountoutstanding => -5 })->store();
+my $offset = Koha::Account::Offset->new({ credit_id => $credit->id, debit_id => $debit->id, type => 'Payment' })->store();
+purge_zero_balance_fees( 1 );
+my $debit_2 = Koha::Account::Lines->find( $debit->id );
+my $credit_2 = Koha::Account::Lines->find( $credit->id );
+ok( $debit_2, 'Debit was correctly not deleted when credit has balance' );
+ok( $credit_2, 'Credit was correctly not deleted when credit has balance' );
+
+$dbh->do(q|DELETE FROM accountlines|);
+$debit = Koha::Account::Line->new({ borrowernumber => $borrower->id, date => '1900-01-01', amountoutstanding => 5 })->store();
+$credit = Koha::Account::Line->new({ borrowernumber => $borrower->id, date => '1900-01-01', amountoutstanding => 0 })->store();
+$offset = Koha::Account::Offset->new({ credit_id => $credit->id, debit_id => $debit->id, type => 'Payment' })->store();
+purge_zero_balance_fees( 1 );
+$debit_2 = $credit_2 = undef;
+$debit_2 = Koha::Account::Lines->find( $debit->id );
+$credit_2 = Koha::Account::Lines->find( $credit->id );
+ok( $debit_2, 'Debit was correctly not deleted when debit has balance' );
+ok( $credit_2, 'Credit was correctly not deleted when debit has balance' );
+
+$dbh->do(q|DELETE FROM accountlines|);
+$debit = Koha::Account::Line->new({ borrowernumber => $borrower->id, date => '1900-01-01', amountoutstanding => 0 })->store();
+$credit = Koha::Account::Line->new({ borrowernumber => $borrower->id, date => '1900-01-01', amountoutstanding => 0 })->store();
+$offset = Koha::Account::Offset->new({ credit_id => $credit->id, debit_id => $debit->id, type => 'Payment' })->store();
+purge_zero_balance_fees( 1 );
+$debit_2 = Koha::Account::Lines->find( $debit->id );
+$credit_2 = Koha::Account::Lines->find( $credit->id );
+ok( !$debit_2, 'Debit was correctly deleted' );
+ok( !$credit_2, 'Credit was correctly deleted' );
+
+$dbh->do(q|DELETE FROM accountlines|);
subtest "Koha::Account::pay tests" => sub {