contact: fix build
[hcoop/portal.git] / balance.sml
index 4e56812..59622de 100644 (file)
@@ -45,7 +45,40 @@ fun deleteBalance id =
 
 fun listBalances () =
     C.map (getDb ()) mkBalanceRow ($`SELECT id, name, amount FROM Balance
-                                  ORDER BY name`)
+                                    ORDER BY name`)
+
+fun listOwnedBalances () =
+    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
+                                    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 =
     size name <= 20
@@ -57,9 +90,34 @@ fun balanceNameToId name =
       | _ => NONE
 
 fun listBalanceUsers bal =
-    C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app
+    C.map (getDb ()) mkUserRow ($`SELECT id, name, rname, bal, joined, app, shares, paypal, checkout
                                  FROM WebUser
                                  WHERE bal = ^(C.intToSql bal)
                                  ORDER BY name`)
 
-end
\ No newline at end of file
+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