X-Git-Url: https://git.hcoop.net/hcoop/portal.git/blobdiff_plain/827fa7c4337cbecfb45ce23211c33459cc6a92be..10e55875c83d1d44a0b8d31ff1e49cfec843e9a2:/balance.sml diff --git a/balance.sml b/balance.sml index 9a1f8b6..59622de 100644 --- a/balance.sml +++ b/balance.sml @@ -52,6 +52,32 @@ fun listOwnedBalances () = FROM Balance JOIN WebUser ON Balance.name = WebUser.name AND WebUser.bal = Balance.id + JOIN Membership + ON Membership.grp = 1 + AND Membership.usr = WebUser.id + ORDER BY Balance.name`) + +fun listUnownedBalances () = + C.map (getDb ()) mkBalanceRow ($`SELECT Balance.id, Balance.name, amount + FROM Balance LEFT OUTER JOIN WebUser + ON Balance.name = WebUser.name + AND WebUser.bal = Balance.id + LEFT OUTER JOIN Membership + ON Membership.grp = 1 + AND Membership.usr = WebUser.id + WHERE WebUser.id IS NULL + OR Membership.grp IS NULL + ORDER BY Balance.name`) + +fun listNegativeOwnedBalances () = + C.map (getDb ()) mkBalanceRow ($`SELECT Balance.id, Balance.name, amount + FROM Balance JOIN WebUser + ON Balance.name = WebUser.name + AND WebUser.bal = Balance.id + JOIN Membership + ON Membership.grp = 1 + AND Membership.usr = WebUser.id + WHERE amount < 0 ORDER BY Balance.name`) fun validBalanceName name = @@ -64,9 +90,34 @@ fun balanceNameToId name = | _ => NONE fun listBalanceUsers bal = - C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares + C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout FROM WebUser WHERE bal = ^(C.intToSql bal) ORDER BY name`) +fun sumOwnedBalances () = + case C.oneRow (getDb ()) ($`SELECT SUM(amount) + FROM Balance JOIN WebUser + ON Balance.name = WebUser.name + AND WebUser.bal = Balance.id + JOIN Membership + ON Membership.usr = WebUser.id + AND Membership.grp = 1`) of + [amt] => C.realFromSql amt + | _ => raise Fail "sumOwnedBalance: no rows" + +fun isNegative (bal : balance) = #amount bal < 0.0 + +fun depositAmount _ = 7.0 * 3.0 +(*fun depositAmount bal = + let + val db = getDb () + + val totalShares = case C.oneRow db "SELECT SUM(shares) FROM WebUserPaying" of + [n] => C.intFromSql n + | row => Init.rowError ("Bad depositAmount share count result", row) + in + 3.0 * 900.0 / real totalShares + end*) + end