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