aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/Account/Model.elm
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/elm/LoggedIn/Home/Account/Model.elm')
-rw-r--r--src/client/elm/LoggedIn/Home/Account/Model.elm64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/client/elm/LoggedIn/Home/Account/Model.elm b/src/client/elm/LoggedIn/Home/Account/Model.elm
new file mode 100644
index 0000000..d8bf748
--- /dev/null
+++ b/src/client/elm/LoggedIn/Home/Account/Model.elm
@@ -0,0 +1,64 @@
+module LoggedIn.Home.Account.Model
+ ( Model
+ , IncomeEdition
+ , init
+ , initIncomeEdition
+ , getCurrentIncome
+ , validateIncome
+ ) where
+
+import Result as Result exposing (Result(..))
+import Dict
+import String
+
+import Utils.Dict exposing (mapValues)
+
+import Model.Translations exposing (..)
+import Model.Income exposing (..)
+import Model.User exposing (UserId)
+
+type alias Model =
+ { me : UserId
+ , incomes : Incomes
+ , visibleDetail : Bool
+ , incomeEdition : Maybe IncomeEdition
+ }
+
+init : UserId -> Incomes -> Model
+init me incomes =
+ { me = me
+ , incomes = incomes
+ , visibleDetail = False
+ , incomeEdition = Nothing
+ }
+
+getCurrentIncome : Model -> Maybe Int
+getCurrentIncome account =
+ account.incomes
+ |> Dict.filter (\_ income -> income.userId == account.me)
+ |> Dict.values
+ |> List.sortBy .creation
+ |> List.reverse
+ |> List.head
+ |> Maybe.map .amount
+
+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 =
+ case String.toInt amount of
+ Ok number ->
+ if number > 0
+ then Ok number
+ else Err <| getMessage "IncomeMustBePositiveNumber" translations
+ Err _ ->
+ Err <| getMessage "IncomeRequired" translations