aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/View/Monthly.elm
blob: 26dbe985952431dfd22d0e337831a14ab9e9b5df (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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
module LoggedIn.Home.View.Monthly exposing
  ( view
  )

import String

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

import Msg exposing (Msg)

import LoggedIn.Msg as LoggedInMsg

import LoggedIn.Home.Msg as HomeMsg
import LoggedIn.Home.Model as HomeModel
import LoggedIn.View.Format as Format
import LoggedIn.Home.View.Expand exposing (..)

import Model.Payment as Payment exposing (Payments, Payment, monthly)
import Model.Translations exposing (getMessage, getParamMessage)
import LoggedData exposing (LoggedData)

import View.Icon exposing (renderIcon)

view : LoggedData -> HomeModel.Model -> Html Msg
view loggedData homeModel =
  let monthlyPayments = Payment.monthly loggedData.me loggedData.payments
  in  if List.length monthlyPayments == 0
        then
          text ""
        else
          div
            [ classList
                [ ("monthlyPayments", True)
                , ("detail", homeModel.monthlyDetail)
                ]
            ]
            [ monthlyCount loggedData monthlyPayments homeModel
            , if homeModel.monthlyDetail
                then paymentsTable loggedData monthlyPayments homeModel
                else text ""
            ]

monthlyCount : LoggedData -> Payments -> HomeModel.Model -> Html Msg
monthlyCount loggedData monthlyPayments homeModel =
  let count = List.length monthlyPayments
      total = List.sum << List.map .cost <| monthlyPayments
      key = if count > 1 then "PluralMonthlyCount" else "SingularMonthlyCount"
  in  button
        [ class "header"
        , onClick (Msg.UpdateLoggedIn << LoggedInMsg.HomeMsg <| HomeMsg.ToggleMonthlyDetail)
        ]
        [ text (getParamMessage [toString count, Format.price loggedData.conf total] key loggedData.translations)
        , expand ExpandDown homeModel.monthlyDetail
        ]

paymentsTable : LoggedData -> Payments -> HomeModel.Model -> Html Msg
paymentsTable loggedData monthlyPayments homeModel =
  div
    [ class "table" ]
    ( monthlyPayments
        |> List.sortBy (String.toLower << .name)
        |> List.map (paymentLine loggedData homeModel)
    )

paymentLine : LoggedData -> HomeModel.Model -> Payment -> Html Msg
paymentLine loggedData homeModel payment =
  a
    [ classList
        [ ("row", True)
        , ("edition", homeModel.paymentEdition == Just payment.id)
        ]
    , onClick (Msg.UpdateLoggedIn << LoggedInMsg.HomeMsg <| HomeMsg.ToggleEdit payment.id)
    ]
    [ div [ class "cell category" ] [ text (payment.name) ]
    , div
        [ classList
            [ ("cell cost", True)
            , ("refund", payment.cost < 0)
            ]
        ]
        [ text (Format.price loggedData.conf payment.cost) ]
    , div
        [ class "cell delete"
        , onClick (Msg.UpdateLoggedIn <| LoggedInMsg.DeletePayment payment.id)
        ]
        [ button [] [ renderIcon "times" ]
        ]
    ]