my $SQL = <<" SQL";
SELECT lt.usr,
MAX(bl.billing_ts) AS last_pertinent_billing,
- SUM(bl.amount) - SUM(COALESCE(pm.amount,0)) AS threshold_amount
+ SUM(bl.amount) - SUM((SELECT SUM(amount) FROM money.payment WHERE xact = lt.id)) AS threshold_amount
FROM ( SELECT id,usr,billing_location AS location FROM money.grocery
UNION ALL
SELECT id,usr,circ_lib AS location FROM action.circulation ) AS lt
JOIN $descendants d ON (lt.location = d.id)
- JOIN money.billing bl ON (lt.id = bl.xact)
- LEFT JOIN money.payment pm ON (lt.id = pm.xact)
+ JOIN money.billing bl ON (lt.id = bl.xact AND bl.voided IS FALSE)
LEFT JOIN money.collections_tracker cl USING (usr,location)
WHERE AGE(bl.billing_ts) > ?
AND cl.usr IS NULL
- GROUP BY lt.usr HAVING (SUM(bl.amount) - SUM(COALESCE(pm.amount,0))) > ?
+ GROUP BY lt.usr HAVING (SUM(bl.amount) - SUM((SELECT SUM(amount) FROM money.payment WHERE xact = lt.id))) > ?
SQL
my @l_ids;