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 View.Date as Date import LoggedIn.View.Format as Format import View.Color as Color import LoggedIn.Income.Table as Table view : LoggedData -> Html Msg view loggedData = 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 ] 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 ] ]