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
|
module Model.View.LoggedIn.Account
( Account
, IncomeEdition
, initAccount
, initIncomeEdition
, getCurrentIncome
, validateIncome
) where
import Result as Result exposing (Result(..))
import Dict
import Utils.Validation exposing (..)
import Utils.Dict exposing (mapValues)
import Model.Translations exposing (..)
import Model.Payer exposing (..)
import Model.User exposing (UserId)
type alias Account =
{ me : UserId
, payers : Payers
, visibleDetail : Bool
, incomeEdition : Maybe IncomeEdition
}
initAccount : UserId -> Payers -> Account
initAccount me payers =
{ me = me
, payers =
payers
|> mapValues
(\payer ->
{ payer | incomes = List.sortBy .creation payer.incomes }
)
, visibleDetail = False
, incomeEdition = Nothing
}
getCurrentIncome : Account -> Maybe Int
getCurrentIncome account =
case Dict.get account.me account.payers of
Just payer ->
payer.incomes
|> List.sortBy .creation
|> List.reverse
|> List.head
|> Maybe.map .amount
Nothing ->
Nothing
type alias IncomeEdition =
{ income : String
, error : Maybe String
}
initIncomeEdition : Int -> IncomeEdition
initIncomeEdition income =
{ income = toString income
, error = Nothing
}
validateIncome : String -> Translations -> Result String Int
validateIncome amount translations =
amount
|> validateNonEmpty (getMessage "IncomeRequired" translations)
|> flip Result.andThen (validateNumber (getMessage "IncomeMustBePositiveNumber" translations) (\number -> number > 0))
|