Fix bug where balances wouldn't update after a new hosting transaction
[bpt/portal.git] / money.sml
index 056b051..6372fd5 100644 (file)
--- a/money.sml
+++ b/money.sml
@@ -86,7 +86,7 @@ val mkUserRow' =
      | row => Init.rowError ("listUsers", row)
 
 fun listUsers trn =
-    C.map (getDb ()) mkUserRow' ($`SELECT trn, id, name, rname, bal, joined
+    C.map (getDb ()) mkUserRow' ($`SELECT trn, id, name, rname, bal, joined, app
                                   FROM WebUser LEFT OUTER JOIN Charge ON usr = id AND trn = ^(C.intToSql trn)
                                   ORDER BY name`)
 
@@ -204,7 +204,7 @@ fun addHostingCharges {trn, cutoff, cost, usage} =
                        in
                            walkNvs (rest,
                                     SM.insert (umap, name, extra),
-                                    amount - extra)
+                                    amount + extra)
                        end
                    else
                        walkNvs (rest, umap, amount)
@@ -221,15 +221,19 @@ fun addHostingCharges {trn, cutoff, cost, usage} =
                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
            end
     in
        if SM.numItems (foldl doUser umap payers) = 0 then
-           ()
+           applyCharges trn
        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