aboutsummaryrefslogtreecommitdiff
path: root/src/client/LoggedIn/Stat/Model.elm
diff options
context:
space:
mode:
authorJoris2017-04-02 17:51:12 +0200
committerJoris2017-04-02 21:07:08 +0200
commit5c110716cfda6e616a795edd12f2012b132dca9f (patch)
tree71c3d04780302edf0648bec1cd914757cdbb2883 /src/client/LoggedIn/Stat/Model.elm
parent64ff4707fdcd81c27c6be9903c3c82bc543ef016 (diff)
downloadbudget-5c110716cfda6e616a795edd12f2012b132dca9f.tar.gz
budget-5c110716cfda6e616a795edd12f2012b132dca9f.tar.bz2
budget-5c110716cfda6e616a795edd12f2012b132dca9f.zip
Add a chart on payments by month by categories
Diffstat (limited to 'src/client/LoggedIn/Stat/Model.elm')
-rw-r--r--src/client/LoggedIn/Stat/Model.elm34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/client/LoggedIn/Stat/Model.elm b/src/client/LoggedIn/Stat/Model.elm
new file mode 100644
index 0000000..bfc66f2
--- /dev/null
+++ b/src/client/LoggedIn/Stat/Model.elm
@@ -0,0 +1,34 @@
+module LoggedIn.Stat.Model exposing
+ ( Model
+ , init
+ , getPaymentsByMonthByCategory
+ )
+
+import Date exposing (Month)
+import List.Extra as List
+import Time exposing (Time)
+
+import Model.Category exposing (CategoryId)
+import Model.Conf exposing (Conf)
+import Model.Payment as Payment exposing (Payments)
+import Model.PaymentCategory as PaymentCategory exposing (PaymentCategories)
+
+type alias Model =
+ { paymentsByMonthByCategory : List ((Month, Int), List (CategoryId, Int))
+ }
+
+init : Time -> PaymentCategories -> Payments -> Model
+init currentTime paymentCategories payments =
+ { paymentsByMonthByCategory = getPaymentsByMonthByCategory currentTime paymentCategories payments
+ }
+
+getPaymentsByMonthByCategory : Time -> PaymentCategories -> Payments -> List ((Month, Int), List (CategoryId, Int))
+getPaymentsByMonthByCategory currentTime paymentCategories payments =
+ Payment.punctual payments
+ |> Payment.groupAndSortByMonth
+ |> List.map (\(m, payments) ->
+ ( m
+ , PaymentCategory.groupPaymentsByCategory paymentCategories payments
+ |> List.map (Tuple.mapSecond (List.sum << List.map .cost))
+ )
+ )