aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Model/View/LoggedIn/Account.elm
blob: 4638c8d70ac911cb8c3161f0bbdfdba98b47137b (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
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))