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
117
118
119
|
module Update.LoggedIn
( updateLoggedIn
) where
import Date
import Dict
import Effects exposing (Effects)
import Task
import Server
import Model exposing (Model)
import Model.User exposing (UserId)
import Model.Payment exposing (..)
import Model.Action.LoggedInAction exposing (..)
import Model.Action.AccountAction as Account
import Model.Action.MonthlyAction as Monthly
import Model.Action.AddPaymentAction as AddPayment
import Model.View.LoggedInView exposing (..)
import Model.View.LoggedIn.AddPayment exposing (..)
import Update.LoggedIn.AddPayment exposing (updateAddPayment)
import Update.LoggedIn.Monthly exposing (updateMonthly)
import Update.LoggedIn.Account exposing (updateAccount)
updateLoggedIn : Model -> LoggedInAction -> LoggedInView -> (LoggedInView, Effects LoggedInAction)
updateLoggedIn model action loggedInView =
case action of
NoOp -> (loggedInView, Effects.none)
UpdateAdd addPaymentAction ->
( { loggedInView | add = updateAddPayment addPaymentAction loggedInView.add }
, Effects.none
)
UpdatePayments payments ->
( { loggedInView | payments = payments }
, Effects.none
)
AddPayment name cost frequency ->
( { loggedInView | add = updateAddPayment AddPayment.WaitingServer loggedInView.add }
, Server.addPayment name cost frequency
|> flip Task.onError (always <| Task.succeed NoOp)
|> Effects.task
)
ValidateAddPayment paymentId name cost frequency ->
let newPayment = Payment paymentId (Date.fromTime model.currentTime) name cost loggedInView.account.me
newAdd = initAddPayment frequency
in case frequency of
Punctual ->
let (newAccount, accountEffects) =
updateAccount (Account.UpdatePayer loggedInView.account.me model.currentTime cost) loggedInView.account
in ( { loggedInView
| currentPage = 1
, add = newAdd
, account = newAccount
, payments = newPayment :: loggedInView.payments
, paymentsCount = loggedInView.paymentsCount + 1
}
, Effects.map UpdateAccount accountEffects
)
Monthly ->
( { loggedInView
| add = newAdd
, monthly = updateMonthly (Monthly.AddPayment newPayment) loggedInView.monthly
}
, Effects.none
)
ToggleEdit id ->
( { loggedInView | paymentEdition = if loggedInView.paymentEdition == Just id then Nothing else Just id }
, Effects.none
)
DeletePayment payment frequency ->
( loggedInView
, Server.deletePayment payment frequency
|> flip Task.onError (always <| Task.succeed NoOp)
|> Effects.task
)
ValidateDeletePayment payment frequency ->
case frequency of
Monthly ->
( { loggedInView
| monthly = updateMonthly (Monthly.DeletePayment payment) loggedInView.monthly
}
, Effects.none
)
Punctual ->
let (newAccount, accountEffects) =
updateAccount (Account.UpdatePayer payment.userId (Date.toTime payment.creation) -payment.cost) loggedInView.account
in ( { loggedInView
| account = newAccount
, payments = deletePayment payment.id loggedInView.payments
, paymentsCount = loggedInView.paymentsCount - 1
}
, Effects.map UpdateAccount accountEffects
)
UpdatePage page ->
( { loggedInView | currentPage = page }
, Effects.none
)
UpdateMonthly monthlyAction ->
( { loggedInView | monthly = updateMonthly monthlyAction loggedInView.monthly }
, Effects.none
)
UpdateAccount accountAction ->
let (newAccount, accountEffects) = updateAccount accountAction loggedInView.account
in ( { loggedInView | account = newAccount }
, Effects.map UpdateAccount accountEffects
)
|