diff options
Diffstat (limited to 'src/client/LoggedIn/Stat')
-rw-r--r-- | src/client/LoggedIn/Stat/View.elm | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/client/LoggedIn/Stat/View.elm b/src/client/LoggedIn/Stat/View.elm new file mode 100644 index 0000000..f57316a --- /dev/null +++ b/src/client/LoggedIn/Stat/View.elm @@ -0,0 +1,62 @@ +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 withMargin" ] + [ h1 [] [ text (getParamMessage [ Format.price loggedData.conf monthPaymentMean ] loggedData.translations "ByMonthsAndMean") ] + , 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 << Tuple.second) + |> 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 |