aboutsummaryrefslogtreecommitdiff
path: root/src/client/LoggedIn/Income/View.elm
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/LoggedIn/Income/View.elm')
-rw-r--r--src/client/LoggedIn/Income/View.elm108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/client/LoggedIn/Income/View.elm b/src/client/LoggedIn/Income/View.elm
new file mode 100644
index 0000000..00a1646
--- /dev/null
+++ b/src/client/LoggedIn/Income/View.elm
@@ -0,0 +1,108 @@
+module LoggedIn.Income.View exposing
+ ( view
+ )
+
+import Dict
+import Date
+import Time exposing (Time)
+import Task
+
+import FontAwesome
+
+import Html exposing (..)
+import Html.Events exposing (..)
+import Html.Attributes exposing (..)
+
+import Form exposing (Form)
+import View.Form as Form
+import View.Events exposing (onSubmitPrevDefault)
+
+import Dialog
+import Dialog.AddIncome.Model as AddIncome
+import Dialog.AddIncome.View as AddIncome
+
+import Msg exposing (Msg)
+
+import LoggedData exposing (LoggedData)
+
+import Model.Income exposing (IncomeId, Income, userCumulativeIncomeSince)
+import Model.Translations exposing (getMessage, getParamMessage)
+import Model.Payer exposing (useIncomesFrom)
+import Model.User exposing (UserId, User)
+import Model.View as View
+import LoggedIn.Income.Model as Income
+
+import LoggedIn.Msg as LoggedInMsg
+import LoggedIn.Income.Msg as IncomeMsg
+
+import View.Date as Date
+import LoggedIn.View.Format as Format
+import View.Color as Color
+import LoggedIn.Income.View.Table as Table
+
+view : LoggedData -> Income.Model -> Html Msg
+view loggedData incomeModel =
+ div
+ [ class "income" ]
+ [ div
+ [ class "withMargin" ]
+ [ case useIncomesFrom loggedData.users loggedData.incomes loggedData.payments of
+ Just since -> cumulativeIncomesView loggedData since
+ Nothing -> text ""
+ , div
+ [ class "titleButton" ]
+ [ h1 [] [ text <| getMessage loggedData.translations "MonthlyNetIncomes" ]
+ , AddIncome.button
+ loggedData
+ (AddIncome.initialAdd loggedData.translations (Date.fromTime loggedData.currentTime))
+ "AddIncome"
+ (text (getMessage loggedData.translations "AddIncome"))
+ Nothing
+ ]
+ ]
+ , Table.view loggedData incomeModel
+ ]
+
+cumulativeIncomesView : LoggedData -> Time -> Html Msg
+cumulativeIncomesView loggedData since =
+ let longDate = Date.longView (Date.fromTime since) loggedData.translations
+ in div
+ []
+ [ h1 [] [ text <| getParamMessage [longDate] loggedData.translations "CumulativeIncomesSince" ]
+ , ul
+ []
+ ( Dict.toList loggedData.users
+ |> List.map (\(userId, user) ->
+ (user.name, userCumulativeIncomeSince loggedData.currentTime since loggedData.incomes userId)
+ )
+ |> List.sortBy Tuple.second
+ |> List.map (\(userName, cumulativeIncome) ->
+ li
+ []
+ [ text userName
+ , text " − "
+ , text <| Format.price loggedData.conf cumulativeIncome
+ ]
+ )
+ )
+ ]
+
+incomeView : LoggedData -> (IncomeId, Income) -> Html Msg
+incomeView loggedData (incomeId, income) =
+ li
+ []
+ [ text <| Date.shortView (Date.fromTime income.time) loggedData.translations
+ , text " − "
+ , text <| Format.price loggedData.conf income.amount
+ , let dialogConfig =
+ { className = "deleteIncomeDialog"
+ , title = getMessage loggedData.translations "ConfirmIncomeDelete"
+ , body = always <| text ""
+ , confirm = getMessage loggedData.translations "Confirm"
+ , confirmMsg = always <| Msg.Dialog <| Dialog.UpdateAndClose <| Msg.DeleteIncome incomeId
+ , undo = getMessage loggedData.translations "Undo"
+ }
+ in button
+ [ onClick (Msg.Dialog <| Dialog.Open dialogConfig) ]
+ [ FontAwesome.trash Color.chestnutRose 14 ]
+ ]