aboutsummaryrefslogtreecommitdiff
path: root/src/client/LoggedIn/Stat/View.elm
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/LoggedIn/Stat/View.elm')
-rw-r--r--src/client/LoggedIn/Stat/View.elm62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/client/LoggedIn/Stat/View.elm b/src/client/LoggedIn/Stat/View.elm
new file mode 100644
index 0000000..f57316a
--- /dev/null
+++ b/src/client/LoggedIn/Stat/View.elm
@@ -0,0 +1,62 @@
+module LoggedIn.Stat.View exposing
+ ( view
+ )
+
+import Date exposing (Month)
+
+import Html exposing (..)
+import Html.Attributes exposing (..)
+
+import LoggedData exposing (LoggedData)
+
+import Msg exposing (Msg)
+
+import Model.Payment as Payment exposing (Payments)
+import Model.Conf exposing (Conf)
+import Model.Translations exposing (getMessage, getParamMessage)
+
+import LoggedIn.View.Format as Format
+import View.Date as Date
+import View.Plural exposing (plural)
+
+import Utils.List as List
+
+view : LoggedData -> Html Msg
+view loggedData =
+ let paymentsByMonth = Payment.groupAndSortByMonth (Payment.punctual loggedData.payments)
+ monthPaymentMean = getMonthPaymentMean loggedData paymentsByMonth
+ in div
+ [ class "stat withMargin" ]
+ [ h1 [] [ text (getParamMessage [ Format.price loggedData.conf monthPaymentMean ] loggedData.translations "ByMonthsAndMean") ]
+ , ul
+ []
+ ( List.map (monthDetail loggedData) paymentsByMonth)
+ ]
+
+getMonthPaymentMean : LoggedData -> List ((Month, Int), Payments) -> Int
+getMonthPaymentMean loggedData paymentsByMonth =
+ paymentsByMonth
+ |> List.filter (\((month, year), _) ->
+ let currentDate = Date.fromTime loggedData.currentTime
+ in not (Date.month currentDate == month && Date.year currentDate == year)
+ )
+ |> List.map (List.sum << List.map .cost << Tuple.second)
+ |> List.mean
+
+monthDetail : LoggedData -> ((Month, Int), Payments) -> Html Msg
+monthDetail loggedData ((month, year), payments) =
+ li
+ []
+ [ text (Date.monthView loggedData.translations month)
+ , text " "
+ , text (toString year)
+ , text " − "
+ , text (paymentsSum loggedData.conf payments)
+ ]
+
+paymentsSum : Conf -> Payments -> String
+paymentsSum conf payments =
+ payments
+ |> List.map .cost
+ |> List.sum
+ |> Format.price conf