Ignore retired members in dynamic geographic location pages
[bpt/portal.git] / money.sml
index f4423ac..1b569c8 100644 (file)
--- a/money.sml
+++ b/money.sml
@@ -273,4 +273,25 @@ fun costBase amt =
        [share] => C.realFromSql share
       | row => Init.rowError ("Bad costBase result", row)
 
+val monthlyCost = 900.0
+val graceMonths = 1
+
+fun delinquentPledgers () =
+    let
+       val costBase = costBase monthlyCost
+
+       fun makeRow [id, name, shares, amount] = {id = C.intFromSql id, name = C.stringFromSql name,
+                                                 shares = C.intFromSql shares, balance = C.realFromSql amount}
+         | makeRow row = Init.rowError ("Bad delinquentPledgers", row)
+    in
+       C.map (getDb ()) makeRow ($`SELECT WebUserPaying.id, WebUserPaying.name, shares, amount
+                                   FROM WebUserPaying JOIN Balance ON Balance.id = bal
+                                   WHERE amount < shares * ^(C.realToSql costBase) * ^(C.intToSql graceMonths)
+                                     AND shares > 1
+                                   ORDER BY name`)
+    end
+
+fun resetPledges ids =
+    raise Fail ($`UPDATE WebUser SET shares = 1 WHERE id IN (^(String.concatWith ", " (List.map C.intToSql ids)))`)
+
 end