'Return to main page' link in header
[bpt/portal.git] / money.mlt
CommitLineData
208e2cbc
AC
1<% @header [("title", ["MoneyMatters"])];
2
3ref showNormal = true;
4
d1d096bb
AC
5if $"hist" <> "" then
6 showNormal := false;
7 val id = Web.stoi ($"hist") %>
8<table>
9<tr> <td><b>Date</b></td> <td><b>Description</b></td> <td><b>Amount</b></td> </tr>
10<% foreach (amount, trn) in Money.listUserTransactions id do %>
11<tr> <td><% #d trn %></td> <td><a href="money?trn=<% #id trn %>"><% Web.html (#descr trn) %></a></td> <td><% amount %>/<% #amount trn %></td> </tr>
12<% end %>
13</table>
14
15<% elseif $"cmd" = "list" then
9bda1e7f 16 val admin = Group.inGroupName "money";
208e2cbc
AC
17 showNormal := false %>
18
19<h3><b>Transactions</b></h3>
20
21<table>
22<tr> <td><b>Date</b></td> <td><b>Description</b></td> <td><b>Amount</b></td> <td><b>Last modified</b></td> <td><b>Participants</b></td> </tr>
23<% foreach trn in Money.listTransactions () do %>
24<tr> <td><% #d trn %></td> <td><a href="money?trn=<% #id trn %>"><% Web.html (#descr trn) %></a></td> <td><% #amount trn %></td> <td><% #stamp trn %></td>
25<% switch Money.listChargesWithNames (#id trn) of
9bda1e7f
AC
26 [(name, cha)] => %><td><a href="user?id=<% #usr cha %>"><% name %></a></td><%
27 | _ => %><td><i>multi</i></td><%
28end;
29if admin then
30 %><td><a href="money?modHosting=<% #id trn %>">[Hosting]</a> <a href="money?modPay=<% #id trn %>">[Payment]</a> <a href="money?modEven=<% #id trn %>">[Other]</a></td>
31 <td><a href="money?del=<% #id trn %>">[Delete]</a></td><%
208e2cbc 32end
9bda1e7f 33%></tr><%
208e2cbc
AC
34end %>
35</table>
36
37<% elseif $"cmd" = "bals" then
38 showNormal := false %>
39
40<h3><b>Balances</b></h3>
41
42<table>
43<% foreach bal in Balance.listBalances () do %>
44<tr><td><% #name bal %></td> <td><% #amount bal %></td> <td>
45<% switch Balance.listBalanceUsers (#id bal) of
46 [] =>
47 | (user :: users) =>
d1d096bb 48 %><a href="money?hist=<% #id user %>"><% Web.html (#name user) %></a><%
208e2cbc 49 foreach user in users do
d1d096bb 50 %>, <a href="money?hist=<% # id user %>"><% Web.html (#name user) %></a><%
208e2cbc
AC
51 end
52end %></td> </tr>
53<% end %>
54</table>
55
56<% elseif $"cmd" = "hosting" then
57 Group.requireGroupName "money";
58 showNormal := false %>
59
60<h3><b>New hosting bill</b></h3>
61
62<form action="money">
63<input type="hidden" name="cmd" value="hosting2">
64<table>
65<tr> <td align="right"><b>Description</b>:</td> <td><input name="descr"></td> </tr>
66<tr> <td align="right"><b>Date</b>:</td> <td><input name="d"></td> </tr>
67<tr> <td align="right"><b>Amount</b>:</td> <td><input name="amount"></td> </tr>
68<tr> <td align="right"><b>Free bandwidth cutoff (MB)</b>:</td> <td><input name="cutoff" value="200"></td> </tr>
69<tr> <td align="right"><b>Cost/GB</b>:</td> <td><input name="cost" value="4"></td> </tr>
70<tr> <td align="right" valign="top"><b>Member usage</b>:</td> <td><textarea wrap="soft" name="usage" rows="24" cols="80"></textarea></td> </tr>
71<tr> <td><input type="submit" value="Add"></td> </tr>
72</table>
73
74<% elseif $"cmd" = "hosting2" then
f49e1088
AC
75 Group.requireGroupName "money";
76 val id = Money.addTransaction ($"descr", Util.neg (Web.stor ($"amount")), $"d");
208e2cbc
AC
77 Money.addHostingCharges {trn = id, cutoff = 1000 * Web.stoi ($"cutoff"), cost = Web.stor ($"cost"), usage = $"usage"};
78
79 %><h3><b>Hosting transaction added.</b></h3>
80
f49e1088
AC
81<% elseif $"modHosting" <> "" then
82 Group.requireGroupName "money";
83 showNormal := false;
84 val id = Web.stoi ($"modHosting");
85 val trn = Money.lookupTransaction id %>
86
87<h3><b>Modify hosting bill</b></h3>
88
89<form action="money">
90<input type="hidden" name="saveHosting" value="<% id %>">
91<table>
92<tr> <td align="right"><b>Description</b>:</td> <td><input name="descr" value="<% Web.html (#descr trn) %>"></td> </tr>
93<tr> <td align="right"><b>Date</b>:</td> <td><input name="d" value="<% Web.html (#d trn) %>"></td> </tr>
94<tr> <td align="right"><b>Amount</b>:</td> <td><input name="amount" value="<% Util.neg (#amount trn) %>"></td> </tr>
95<tr> <td align="right"><b>Free bandwidth cutoff (MB)</b>:</td> <td><input name="cutoff" value="200"></td> </tr>
96<tr> <td align="right"><b>Cost/GB</b>:</td> <td><input name="cost" value="4"></td> </tr>
97<tr> <td align="right" valign="top"><b>Member usage</b>:</td> <td><textarea wrap="soft" name="usage" rows="24" cols="80"></textarea></td> </tr>
98<tr> <td><input type="submit" value="Save"></td> </tr>
99</table>
100
101<% elseif $"saveHosting" <> "" then
102 Group.requireGroupName "money";
103 val id = Web.stoi ($"saveHosting");
104 val trn = Money.lookupTransaction id;
105
106 Money.clearCharges id;
107 Money.modTransaction {trn with descr = $"descr", d = $"d", amount = Util.neg (Web.stor ($"amount"))};
108 Money.addHostingCharges {trn = id, cutoff = 1000 * Web.stoi ($"cutoff"), cost = Web.stor ($"cost"), usage = $"usage"};
109
110 %><h3><b>Hosting transaction modified.</b></h3>
111
112<% elseif $"cmd" = "evenForm" then
113 Group.requireGroupName "money";
114 showNormal := false %>
115<h3><b>New generic/even transaction</b></h3>
116<form action="money">
117<input type="hidden" name="cmd" value="even">
118<table>
119<tr> <td align="right"><b>Description</b>:</td> <td><input name="descr"></td> </tr>
120<tr> <td align="right"><b>Date</b>:</td> <td><input name="d"></td> </tr>
121<tr> <td align="right"><b>Amount</b>:</td> <td><input name="amount"></td> </tr>
122<tr> <td align="right" valign="top"><b>Members</b>:</td> <td><select name="usrs" size="5" multiple>
123<% foreach usr in Init.listUsers () do %>
124 <option value="<% #id usr %>"><% #name usr %></option>
125<% end %>
126</select></td> </tr>
127<tr> <td><input type="submit" value="Add"></td> </tr>
128</table>
129</form>
130
131<% elseif $"cmd" = "pay" then
132 Group.requireGroupName "money";
133 showNormal := false %>
134
135<h3><b>New member payment</b></h3>
136
137<form action="money">
138<input type="hidden" name="cmd" value="pay2">
139<table>
140<tr> <td align="right"><b>Description</b>:</td> <td><input name="descr"></td> </tr>
141<tr> <td align="right"><b>Date</b>:</td> <td><input name="d"></td> </tr>
142<tr> <td align="right"><b>Amount</b>:</td> <td><input name="amount"></td> </tr>
143<tr> <td align="right" valign="top"><b>Member</b>:</td> <td><select name="usr">
144<% foreach usr in Init.listUsers () do %>
145 <option value="<% #id usr %>"><% #name usr %></option>
146<% end %>
147</select></td> </tr>
148<tr> <td><input type="submit" value="Add"></td> </tr>
149</table>
150</form>
151
152<% elseif $"cmd" = "pay2" then
153 Group.requireGroupName "money";
154 val amount = Web.stor ($"amount");
155 val id = Money.addTransaction ($"descr", amount, $"d");
156 Money.addCharge {trn = id, usr = Web.stoi ($"usr"), amount = amount};
157 Money.applyCharges id;
158
159 %><h3><b>Payment transaction added.</b></h3>
160
161<% elseif $"modPay" <> "" then
162 Group.requireGroupName "money";
163 showNormal := false;
164 val id = Web.stoi ($"modPay");
165 val trn = Money.lookupTransaction id %>
166
167<h3><b>Modify member payment</b></h3>
168
169<form action="money">
170<input type="hidden" name="savePay" value="<% id %>">
171<table>
172<tr> <td align="right"><b>Description</b>:</td> <td><input name="descr" value="<% Web.html (#descr trn) %>"></td> </tr>
173<tr> <td align="right"><b>Date</b>:</td> <td><input name="d" value="<% Web.html (#d trn) %>"></td> </tr>
174<tr> <td align="right"><b>Amount</b>:</td> <td><input name="amount" value="<% Util.neg (#amount trn) %>"></td> </tr>
175<tr> <td align="right" valign="top"><b>Member</b>:</td> <td><select name="usr">
176<% foreach (sel, usr) in Money.listUsers (#id trn) do %>
177 <option value="<% #id usr %>"<% if sel then %> selected<% end %>><% #name usr %></option>
178<% end %>
179</td></tr>
180<tr> <td><input type="submit" value="Save"></td> </tr>
181</table>
182
183<% elseif $"savePay" <> "" then
184 Group.requireGroupName "money";
185 val id = Web.stoi ($"savePay");
186 val trn = Money.lookupTransaction id;
187
188 val amount = Web.stor ($"amount");
189 Money.clearCharges id;
190 Money.modTransaction {trn with descr = $"descr", d = $"d", amount = amount};
191 Money.addCharge {trn = id, usr = Web.stoi ($"usr"), amount = amount};
192 Money.applyCharges id;
193
194 %><h3><b>Member payment modified.</b></h3>
195
208e2cbc
AC
196<% elseif $"cmd" = "evenForm" then
197 Group.requireGroupName "money";
198 showNormal := false %>
199<h3><b>New generic/even transaction</b></h3>
200<form action="money">
201<input type="hidden" name="cmd" value="even">
202<table>
203<tr> <td align="right"><b>Description</b>:</td> <td><input name="descr"></td> </tr>
204<tr> <td align="right"><b>Date</b>:</td> <td><input name="d"></td> </tr>
205<tr> <td align="right"><b>Amount</b>:</td> <td><input name="amount"></td> </tr>
206<tr> <td align="right" valign="top"><b>Members</b>:</td> <td><select name="usrs" size="5" multiple>
207<% foreach usr in Init.listUsers () do %>
208 <option value="<% #id usr %>"><% #name usr %></option>
209<% end %>
210</select></td> </tr>
211<tr> <td><input type="submit" value="Add"></td> </tr>
212</table>
213</form>
214
215<% elseif $"cmd" = "even" then
f49e1088 216 Group.requireGroupName "money";
208e2cbc
AC
217 val id = Money.addTransaction ($"descr", Web.stor ($"amount"), $"d");
218 Money.addEvenCharges (id, map Web.stoi (Web.getMultiParam "usrs"))
219
220 %><h3><b>Even transaction added.</b></h3>
221
222<% elseif $"modEven" <> "" then
f49e1088 223 Group.requireGroupName "money";
208e2cbc
AC
224 showNormal := false;
225 val trn = Money.lookupTransaction (Web.stoi ($"modEven")) %>
226<h3><b>Modify even transaction</b></h3>
227
228<form action="money">
229<input type="hidden" name="saveEven" value="<% $"modEven" %>">
230<table>
231<tr> <td align="right"><b>Description</b>:</td> <td><input name="descr" value="<% Web.html (#descr trn) %>"></td> </tr>
232<tr> <td align="right"><b>Date</b>:</td> <td><input name="d" value="<% Web.html (#d trn) %>"></td> </tr>
233<tr> <td align="right"><b>Amount</b>:</td> <td><input name="amount" value="<% #amount trn %>"></td> </tr>
234<tr> <td align="right" valign="top"><b>Members</b>:</td> <td><select name="usrs" size="5" multiple>
235<% foreach (sel, usr) in Money.listUsers (#id trn) do %>
236 <option value="<% #id usr %>"<% if sel then %> selected<% end %>><% #name usr %></option>
237<% end %>
238</select></td> </tr>
239<tr> <td><input type="submit" value="Save"></td> </tr>
240</table>
241</form>
242
243<% elseif $"saveEven" <> "" then
f49e1088 244 Group.requireGroupName "money";
208e2cbc
AC
245 val id = Web.stoi ($"saveEven");
246 val trn = Money.lookupTransaction id;
247 Money.clearCharges id;
248 Money.modTransaction {trn with descr = $"descr", d = $"d", amount = Web.stor ($"amount")};
249 Money.addEvenCharges (id, map Web.stoi (Web.getMultiParam "usrs"))
250
251 %><h3><b>Even transaction modified</b></h3>
252
253<% elseif $"del" <> "" then
f49e1088 254 Group.requireGroupName "money";
208e2cbc
AC
255 showNormal := false;
256 val trn = Money.lookupTransaction (Web.stoi ($"del")) %>
257 <h3><b>Are you sure you want to delete transaction <a href="money?trn=<% #id trn %>"><% Web.html (#descr trn) %></a>?</b></h3>
258 <a href="money?del2=<% $"del" %>">Yes, delete <% Web.html (#descr trn) %>!</a>
259
260<% elseif $"del2" <> "" then
f49e1088 261 Group.requireGroupName "money";
208e2cbc
AC
262 val id = Web.stoi ($"del2");
263 val trn = Money.lookupTransaction id;
264 Money.clearCharges id;
265 Money.deleteTransaction id %>
266 <h3><b><% Web.html (#descr trn) %> deleted!</b></h3>
267
2d795343
AC
268<% elseif $"cmd" = "equalize" then
269 Group.requireGroupName "money";
270 Money.equalizeBalances ();
271 %><h3><b>Balances equalized</b></h3>
272
208e2cbc
AC
273<% elseif $"trn" <> "" then
274 showNormal := false;
275 val id = Web.stoi ($"trn");
276 val trn = Money.lookupTransaction id %>
277<table>
278<tr> <td align="right"><b>TRN#</b>:</td> <td><% id %></td> </tr>
279<tr> <td align="right"><b>Description</b>:</td> <td><% Web.html (#descr trn) %></td> </tr>
280<tr> <td align="right"><b>Date</b>:</td> <td><% #d trn %></td> </tr>
281<tr> <td align="right"><b>Amount</b>:</td> <td>$<% #amount trn %></td> </tr>
282<tr> <td align="right" valign="top"><b>Distribution</b>:</td>
283
284<% ref first = true;
285foreach (name, cha) in Money.listChargesWithNames id do
286 if first then
287 first := false
288 else
289 %><tr> <td></td> <%
290 end
291 %><td><a href="user?id=<% #usr cha %>"><% name %></a></td> <td>$<% #amount cha %></td> </tr><%
292end %>
293</table>
294
295<% end %>
296
297<% if showNormal then %>
298
299<a href="money?cmd=list">List all transactions</a><br>
300<a href="money?cmd=bals">List all balances</a><br>
301
302<% if Group.inGroupName "money" then %>
303
304<br><b><u>New transaction:</u></b><br>
305<a href="money?cmd=hosting">Hosting bill</a><br>
f49e1088 306<a href="money?cmd=pay">Payment from member</a><br>
208e2cbc 307<a href="money?cmd=evenForm">Generic/even</a><br>
2d795343
AC
308<br>
309<a href="money?cmd=equalize">Equalize balances</a><br>
208e2cbc
AC
310
311<h3><b>Most recent transactions</b></h3>
312
313<table>
314<tr> <td><b>Date</b></td> <td><b>Description</b></td> <td><b>Amount</b></td> <td><b>Participants</b></td> <td><b>Replace</b></td> <td><b>Delete</b></td> </tr>
315<% foreach trn in Money.listTransactionsLimit 20 do %>
316<tr> <td><% #d trn %></td> <td><a href="money?trn=<% #id trn %>"><% Web.html (#descr trn) %></a></td> <td><% #amount trn %></td>
317<% switch Money.listChargesWithNames (#id trn) of
318 [(name, cha)] => %><td><a href="user?id=<% #usr cha %>"><% name %></a></td><%
319 | _ => %><td><i>multi</i></td><%
320end %>
f49e1088
AC
321<td><a href="money?modHosting=<% #id trn %>">[Hosting]</a> <a href="money?modPay=<% #id trn %>">[Payment]</a> <a href="money?modEven=<% #id trn %>">[Other]</a></td>
322<td><a href="money?del=<% #id trn %>">[Delete]</a></td> </tr>
208e2cbc
AC
323<% end %>
324</table>
325
326<% else %>
327
328<h3><b>Your recent account activity</b></h3>
329
330<table>
331<tr> <td><b>Date</b></td> <td><b>Description</b></td> <td><b>Amount</b></td> </tr>
332<% foreach (amount, trn) in Money.listUserTransactionsLimit (Init.getUserId (), 20) do %>
333<tr> <td><% #d trn %></td> <td><a href="money?trn=<% #id trn %>"><% Web.html (#descr trn) %></a></td> <td><% amount %>/<% #amount trn %></td> </tr>
334<% end %>
335</table>
336
337<% end
338end %>
339
340<% @footer [] %>