HCoop
/
bpt
/
portal.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix Mailman subscription by installing /usr/local/sbin/portalsub
[bpt/portal.git]
/
money.sml
diff --git
a/money.sml
b/money.sml
index
be65cb0
..
f4423ac
100644
(file)
--- a/
money.sml
+++ b/
money.sml
@@
-86,7
+86,7
@@
val mkUserRow' =
| row => Init.rowError ("listUsers", row)
fun listUsers trn =
| row => Init.rowError ("listUsers", row)
fun listUsers trn =
- C.map (getDb ()) mkUserRow' ($`SELECT trn, id, name, rname, bal, joined, app
+ C.map (getDb ()) mkUserRow' ($`SELECT trn, id, name, rname, bal, joined, app
, shares, paypal, checkout
FROM WebUser LEFT OUTER JOIN Charge ON usr = id AND trn = ^(C.intToSql trn)
ORDER BY name`)
FROM WebUser LEFT OUTER JOIN Charge ON usr = id AND trn = ^(C.intToSql trn)
ORDER BY name`)
@@
-213,21
+213,35
@@
fun addHostingCharges {trn, cutoff, cost, usage} =
val (umap, amount) = walkNvs (nvs, SM.empty, #amount tran)
val (umap, amount) = walkNvs (nvs, SM.empty, #amount tran)
- val payers = Group.groupMembers paying
- val even = amount / real (length payers)
+ val db = getDb ()
+
+ val shares =
+ case C.oneRow db ($`SELECT SUM(shares)
+ FROM WebUser JOIN Membership ON usr = WebUser.id AND grp = ^(C.intToSql paying)`) of
+ [n] => C.intFromSql n
+ | row => Init.rowError ("Bad addHostingCharges share count result", row)
+
+ val even = amount / real shares
- fun doUser (
usr : Init.user
, umap) =
+ fun doUser (
[uid, uname, shares]
, umap) =
let
let
+ val uid = C.intFromSql uid
+ val uname = C.stringFromSql uname
+ val shares = C.intFromSql shares
+
val (charge, umap) =
val (charge, umap) =
- case SM.find (umap,
#name usr
) of
- NONE => (even, umap)
- | SOME extra => (even
- extra, #1 (SM.remove (umap, #name usr
)))
+ case SM.find (umap,
uname
) of
+ NONE => (even
* real shares
, umap)
+ | SOME extra => (even
* real shares - extra, #1 (SM.remove (umap, uname
)))
in
in
- addCharge {trn = trn, usr =
#id usr
, amount = charge};
+ addCharge {trn = trn, usr =
uid
, amount = charge};
umap
end
umap
end
- val _ = if SM.numItems (foldl doUser umap payers) = 0 then
+ val _ = if SM.numItems (C.fold db doUser umap
+ ($`SELECT id, name, shares
+ FROM WebUser JOIN Membership ON usr = WebUser.id AND grp = ^(C.intToSql paying)`))
+ = 0 then
applyCharges trn
else
raise Fail "Usage description contains an unknown username"
applyCharges trn
else
raise Fail "Usage description contains an unknown username"
@@
-254,4
+268,9
@@
fun lookupHostingUsage trn =
before TextIO.closeIn usageFile
end handle _ => NONE
before TextIO.closeIn usageFile
end handle _ => NONE
+fun costBase amt =
+ case C.oneRow (getDb ()) ($`SELECT ^(C.realToSql amt) / SUM(shares) FROM WebUserPaying`) of
+ [share] => C.realFromSql share
+ | row => Init.rowError ("Bad costBase result", row)
+
end
end