val listOwnedBalances : unit -> balance list
val listUnownedBalances : unit -> balance list
val listBalanceUsers : int -> Init.user list
+ val listNegativeOwnedBalances : unit -> balance list
val validBalanceName : string -> bool
val balanceNameToId : string -> int option
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
andalso CharVector.all (fn ch => Char.isAlpha ch orelse ch = #"+") name
<% switch Balance.listBalanceUsers (#id bal) of
[] =>
| (user :: users) =>
- %><a href="money?hist=<% #id user %>"><% Web.html (#name user) %></a><%
+ %><a href="user?id=<% #id user %>"><% Web.html (#name user) %></a> <a href="money?hist=<% #id user %>">[History]</a><%
foreach user in users do
- %>, <a href="money?hist=<% # id user %>"><% Web.html (#name user) %></a><%
+ %>, <a href="user?id=<% #id user %>"><% Web.html (#name user) %></a> <a href="money?hist=<% #id user %>">[History]</a><%
+ end
+end %></td> </tr>
+<% end %>
+</table>
+
+<% elseif $"cmd" = "nbals" then
+ showNormal := false;
+ val bals = Balance.listNegativeOwnedBalances () %>
+
+<h3>Negative Active Balances (<% length bals %>)</h3>
+
+<table>
+<% foreach bal in bals do %>
+<tr><td><% #name bal %></td> <td><% #amount bal %></td> <td>
+<% switch Balance.listBalanceUsers (#id bal) of
+ [] =>
+ | (user :: users) =>
+ %><a href="user?id=<% #id user %>"><% Web.html (#name user) %></a> <a href="money?hist=<% #id user %>">[History]</a><%
+ foreach user in users do
+ %>, <a href="user?id=<% #id user %>"><% Web.html (#name user) %></a> <a href="money?hist=<% #id user %>">[History]</a><%
end
end %></td> </tr>
<% end %>
<a href="money?cmd=list">List all transactions</a><br>
<a href="money?cmd=bals">List active balances</a><br>
+<a href="money?cmd=nbals">List negative active balances</a><br>
<a href="money?cmd=deadbals">List retired balances</a><br>
<% if (Group.inGroupName "money" and $"lookback" = "") or $"audit" <> "" then %>