aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Update/LoggedIn.elm
blob: 155314179f9d82c16f6a0562d94ac092bfb7efe7 (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
module Update.LoggedIn
  ( updateLoggedIn
  ) where

import Date
import Dict

import Model exposing (Model)
import Model.User exposing (UserId)
import Model.Payment exposing (..)
import Model.Action.LoggedInAction exposing (..)
import Model.Action.AccountAction exposing (..)
import Model.Action.MonthlyAction as Monthly
import Model.View.LoggedInView exposing (..)
import Model.View.LoggedIn.AddPayment exposing (..)

import Update.LoggedIn.AddPayment exposing (updateAddPayment)
import Update.LoggedIn.Monthly exposing (updateMonthly)
import Update.LoggedIn.Account exposing (updateAccount)

updateLoggedIn : Model -> LoggedInAction -> LoggedInView -> LoggedInView
updateLoggedIn model action loggedInView =
  case action of
    UpdateAdd addPaymentAction ->
      { loggedInView | add = updateAddPayment addPaymentAction loggedInView.add }
    UpdatePayments payments ->
      { loggedInView | payments = payments }
    AddPayment paymentId name cost ->
      let newPayment = Payment paymentId (Date.fromTime model.currentTime) name cost loggedInView.account.me
      in  { loggedInView
          | currentPage = 1
          , add = initAddPayment Punctual
          , account = updateAccount (UpdatePayer loggedInView.account.me model.currentTime cost) loggedInView.account
          , payments = newPayment :: loggedInView.payments
          , 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  updateMonthly (Monthly.AddPayment payment) loggedInView.monthly
      }
    ToggleEdit id ->
      { loggedInView | paymentEdition = if loggedInView.paymentEdition == Just id then Nothing else Just id }
    DeletePayment payment ->
      { loggedInView
      | account = updateAccount (UpdatePayer payment.userId (Date.toTime payment.creation) -payment.cost) loggedInView.account
      , payments = deletePayment payment.id loggedInView.payments
      , paymentsCount = loggedInView.paymentsCount - 1
      }
    UpdatePage page ->
      { loggedInView
      | currentPage = page
      }
    UpdateMonthly monthlyAction ->
      { loggedInView | monthly = updateMonthly monthlyAction loggedInView.monthly }
    UpdateAccount accountAction ->
      { loggedInView | account = updateAccount accountAction loggedInView.account }