From: Adam Chlipala Date: Sun, 24 Feb 2008 17:11:02 +0000 (+0000) Subject: Most of lowering of pledges for delinquents X-Git-Url: https://git.hcoop.net/hcoop/portal.git/commitdiff_plain/1b566e48ec4228ebf60088e7040b9d92a8c1fb01?ds=sidebyside Most of lowering of pledges for delinquents --- diff --git a/money.mlt b/money.mlt index 2af1635..9c50d10 100644 --- a/money.mlt +++ b/money.mlt @@ -459,6 +459,23 @@ elseif $"cmd" = "checkout" then (nil, nil) => %>No matches.<% end +elseif $"cmd" = "delinq" then + showNormal := false; + val dqs = Money.delinquentPledgers () %> + + +<% foreach dq in dqs do %> + +<% end %> +
Member Pledge Balance
<% #name dq %> <% #shares dq %> $<% #balance dq %>
+ + Int.toString (#id dq)) dqs) %>">Lower these pledges to 1 + +<% elseif $"lower" <> "" then + Money.resetPledges (List.map Web.stoi (String.tokens (fn ch => ch = #",") ($"lower"))) + + %>

Pledges reset.

<% + end %> <% if showNormal then @@ -480,6 +497,7 @@ Deposit: $<% deposit %> (3 months of dues at your current p <% if (Group.inGroupName "money" and $"lookback" = "") or $"audit" <> "" then %> +Drop pledges of delinquent members
Switch to regular member view

New transaction:
diff --git a/money.sig b/money.sig index 235c3d8..087666d 100644 --- a/money.sig +++ b/money.sig @@ -33,4 +33,7 @@ sig val equalizeBalances : unit -> unit val costBase : real -> real + + val delinquentPledgers : unit -> { id : int, name : string, shares : int, balance : real } list + val resetPledges : int list -> unit end diff --git a/money.sml b/money.sml index f4423ac..1b569c8 100644 --- 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