aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Stat/View.elm
blob: 72e1f34aa80996faa3b4490f359c371016b2c9da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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 LoggedIn.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" ]
        [ h1 [] [ text (getParamMessage [ Format.price loggedData.conf monthPaymentMean ] "ByMonthsAndMean" loggedData.translations) ]
        , 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 << snd)
    |> List.mean

monthDetail : LoggedData -> ((Month, Int), Payments) -> Html Msg
monthDetail loggedData ((month, year), payments) =
  li
    []
    [ text (Date.renderMonth 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