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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
module LoggedIn.Home.View.Table exposing
( view
)
import Dict exposing (..)
import Date exposing (Date)
import String exposing (append)
import FontAwesome
import View.Color as Color
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Msg exposing (Msg)
import LoggedData exposing (LoggedData)
import LoggedIn.Msg as LoggedInMsg
import LoggedIn.Home.Msg as HomeMsg
import LoggedIn.Home.Model as HomeModel
import View.Date as Date
import LoggedIn.View.Format as Format
import Model.User exposing (getUserName)
import Model.Payment as Payment exposing (..)
import Model.Translations exposing (getMessage)
import Dialog
view : LoggedData -> HomeModel.Model -> Payments -> Frequency -> Html Msg
view loggedData homeModel payments frequency =
let visiblePayments =
payments
|> List.drop ((homeModel.currentPage - 1) * perPage)
|> List.take perPage
in div
[ class "table" ]
[ div
[ class "lines" ]
( headerLine loggedData frequency :: List.map (paymentLine loggedData homeModel frequency) visiblePayments )
, if List.isEmpty visiblePayments
then
div
[ class "noPayment" ]
[ text <| getMessage "NoPayment" loggedData.translations ]
else
text ""
]
headerLine : LoggedData -> Frequency -> Html Msg
headerLine loggedData frequency =
div
[ class "header" ]
[ div [ class "cell category" ] [ text <| getMessage "Name" loggedData.translations ]
, div [ class "cell cost" ] [ text <| getMessage "Cost" loggedData.translations ]
, div [ class "cell user" ] [ text <| getMessage "Payer" loggedData.translations ]
, case frequency of
Punctual -> div [ class "cell date" ] [ text <| getMessage "Date" loggedData.translations ]
Monthly -> text ""
, div [ class "cell" ] []
]
paymentLine : LoggedData -> HomeModel.Model -> Frequency -> Payment -> Html Msg
paymentLine loggedData homeModel frequency payment =
div
[ class "row" ]
[ 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 user" ]
[ payment.userId
|> getUserName loggedData.users
|> Maybe.withDefault "−"
|> text
]
, case frequency of
Punctual ->
div
[ class "cell date" ]
[ span
[ class "shortDate" ]
[ text (Date.shortView payment.date loggedData.translations) ]
, span
[ class "longDate" ]
[ text (Date.longView payment.date loggedData.translations) ]
]
Monthly ->
text ""
, div
[ class "cell delete" ]
[ if loggedData.me /= payment.userId
then
text ""
else
let dialogConfig =
{ className = "paymentDialog"
, title = getMessage "ConfirmPaymentDelete" loggedData.translations
, body = always <| text ""
, confirm = getMessage "Confirm" loggedData.translations
, confirmMsg = always <| Ok <| Msg.UpdateLoggedIn <| LoggedInMsg.DeletePayment payment.id
, undo = getMessage "Undo" loggedData.translations
}
in button
[ onClick (Msg.Dialog <| Dialog.Open dialogConfig) ]
[ FontAwesome.trash Color.chestnutRose 18 ]
]
]
|