aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Stat/View.elm
blob: a28900222aaa52f850a3d59004564b36d97d67cb (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
63
64
65
66
67
68
module LoggedIn.Stat.View
  ( view
  ) where

import Html exposing (..)
import Html.Attributes exposing (..)

import LoggedData exposing (LoggedData)

import Model.Payment as Payment exposing (Payments)
import Model.Conf exposing (Conf)
import Model.Translations exposing (getMessage)

import LoggedIn.View.Format as Format

import View.Plural exposing (plural)

view : LoggedData -> Html
view loggedData =
  div
    [ class "stat" ]
    [ h1 [] [ text (getMessage "Overall" loggedData.translations) ]
    , paymentsDetail loggedData (Payment.punctual loggedData.payments)
    , h1 [] [ text (getMessage "ByMonths" loggedData.translations) ]
    , monthsDetail loggedData
    ]

paymentsDetail : LoggedData -> Payments -> Html
paymentsDetail loggedData payments =
  ul
    []
    [ li
        []
        [ let single = getMessage "Payment" loggedData.translations
              multiple = getMessage "Payments" loggedData.translations
          in  text <| plural (List.length payments) single multiple
        ]
    , li
        []
        [ text (paymentsSum loggedData.conf payments) ]
    ]

monthsDetail : LoggedData -> Html
monthsDetail loggedData =
  ul
    []
    ( Payment.punctual loggedData.payments
        |> Payment.groupAndSortByMonth
        |> List.map (monthDetail loggedData.conf)
    )

monthDetail : Conf -> ((Int, Int), Payments) -> Html
monthDetail conf ((year, month), payments) =
  li
    []
    [ text (toString month)
    , text "/"
    , text (toString year)
    , text " − "
    , text (paymentsSum conf payments)
    ]

paymentsSum : Conf -> Payments -> String
paymentsSum conf payments =
  payments
    |> List.map .cost
    |> List.sum
    |> Format.price conf