aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Update
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/elm/Update')
-rw-r--r--src/client/elm/Update/LoggedIn.elm68
-rw-r--r--src/client/elm/Update/LoggedIn/Account.elm64
-rw-r--r--src/client/elm/Update/LoggedIn/Add.elm29
-rw-r--r--src/client/elm/Update/LoggedIn/Monthly.elm27
-rw-r--r--src/client/elm/Update/SignIn.elm15
5 files changed, 203 insertions, 0 deletions
diff --git a/src/client/elm/Update/LoggedIn.elm b/src/client/elm/Update/LoggedIn.elm
new file mode 100644
index 0000000..e477094
--- /dev/null
+++ b/src/client/elm/Update/LoggedIn.elm
@@ -0,0 +1,68 @@
+module Update.LoggedIn
+ ( LoggedAction(..)
+ , updateLoggedIn
+ ) where
+
+import Date
+import Dict
+
+import Model exposing (Model)
+import Model.User exposing (UserId)
+import Model.Payment exposing (..)
+import Model.View.LoggedInView exposing (..)
+import Model.View.LoggedIn.Add exposing (..)
+
+import Update.LoggedIn.Add exposing (..)
+import Update.LoggedIn.Monthly as UM
+import Update.LoggedIn.Account as UA
+
+type LoggedAction =
+ UpdateAdd AddPaymentAction
+ | UpdatePayments Payments
+ | AddPayment UserId String Int Payments
+ | AddMonthlyPayment PaymentId String Int
+ | ToggleEdit PaymentId
+ | DeletePayment Payment Payments
+ | UpdatePage Int Payments
+ | UpdateMonthly UM.MonthlyAction
+ | UpdateAccount UA.AccountAction
+
+updateLoggedIn : Model -> LoggedAction -> LoggedInView -> LoggedInView
+updateLoggedIn model action loggedInView =
+ case action of
+ UpdateAdd addPaymentAction ->
+ { loggedInView | add <- updateAddPayment addPaymentAction loggedInView.add }
+ UpdatePayments payments ->
+ { loggedInView | payments <- payments }
+ AddPayment userId name cost payments ->
+ { loggedInView
+ | payments <- payments
+ , currentPage <- 1
+ , add <- initAddPayment Punctual
+ , account <- UA.updateAccount (UA.UpdatePayer userId model.currentTime cost) loggedInView.account
+ , paymentsCount <- loggedInView.paymentsCount + 1
+ }
+ AddMonthlyPayment id name cost ->
+ { loggedInView
+ | add <- initAddPayment Monthly
+ , monthly <-
+ let payment = Payment id (Date.fromTime model.currentTime) name cost loggedInView.account.me
+ in UM.updateMonthly (UM.AddPayment payment) loggedInView.monthly
+ }
+ ToggleEdit id ->
+ { loggedInView | paymentEdition <- if loggedInView.paymentEdition == Just id then Nothing else Just id }
+ DeletePayment payment payments ->
+ { loggedInView
+ | payments <- payments
+ , account <- UA.updateAccount (UA.UpdatePayer payment.userId (Date.toTime payment.creation) -payment.cost) loggedInView.account
+ , paymentsCount <- loggedInView.paymentsCount - 1
+ }
+ UpdatePage page payments ->
+ { loggedInView
+ | currentPage <- page
+ , payments <- payments
+ }
+ UpdateMonthly monthlyAction ->
+ { loggedInView | monthly <- UM.updateMonthly monthlyAction loggedInView.monthly }
+ UpdateAccount accountAction ->
+ { loggedInView | account <- UA.updateAccount accountAction loggedInView.account }
diff --git a/src/client/elm/Update/LoggedIn/Account.elm b/src/client/elm/Update/LoggedIn/Account.elm
new file mode 100644
index 0000000..cf4c834
--- /dev/null
+++ b/src/client/elm/Update/LoggedIn/Account.elm
@@ -0,0 +1,64 @@
+module Update.LoggedIn.Account
+ ( AccountAction(..)
+ , updateAccount
+ ) where
+
+import Maybe
+import Time exposing (Time)
+import Dict
+
+import Model.User exposing (UserId)
+import Model.Payer exposing (..)
+import Model.View.LoggedIn.Account exposing (..)
+
+import Utils.Maybe exposing (isJust)
+
+type AccountAction =
+ ToggleDetail
+ | UpdatePayer UserId Time Int
+ | ToggleIncomeEdition
+ | UpdateIncomeEdition String
+ | UpdateEditionError String
+ | UpdateIncome Time Int
+
+updateAccount : AccountAction -> Account -> Account
+updateAccount action account =
+ case action of
+ ToggleDetail ->
+ { account | visibleDetail <- not account.visibleDetail }
+ UpdatePayer userId creation amountDiff ->
+ { account | payers <- updatePayers account.payers userId creation amountDiff }
+ ToggleIncomeEdition ->
+ { account | incomeEdition <-
+ if isJust account.incomeEdition
+ then Nothing
+ else Just (initIncomeEdition (Maybe.withDefault 0 (getCurrentIncome account)))
+ }
+ UpdateIncomeEdition income ->
+ case account.incomeEdition of
+ Just incomeEdition ->
+ { account | incomeEdition <- Just { incomeEdition | income <- income } }
+ Nothing ->
+ account
+ UpdateEditionError error ->
+ case account.incomeEdition of
+ Just incomeEdition ->
+ { account | incomeEdition <- Just { incomeEdition | error <- Just error } }
+ Nothing ->
+ account
+ UpdateIncome currentTime amount ->
+ { account
+ | payers <-
+ account.payers
+ |> Dict.update account.me (\mbPayer ->
+ case mbPayer of
+ Just payer ->
+ Just
+ { payer
+ | incomes <- payer.incomes ++ [{ creation = currentTime, amount = amount }]
+ }
+ Nothing ->
+ Nothing
+ )
+ , incomeEdition <- Nothing
+ }
diff --git a/src/client/elm/Update/LoggedIn/Add.elm b/src/client/elm/Update/LoggedIn/Add.elm
new file mode 100644
index 0000000..1f28997
--- /dev/null
+++ b/src/client/elm/Update/LoggedIn/Add.elm
@@ -0,0 +1,29 @@
+module Update.LoggedIn.Add
+ ( AddPaymentAction(..)
+ , updateAddPayment
+ ) where
+
+import Model.View.LoggedIn.Add exposing (..)
+
+type AddPaymentAction =
+ UpdateName String
+ | UpdateCost String
+ | AddError (Maybe String) (Maybe String)
+ | ToggleFrequency
+
+updateAddPayment : AddPaymentAction -> AddPayment -> AddPayment
+updateAddPayment action addPayment =
+ case action of
+ UpdateName name ->
+ { addPayment | name <- name }
+ UpdateCost cost ->
+ { addPayment | cost <- cost }
+ AddError nameError costError ->
+ { addPayment
+ | nameError <- nameError
+ , costError <- costError
+ }
+ ToggleFrequency ->
+ { addPayment
+ | frequency <- if addPayment.frequency == Punctual then Monthly else Punctual
+ }
diff --git a/src/client/elm/Update/LoggedIn/Monthly.elm b/src/client/elm/Update/LoggedIn/Monthly.elm
new file mode 100644
index 0000000..1379323
--- /dev/null
+++ b/src/client/elm/Update/LoggedIn/Monthly.elm
@@ -0,0 +1,27 @@
+module Update.LoggedIn.Monthly
+ ( MonthlyAction(..)
+ , updateMonthly
+ ) where
+
+import Model.Payment exposing (Payment, PaymentId)
+import Model.View.LoggedIn.Monthly exposing (..)
+
+type MonthlyAction =
+ ToggleDetail
+ | AddPayment Payment
+ | DeletePayment PaymentId
+
+updateMonthly : MonthlyAction -> Monthly -> Monthly
+updateMonthly action monthly =
+ case action of
+ ToggleDetail ->
+ { monthly | visibleDetail <- not monthly.visibleDetail }
+ AddPayment payment ->
+ { monthly
+ | payments <- payment :: monthly.payments
+ , visibleDetail <- True
+ }
+ DeletePayment id ->
+ { monthly
+ | payments <- List.filter (\payment -> payment.id /= id) monthly.payments
+ }
diff --git a/src/client/elm/Update/SignIn.elm b/src/client/elm/Update/SignIn.elm
new file mode 100644
index 0000000..cabe4cb
--- /dev/null
+++ b/src/client/elm/Update/SignIn.elm
@@ -0,0 +1,15 @@
+module Update.SignIn
+ ( SignInAction(..)
+ , updateSignIn
+ ) where
+
+import Model.View.SignInView exposing (..)
+
+type SignInAction =
+ ErrorLogin String
+
+updateSignIn : SignInAction -> SignInView -> SignInView
+updateSignIn action signInView =
+ case action of
+ ErrorLogin message ->
+ { signInView | result <- Just (Err message) }