aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Model/View/LoggedIn
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/elm/Model/View/LoggedIn')
-rw-r--r--src/client/elm/Model/View/LoggedIn/Account.elm67
-rw-r--r--src/client/elm/Model/View/LoggedIn/Add.elm43
-rw-r--r--src/client/elm/Model/View/LoggedIn/Edition.elm7
-rw-r--r--src/client/elm/Model/View/LoggedIn/Monthly.elm17
4 files changed, 134 insertions, 0 deletions
diff --git a/src/client/elm/Model/View/LoggedIn/Account.elm b/src/client/elm/Model/View/LoggedIn/Account.elm
new file mode 100644
index 0000000..2bb3ae7
--- /dev/null
+++ b/src/client/elm/Model/View/LoggedIn/Account.elm
@@ -0,0 +1,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))
diff --git a/src/client/elm/Model/View/LoggedIn/Add.elm b/src/client/elm/Model/View/LoggedIn/Add.elm
new file mode 100644
index 0000000..5598084
--- /dev/null
+++ b/src/client/elm/Model/View/LoggedIn/Add.elm
@@ -0,0 +1,43 @@
+module Model.View.LoggedIn.Add
+ ( AddPayment
+ , Frequency(..)
+ , initAddPayment
+ , validateName
+ , validateCost
+ ) where
+
+import Result as Result exposing (Result(..))
+
+import Utils.Validation exposing (..)
+
+import Model.Translations exposing (..)
+
+type alias AddPayment =
+ { name : String
+ , nameError : Maybe String
+ , cost : String
+ , costError : Maybe String
+ , frequency : Frequency
+ }
+
+initAddPayment : Frequency -> AddPayment
+initAddPayment frequency =
+ { name = ""
+ , nameError = Nothing
+ , cost = ""
+ , costError = Nothing
+ , frequency = frequency
+ }
+
+validateName : String -> Translations -> Result String String
+validateName name translations =
+ name
+ |> validateNonEmpty (getMessage "CategoryRequired" translations)
+
+validateCost : String -> Translations -> Result String Int
+validateCost cost translations =
+ cost
+ |> validateNonEmpty (getMessage "CostRequired" translations)
+ |> flip Result.andThen (validateNumber (getMessage "CostMustBeNonNullNumber" translations) ((/=) 0))
+
+type Frequency = Punctual | Monthly
diff --git a/src/client/elm/Model/View/LoggedIn/Edition.elm b/src/client/elm/Model/View/LoggedIn/Edition.elm
new file mode 100644
index 0000000..da6d7b0
--- /dev/null
+++ b/src/client/elm/Model/View/LoggedIn/Edition.elm
@@ -0,0 +1,7 @@
+module Model.View.LoggedIn.Edition
+ ( Edition
+ ) where
+
+import Model.Payment exposing (PaymentId)
+
+type alias Edition = PaymentId
diff --git a/src/client/elm/Model/View/LoggedIn/Monthly.elm b/src/client/elm/Model/View/LoggedIn/Monthly.elm
new file mode 100644
index 0000000..3c6f66a
--- /dev/null
+++ b/src/client/elm/Model/View/LoggedIn/Monthly.elm
@@ -0,0 +1,17 @@
+module Model.View.LoggedIn.Monthly
+ ( Monthly
+ , initMonthly
+ ) where
+
+import Model.Payment exposing (Payments)
+
+type alias Monthly =
+ { payments : Payments
+ , visibleDetail : Bool
+ }
+
+initMonthly : Payments -> Monthly
+initMonthly payments =
+ { payments = payments
+ , visibleDetail = False
+ }