X-Git-Url: http://git.hcoop.net/hcoop/portal.git/blobdiff_plain/208e2cbc6b64811eba6c762795022c042bc48e33..b6392a52a07ca163e5a1ee1b46d62a48ef395829:/money.mlt diff --git a/money.mlt b/money.mlt index e2bf406..dbad9a9 100644 --- a/money.mlt +++ b/money.mlt @@ -1,37 +1,116 @@ <% @header [("title", ["MoneyMatters"])]; +val root = Group.inGroupNum 0; + ref showNormal = true; -if $"cmd" = "list" then +if $"hist" <> "" then + showNormal := false; + val id = Web.stoi ($"hist") %> + + +<% foreach (amount, trn) in Money.listUserTransactions id do %> + +<% end %> +
Date Description Amount
<% #d trn %> <% Web.html (#descr trn) %> <% amount %>/<% #amount trn %>
+ +<% elseif $"cmd" = "list" then + val admin = Group.inGroupName "money"; showNormal := false %> -

Transactions

+

Transactions

<% foreach trn in Money.listTransactions () do %> <% switch Money.listChargesWithNames (#id trn) of - [(name, cha)] => %><% - | _ => %><% + [(name, cha)] => %><% + | _ => %><% +end; +if admin then + %> + <% +end +%><% +end %> +
Date Description Amount Last modified Participants
<% #d trn %> <% Web.html (#descr trn) %> <% #amount trn %> <% #stamp trn %><% name %>
multi
<% name %>multi[Bill] [Payment] [Other][Delete]
+ +<% elseif $"cmd" = "primary" then + val admin = Group.inGroupName "money"; + showNormal := false %> + +

Primary Transactions

+ + + +<% foreach (amt, trn) in Money.listUserTransactions (valOf (Init.userNameToId "hcoop")) do %> + +<% switch Money.listChargesWithNames (#id trn) of + [(name, cha)] => %><% + | _ => %><% +end; +if admin then + %> + <% end +%><% end %>
Date Description Amount Last modified Participants
<% #d trn %> <% Web.html (#descr trn) %> <% #amount trn %> <% #stamp trn %><% name %>multi[Bill] [Payment] [Other][Delete]
<% elseif $"cmd" = "bals" then showNormal := false %> -

Balances

+

Active Balances

+ + +<% foreach bal in Balance.listOwnedBalances () do %> + +<% end %> +
<% #name bal %> <% #amount bal %> +<% switch Balance.listBalanceUsers (#id bal) of + [] => + | (user :: users) => + %><% Web.html (#name user) %> [History]<% + foreach user in users do + %>, <% Web.html (#name user) %><% + end +end %>
+ +<% elseif $"cmd" = "deadbals" then + showNormal := false %> + +

Retired Balances

+ + +<% foreach bal in Balance.listUnownedBalances () do %> + +<% end %> +
<% #name bal %> <% #amount bal %> +<% switch Balance.listBalanceUsers (#id bal) of + [] => + | (user :: users) => + %><% Web.html (#name user) %> [History]<% + foreach user in users do + %>, <% Web.html (#name user) %> [History]<% + end +end %>
+ +<% elseif $"cmd" = "nbals" then + showNormal := false; + val bals = Balance.listNegativeOwnedBalances () %> + +

Negative Active Balances (<% length bals %>)

-<% foreach bal in Balance.listBalances () do %> +<% foreach bal in bals do %> <% end %> @@ -41,37 +120,217 @@ end %> Group.requireGroupName "money"; showNormal := false %> -

New hosting bill

+

New hosting bill

- + -
<% #name bal %> <% #amount bal %> <% switch Balance.listBalanceUsers (#id bal) of [] => | (user :: users) => - %><% Web.html (#name user) %><% + %><% Web.html (#name user) %> [History]<% foreach user in users do - %>, <% Web.html (#name user) %><% + %>, <% Web.html (#name user) %> [History]<% end end %>
- - - - - - +
Description:
Date:
Amount:
Free bandwidth cutoff (MB):
Cost/GB:
Member usage:
+ + + + + +
Description:
Date:
Amount:
Free bandwidth cutoff (MB):
Cost/GB:
Member usage:
<% elseif $"cmd" = "hosting2" then - val id = Money.addTransaction ($"descr", Web.stor ($"amount"), $"d"); + Group.requireGroupName "money"; + val id = Money.addTransaction ($"descr", Util.neg (Web.stor ($"amount")), $"d"); + Money.addHostingCharges {trn = id, cutoff = 1000 * Web.stoi ($"cutoff"), cost = Web.stor ($"cost"), usage = $"usage"}; + + %>

Hosting transaction added.

+ +<% elseif $"modHosting" <> "" then + Group.requireGroupName "money"; + showNormal := false; + val id = Web.stoi ($"modHosting"); + val trn = Money.lookupTransaction id %> + +

Modify hosting bill

+ + + + + + + + + + + +
Description:
Date:
Amount:
Free bandwidth cutoff (MB):
Cost/GB:
Member usage:
+ +<% elseif $"saveHosting" <> "" then + Group.requireGroupName "money"; + val id = Web.stoi ($"saveHosting"); + val trn = Money.lookupTransaction id; + + Money.clearCharges id; + Money.modTransaction {trn with descr = $"descr", d = $"d", amount = Util.neg (Web.stor ($"amount"))}; Money.addHostingCharges {trn = id, cutoff = 1000 * Web.stoi ($"cutoff"), cost = Web.stor ($"cost"), usage = $"usage"}; - %>

Hosting transaction added.

+ %>

Hosting transaction modified.

+ +<% elseif $"cmd" = "bill" then + Group.requireGroupName "money"; + showNormal := false %> + +

New bill for the co-op

+ + + + + + + + +
Description:
Date:
Amount:
+ +<% elseif $"cmd" = "bill2" then + Group.requireGroupName "money"; + val id = Money.addTransaction ($"descr", Util.neg (Web.stor ($"amount")), $"d"); + Money.addCharge {trn = id, usr = valOf (Init.userNameToId "hcoop"), amount = Util.neg (Web.stor ($"amount"))}; + Money.applyCharges id; + + %>

Bill added.

+ +<% elseif $"modBill" <> "" then + Group.requireGroupName "money"; + showNormal := false; + val id = Web.stoi ($"modBill"); + val trn = Money.lookupTransaction id %> + +

Modify bill

+ + + + + + + + +
Description:
Date:
Amount:
+ +<% elseif $"saveBill" <> "" then + Group.requireGroupName "money"; + val id = Web.stoi ($"saveBill"); + val trn = Money.lookupTransaction id; + + Money.clearCharges id; + Money.modTransaction {trn with descr = $"descr", d = $"d", amount = Util.neg (Web.stor ($"amount"))}; + Money.addCharge {trn = id, usr = valOf (Init.userNameToId "hcoop"), amount = Util.neg (Web.stor ($"amount"))}; + Money.applyCharges id; + + %>

Bill modified.

<% elseif $"cmd" = "evenForm" then Group.requireGroupName "money"; showNormal := false %> -

New generic/even transaction

- +

New generic/even transaction

+ - - - - -
Description:
Date:
Amount:
Members: + + + + + +
Description:
Date:
Amount:
Members:
+ + +<% elseif $"cmd" = "pay" then + Group.requireGroupName "money"; + val uid = (case $"user" of "" => ~1 | s => Web.stoi s); + showNormal := false %> + +

New member payment

+ +
+ + + + + + + +
Description:
Date: ">
Amount:
Member:
+
+ +<% elseif $"cmd" = "pay2" then + Group.requireGroupName "money"; + val amount = Web.stor ($"amount"); + val descr = $"descr"; + val descr = iff descr = "" then $"descr2" else descr; + val id = Money.addTransaction (descr, amount, $"d"); + Money.addCharge {trn = id, usr = Web.stoi ($"usr"), amount = amount}; + Money.applyCharges id; + + %>

Payment transaction added.

+ +<% elseif $"modPay" <> "" then + Group.requireGroupName "money"; + showNormal := false; + val id = Web.stoi ($"modPay"); + val trn = Money.lookupTransaction id %> + +

Modify member payment

+ +
+ + + + + + + +
Description:
Date:
Amount:
Member:
+ +<% elseif $"savePay" <> "" then + Group.requireGroupName "money"; + val id = Web.stoi ($"savePay"); + val trn = Money.lookupTransaction id; + + val amount = Web.stor ($"amount"); + Money.clearCharges id; + Money.modTransaction {trn with descr = $"descr", d = $"d", amount = amount}; + Money.addCharge {trn = id, usr = Web.stoi ($"usr"), amount = amount}; + Money.applyCharges id; + + %>

Member payment modified.

+ +<% elseif $"cmd" = "evenForm" then + Group.requireGroupName "money"; + showNormal := false %> +

New generic/even transaction

+ + + + + + +
Description:
Date:
Amount:
Members:
+<% elseif $"cmd" = "dues" then + Group.requireGroupName "money"; + showNormal := false %> + +

Monthly dues

+ +
+ + + + + + +
Description:
Date:
Amount/pledge:
+ +<% elseif $"cmd" = "dues2" then + Group.requireGroupName "money"; + Money.billDues {descr = $"descr", base = Web.stor ($"base"), date = $"d"}; + + %>

Dues debits added.

+ <% elseif $"cmd" = "even" then + Group.requireGroupName "money"; val id = Money.addTransaction ($"descr", Web.stor ($"amount"), $"d"); Money.addEvenCharges (id, map Web.stoi (Web.getMultiParam "usrs")) - %>

Even transaction added.

+ %>

Even transaction added.

<% elseif $"modEven" <> "" then + Group.requireGroupName "money"; showNormal := false; val trn = Money.lookupTransaction (Web.stoi ($"modEven")) %> -

Modify even transaction

+

Modify even transaction

- + "> - - - - -
Description:
Date:
Amount:
Members: + + + + <% elseif $"saveEven" <> "" then + Group.requireGroupName "money"; val id = Web.stoi ($"saveEven"); val trn = Money.lookupTransaction id; Money.clearCharges id; Money.modTransaction {trn with descr = $"descr", d = $"d", amount = Web.stor ($"amount")}; Money.addEvenCharges (id, map Web.stoi (Web.getMultiParam "usrs")) - %>

Even transaction modified

+ %>

Even transaction modified

<% elseif $"del" <> "" then + Group.requireGroupName "money"; showNormal := false; val trn = Money.lookupTransaction (Web.stoi ($"del")) %> -

Are you sure you want to delete transaction <% Web.html (#descr trn) %>?

+

Are you sure you want to delete transaction <% Web.html (#descr trn) %>?

">Yes, delete <% Web.html (#descr trn) %>! <% elseif $"del2" <> "" then + Group.requireGroupName "money"; val id = Web.stoi ($"del2"); val trn = Money.lookupTransaction id; Money.clearCharges id; Money.deleteTransaction id %> -

<% Web.html (#descr trn) %> deleted!

+

<% Web.html (#descr trn) %> deleted!

+ +<% elseif $"cmd" = "equalize" then + Group.requireGroupName "money"; + Money.equalizeBalances (); + %>

Balances equalized

<% elseif $"trn" <> "" then showNormal := false; val id = Web.stoi ($"trn"); val trn = Money.lookupTransaction id %> -
Description:
Date:
Amount:
Members:
- - - - - +
TRN#: <% id %>
Description: <% Web.html (#descr trn) %>
Date: <% #d trn %>
Amount: $<% #amount trn %>
Distribution:
+ + + + + <% ref first = true; foreach (name, cha) in Money.listChargesWithNames id do @@ -150,20 +440,213 @@ foreach (name, cha) in Money.listChargesWithNames id do end %>
TRN#: <% id %>
Description: <% Web.html (#descr trn) %>
Date: <% #d trn %>
Amount: $<% #amount trn %>
Distribution:
+<% elseif $"cmd" = "paypal" then + showNormal := false; + val apps = App.searchPaypal ($"email"); + val users = Init.searchPaypal ($"email"); + + switch apps of + _ :: _ => + %>

Approved applications

+ + <% foreach appl in apps do %> +


+ + + + + + + <% switch #paypal appl of + SOME s => %> + <% end; + switch #checkout appl of + SOME s => %> + <% end %> + + + +
Received: <% #applied appl %>
Approved by: <% + ref first = true; + ref found = false; + foreach (id, name) in App.votes (#id appl) do + if first then + first := false + else + %>, <% + end + %><% name %><% + end %>
Username: <% #name appl %>
Real name: <% Web.html (#rname appl) %>
E-mail address: <% #email appl %>
PayPal: <% s %>
Google Checkout: <% s %>
Forward e-mail? <% if #forward appl then %>yes<% else %>no<% end %>
Proposed uses: <% Web.htmlNl (#uses appl) %>
Other information: <% Web.htmlNl (#other appl) %>
+ + <% if root then %> + Add this member.
+ <% end + end + end; + + switch users of + _ :: _ => + %>

Members

+ + <% foreach user in users do %> +
  • <% #name user %> [add payment]
  • + <% end + end; + + switch (apps, users) of + (nil, nil) => %>No matches.<% + end + +elseif $"cmd" = "checkout" then + showNormal := false; + val apps = App.searchCheckout ($"email"); + val users = Init.searchCheckout ($"email"); + + switch apps of + _ :: _ => + %>

    Approved applications

    + + <% foreach appl in apps do %> +


    + + + + + + + <% switch #paypal appl of + SOME s => %> + <% end; + switch #checkout appl of + SOME s => %> + <% end %> + + + +
    Received: <% #applied appl %>
    Approved by: <% + ref first = true; + ref found = false; + foreach (id, name) in App.votes (#id appl) do + if first then + first := false + else + %>, <% + end + %><% name %><% + end %>
    Username: <% #name appl %>
    Real name: <% Web.html (#rname appl) %>
    E-mail address: <% #email appl %>
    PayPal: <% s %>
    Google Checkout: <% s %>
    Forward e-mail? <% if #forward appl then %>yes<% else %>no<% end %>
    Proposed uses: <% Web.htmlNl (#uses appl) %>
    Other information: <% Web.htmlNl (#other appl) %>
    + + <% if root then %> + Add this member.
    + <% end + end + end; + + switch users of + _ :: _ => + %>

    Members

    + + <% foreach user in users do %> +
  • <% #name user %> [add payment]
  • + <% end + end; + + switch (apps, users) of + (nil, nil) => %>No matches.<% + end + +elseif $"cmd" = "delinq" then + showNormal := false; + val dqs = Money.delinquentPledgers () %> + + +<% foreach dq in dqs do %> + +<% end %> +
    Member Pledge Balance
    <% #name dq %> <% #shares dq %> $<% #balance dq %>
    + + Int.toString (#id dq)) dqs) %>">Lower these pledges to 1 + +<% elseif $"lower" <> "" then + Money.resetPledges (List.map Web.stoi (String.tokens (fn ch => ch = #",") ($"lower"))) + + %>

    Pledges reset.

    <% + +elseif $"cmd" = "freezeworthy" then + showNormal := false; + val dqs = Money.freezeworthyPledgers () %> + + +<% foreach dq in dqs do %> + +<% if #joinedThisMonth dq then %><% end %> +<% end %> +
    Member Balance
    <% #name dq %> $<% #balance dq %>(joined this month)
    + +<% elseif $"cmd" = "bootworthy" then + showNormal := false; + val dqs = Money.bootworthyPledgers () %> + + +<% foreach dq in dqs do %> + +<% if #joinedThisMonth dq then %><% end %> +<% end %> +
    Member Balance
    <% #name dq %> $<% #balance dq %>(joined this month)
    + <% end %> -<% if showNormal then %> +<% if showNormal then + val you = Init.getUser(); + val bal = Balance.lookupBalance (#bal you); + val deposit = Balance.depositAmount (#id bal); + val showBal = Util.sub (#amount bal, deposit) %> + +

    Your balance: $<% showBal %>
    +Deposit: $<% deposit %> (3 months of dues at the minimal pledge level)
    +Co-op balance: $<% #amount (Balance.lookupBalance (valOf (Balance.balanceNameToId "hcoop"))) %>

    + + + +<% if (iff Group.inGroupName "money" then $"lookback" = "" else $"audit" <> "") then %>

    Sum of all active balances: $<% Balance.sumOwnedBalances () %>

    <% end %> List all transactions
    -List all balances
    +List primary transactions
    +List active balances
    +List negative active balances
    +List members who deserve account freezing
    +List members who deserve to be kicked out
    +List retired balances
    + +<% if (Group.inGroupName "money" and $"lookback" = "") or $"audit" <> "" then %> -<% if Group.inGroupName "money" then %> +Drop pledges of delinquent members
    +Switch to regular member view

    New transaction:
    -Hosting bill
    +Bill for the co-op
    +Payment from member
    +Monthly dues
    +New hosting bill (old style)
    Generic/even
    +
    +Equalize balances
    +
    + +

    Look up a PayPal e-mail address

    -

    Most recent transactions

    +
    + + +
    + +

    Look up a Google Checkout e-mail address

    + +
    + + +
    + +

    Most recent transactions

    @@ -173,20 +656,41 @@ end %> [(name, cha)] => %><% | _ => %><% end %> - + + <% end %>
    Date Description Amount Participants Replace Delete
    <% name %>multi[Even] [Delete]
    [Bill] [Payment] [Other][Delete]
    <% else %> +Switch to audit view
    +<% val lookback = case $"lookback" of "" => 20 | "inf" => 0 | lb => Web.stoi lb; + @payment [] %> + +

    Your recent account activity

    -

    Your recent account activity

    +
    + Show most recent transactions. + +
    +<% ref running = showBal; +val trans = iff lookback = 0 then + Money.listUserTransactions (Init.getUserId ()) + else + Money.listUserTransactionsLimit (Init.getUserId (), lookback) %> - -<% foreach (amount, trn) in Money.listUserTransactionsLimit (Init.getUserId (), 20) do %> - -<% end %> + +<% foreach (amount, trn) in trans do %> + + + + +<% running := Util.sub (running, amount) +end %>
    Date Description Amount
    <% #d trn %> <% Web.html (#descr trn) %> <% amount %>/<% #amount trn %>
    Date Description Debit Credit Balance
    <% #d trn %> <% Web.html (#descr trn) %><% if Util.lt (amount, 0.0) then %><% amount %><% end %><% if Util.ge (amount, 0.0) then %><% amount %><% end %><% running %>
    +<% if lookback <> 0 then %> +Show all transactions
    +<% end %> <% end end %>