Money.deleteTransaction id %>
<h3><b><% Web.html (#descr trn) %> deleted!</b></h3>
+<% elseif $"cmd" = "equalize" then
+ Group.requireGroupName "money";
+ Money.equalizeBalances ();
+ %><h3><b>Balances equalized</b></h3>
+
<% elseif $"trn" <> "" then
showNormal := false;
val id = Web.stoi ($"trn");
<a href="money?cmd=hosting">Hosting bill</a><br>
<a href="money?cmd=pay">Payment from member</a><br>
<a href="money?cmd=evenForm">Generic/even</a><br>
+<br>
+<a href="money?cmd=equalize">Equalize balances</a><br>
<h3><b>Most recent transactions</b></h3>
type hosting = {trn : int, cutoff : int, cost : real, usage : string}
val addHostingCharges : hosting -> unit
+
+ val equalizeBalances : unit -> unit
end
\ No newline at end of file
in
walkNvs (rest,
SM.insert (umap, name, extra),
- amount - extra)
+ amount + extra)
end
else
walkNvs (rest, umap, amount)
val (charge, umap) =
case SM.find (umap, #name usr) of
NONE => (even, umap)
- | SOME extra => (even + extra, #1 (SM.remove (umap, #name usr)))
+ | SOME extra => (even - extra, #1 (SM.remove (umap, #name usr)))
in
addCharge {trn = trn, usr = #id usr, amount = charge};
umap
else
raise Fail "Usage description contains an unknown username"
end
+
+fun equalizeBalances () =
+ ignore (C.dml (getDb ()) ($`UPDATE Balance SET amount = (SELECT SUM(amount) FROM Charge JOIN WebUser ON usr = WebUser.id WHERE bal = Balance.id)`))
+
end
\ No newline at end of file