module LoggedIn.Stat.View exposing ( view ) import Date exposing (Month) import Html exposing (..) import Html.Attributes exposing (..) import LoggedData exposing (LoggedData) import Msg exposing (Msg) import Model.Payment as Payment exposing (Payments) import Model.Conf exposing (Conf) import Model.Translations exposing (getMessage, getParamMessage) import LoggedIn.View.Format as Format import View.Date as Date import View.Plural exposing (plural) import Utils.List as List view : LoggedData -> Html Msg view loggedData = let paymentsByMonth = Payment.groupAndSortByMonth (Payment.punctual loggedData.payments) monthPaymentMean = getMonthPaymentMean loggedData paymentsByMonth in div [ class "stat" ] [ h1 [] [ text (getParamMessage [ Format.price loggedData.conf monthPaymentMean ] "ByMonthsAndMean" loggedData.translations) ] , ul [] ( List.map (monthDetail loggedData) paymentsByMonth) ] getMonthPaymentMean : LoggedData -> List ((Month, Int), Payments) -> Int getMonthPaymentMean loggedData paymentsByMonth = paymentsByMonth |> List.filter (\((month, year), _) -> let currentDate = Date.fromTime loggedData.currentTime in not (Date.month currentDate == month && Date.year currentDate == year) ) |> List.map (List.sum << List.map .cost << snd) |> List.mean monthDetail : LoggedData -> ((Month, Int), Payments) -> Html Msg monthDetail loggedData ((month, year), payments) = li [] [ text (Date.monthView loggedData.translations month) , text " " , text (toString year) , text " − " , text (paymentsSum loggedData.conf payments) ] paymentsSum : Conf -> Payments -> String paymentsSum conf payments = payments |> List.map .cost |> List.sum |> Format.price conf