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
91
92
93
94
95
96
97
98
|
module LoggedIn.Home.View.Table
( paymentsTable
) where
import Dict exposing (..)
import Date exposing (Date)
import String exposing (append)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import LoggedData exposing (LoggedData)
import LoggedIn.Action as LoggedInAction
import LoggedIn.Home.Action as HomeAction
import LoggedIn.Home.Model as HomeModel
import LoggedIn.Home.View.Date exposing (..)
import LoggedIn.Home.View.Price exposing (price)
import Model.User exposing (getUserName)
import Model.Payment as Payment exposing (..)
import Action
import Mailbox
import View.Icon exposing (renderIcon)
paymentsTable : LoggedData -> HomeModel.Model -> Html
paymentsTable loggedData homeModel =
div
[ class "table" ]
( headerLine loggedData :: paymentLines loggedData homeModel)
headerLine : LoggedData -> Html
headerLine loggedData =
div
[ class "header" ]
[ div [ class "cell category" ] [ renderIcon "shopping-cart" ]
, div [ class "cell cost" ] [ text loggedData.conf.currency ]
, div [ class "cell user" ] [ renderIcon "user" ]
, div [ class "cell date" ] [ renderIcon "calendar" ]
, div [ class "cell" ] []
]
paymentLines : LoggedData -> HomeModel.Model -> List Html
paymentLines loggedData homeModel =
Payment.punctual loggedData.payments
|> List.sortBy (Date.toTime << .creation)
|> List.reverse
|> List.drop ((homeModel.currentPage - 1) * perPage)
|> List.take perPage
|> List.map (paymentLine loggedData homeModel)
paymentLine : LoggedData -> HomeModel.Model -> Payment -> Html
paymentLine loggedData homeModel payment =
a
[ classList
[ ("row", True)
, ("edition", homeModel.paymentEdition == Just payment.id)
]
, onClick Mailbox.address (Action.UpdateLoggedIn << LoggedInAction.HomeAction << HomeAction.ToggleEdit <| payment.id)
]
[ div [ class "cell category" ] [ text payment.name ]
, div
[ classList
[ ("cell cost", True)
, ("refund", payment.cost < 0)
]
]
[ text (price loggedData.conf payment.cost) ]
, div
[ class "cell user" ]
[ payment.userId
|> getUserName loggedData.users
|> Maybe.withDefault "−"
|> text
]
, div
[ class "cell date" ]
[ span
[ class "shortDate" ]
[ text (renderShortDate payment.creation loggedData.translations) ]
, span
[ class "longDate" ]
[ text (renderLongDate payment.creation loggedData.translations) ]
]
, if loggedData.me == payment.userId
then
div
[ class "cell delete" ]
[ button
[ onClick Mailbox.address (Action.UpdateLoggedIn <| LoggedInAction.DeletePayment payment Punctual)]
[ renderIcon "times" ]
]
else
div [ class "cell" ] []
]
|