module LoggedIn.Stat.View ( view ) where import Date exposing (Month) import Dict import String import Html exposing (..) import Html.Attributes exposing (..) import LoggedData exposing (LoggedData) import Model.Payment as Payment exposing (Payments) import Model.Conf exposing (Conf) import Model.Translations exposing (getMessage) import LoggedIn.View.Format as Format import LoggedIn.View.Date as Date import View.Plural exposing (plural) import LoggedIn.View.Format as Format import Utils.Tuple as Tuple view : LoggedData -> Html view loggedData = div [ class "stat" ] [ h1 [] [ text (getMessage "Overall" loggedData.translations) ] , paymentsDetail loggedData (Payment.punctual loggedData.payments) , h1 [] [ text (getMessage "ByMonths" loggedData.translations) ] , monthsDetail loggedData ] paymentsDetail : LoggedData -> Payments -> Html paymentsDetail loggedData payments = ul [] [ li [] [ let single = getMessage "Payment" loggedData.translations multiple = getMessage "Payments" loggedData.translations in text <| plural (List.length payments) single multiple ] , li [] [ text (paymentsSum loggedData.conf payments) , text " − " , text <| totalPayments loggedData ] ] totalPayments : LoggedData -> String totalPayments loggedData = String.join ", " ( loggedData.users |> Dict.toList |> List.map (Tuple.mapFst (\userId -> Payment.totalPayments (always True) userId loggedData.payments)) |> List.sortBy fst |> List.map (\(sum, user) -> String.concat [ Format.price loggedData.conf sum , " " , getMessage "By" loggedData.translations , " " , user.name ] ) ) monthsDetail : LoggedData -> Html monthsDetail loggedData = ul [] ( Payment.punctual loggedData.payments |> Payment.groupAndSortByMonth |> List.map (monthDetail loggedData) ) monthDetail : LoggedData -> ((Month, Int), Payments) -> Html monthDetail loggedData ((month, year), payments) = li [] [ text (Date.renderMonth 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