From fb5629d7f705b7e80dcf1852da58d2864c2b0d25 Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 19 Jun 2016 01:00:53 +0200 Subject: Show payment count and sum right after search --- src/client/elm/LoggedIn/Home/Account/View.elm | 42 ---------------------- src/client/elm/LoggedIn/Home/Model.elm | 1 + src/client/elm/LoggedIn/Home/Search/View.elm | 50 ++++++++++++++++++++++++++ src/client/elm/LoggedIn/Home/Update.elm | 5 ++- src/client/elm/LoggedIn/Home/View.elm | 20 ++++------- src/client/elm/LoggedIn/Home/View/Monthly.elm | 2 +- src/client/elm/LoggedIn/Home/View/Paging.elm | 4 +-- src/client/elm/LoggedIn/Home/View/Search.elm | 26 -------------- src/client/elm/LoggedIn/Stat/Account/View.elm | 38 ++++++++++++++++++++ src/client/elm/LoggedIn/Stat/View.elm | 13 ++++--- src/client/elm/Utils/Form.elm | 11 ++++++ src/client/elm/View/Plural.elm | 10 ++++-- src/server/Design/LoggedIn/Home.hs | 20 +++++------ src/server/Design/LoggedIn/Home/Add.hs | 1 - src/server/Design/LoggedIn/Home/Expandables.hs | 27 -------------- src/server/Design/LoggedIn/Home/Monthly.hs | 23 ++++++++++++ src/server/Design/LoggedIn/Home/Search.hs | 11 +++--- src/server/Design/LoggedIn/Stat.hs | 2 ++ src/server/Model/Message/Key.hs | 2 ++ src/server/Model/Message/Translations.hs | 32 +++++++++++------ 20 files changed, 191 insertions(+), 149 deletions(-) delete mode 100644 src/client/elm/LoggedIn/Home/Account/View.elm create mode 100644 src/client/elm/LoggedIn/Home/Search/View.elm delete mode 100644 src/client/elm/LoggedIn/Home/View/Search.elm create mode 100644 src/client/elm/LoggedIn/Stat/Account/View.elm create mode 100644 src/client/elm/Utils/Form.elm delete mode 100644 src/server/Design/LoggedIn/Home/Expandables.hs create mode 100644 src/server/Design/LoggedIn/Home/Monthly.hs (limited to 'src') diff --git a/src/client/elm/LoggedIn/Home/Account/View.elm b/src/client/elm/LoggedIn/Home/Account/View.elm deleted file mode 100644 index fdc1941..0000000 --- a/src/client/elm/LoggedIn/Home/Account/View.elm +++ /dev/null @@ -1,42 +0,0 @@ -module LoggedIn.Home.Account.View exposing - ( view - ) - -import Html exposing (..) -import Html.Attributes exposing (..) - -import Msg exposing (Msg) - -import LoggedData exposing (LoggedData) - -import LoggedIn.Home.Model as HomeModel -import LoggedIn.View.Format as Format - -import Model exposing (Model) -import Model.User exposing (getUserName) -import Model.Payer exposing (..) - -view : LoggedData -> HomeModel.Model -> Html Msg -view loggedData homeModel = - div - [ class "account" ] - [ div - [ class "header" ] - (List.map (exceedingPayer loggedData homeModel) (getOrderedExceedingPayers loggedData.currentTime loggedData.users loggedData.incomes loggedData.payments)) - ] - -exceedingPayer : LoggedData -> HomeModel.Model -> ExceedingPayer -> Html Msg -exceedingPayer loggedData homeModel payer = - div - [ class "exceedingPayer" ] - [ span - [ class "userName" ] - [ payer.userId - |> getUserName loggedData.users - |> Maybe.withDefault "−" - |> text - ] - , span - [ class "amount" ] - [ text ("+ " ++ (Format.price loggedData.conf payer.amount)) ] - ] diff --git a/src/client/elm/LoggedIn/Home/Model.elm b/src/client/elm/LoggedIn/Home/Model.elm index a653995..6b29d8c 100644 --- a/src/client/elm/LoggedIn/Home/Model.elm +++ b/src/client/elm/LoggedIn/Home/Model.elm @@ -1,5 +1,6 @@ module LoggedIn.Home.Model exposing ( Model + , Search , init ) diff --git a/src/client/elm/LoggedIn/Home/Search/View.elm b/src/client/elm/LoggedIn/Home/Search/View.elm new file mode 100644 index 0000000..f06377d --- /dev/null +++ b/src/client/elm/LoggedIn/Home/Search/View.elm @@ -0,0 +1,50 @@ +module LoggedIn.Home.Search.View exposing + ( view + ) + +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (..) +import Html.App as Html + +import Form exposing (Form) +import View.Form as Form + +import Msg exposing (Msg) +import LoggedIn.Msg as LoggedInMsg +import LoggedIn.Home.Msg as HomeMsg + +import LoggedData exposing (LoggedData) +import LoggedIn.Home.Model as HomeModel +import Model.Translations exposing (getParamMessage) +import Model.Conf exposing (Conf) +import Model.Payment exposing (Payments) + +import LoggedIn.View.Format as Format +import View.Plural exposing (plural) + +view : LoggedData -> HomeModel.Model -> Payments -> Html Msg +view loggedData { search } payments = + Html.div + [ class "search" ] + [ searchForm loggedData search + , paymentsStat loggedData payments + ] + +searchForm : LoggedData -> Form String HomeModel.Search -> Html Msg +searchForm loggedData search = + let htmlMap = Html.map (Msg.UpdateLoggedIn << LoggedInMsg.HomeMsg << HomeMsg.SearchMsg) + in Form.textInput loggedData.translations search htmlMap "searchText" + +paymentsStat : LoggedData -> Payments -> Html Msg +paymentsStat loggedData payments = + let count = plural loggedData.translations (List.length payments) "Payment" "Payments" + sum = paymentsSum loggedData.conf payments + in text <| getParamMessage [ count, sum ] "Worth" loggedData.translations + +paymentsSum : Conf -> Payments -> String +paymentsSum conf payments = + payments + |> List.map .cost + |> List.sum + |> Format.price conf diff --git a/src/client/elm/LoggedIn/Home/Update.elm b/src/client/elm/LoggedIn/Home/Update.elm index 302509f..078036d 100644 --- a/src/client/elm/LoggedIn/Home/Update.elm +++ b/src/client/elm/LoggedIn/Home/Update.elm @@ -45,7 +45,10 @@ update loggedData action homeModel = HomeMsg.SearchMsg formMsg -> ( { homeModel | search = Form.update formMsg homeModel.search - , currentPage = 1 + , currentPage = + case formMsg of + Form.Input "searchText" _ -> 1 + _ -> homeModel.currentPage } , Cmd.none ) diff --git a/src/client/elm/LoggedIn/Home/View.elm b/src/client/elm/LoggedIn/Home/View.elm index 5ed54b9..82ec8a3 100644 --- a/src/client/elm/LoggedIn/Home/View.elm +++ b/src/client/elm/LoggedIn/Home/View.elm @@ -7,6 +7,7 @@ import Html.Attributes exposing (..) import Date import Form +import Utils.Form as Form import Msg exposing (Msg) @@ -14,30 +15,21 @@ import LoggedData exposing (LoggedData) import Model.Payment as Payment import LoggedIn.Home.Model as LoggedInModel -import LoggedIn.Home.Account.View as AccountView +import LoggedIn.Home.Search.View as SearchView import LoggedIn.Home.AddPayment.View as AddPaymentView import LoggedIn.Home.View.Monthly as MonthlyView -import LoggedIn.Home.View.Search exposing (paymentsSearch) import LoggedIn.Home.View.Table exposing (paymentsTable) import LoggedIn.Home.View.Paging exposing (paymentsPaging) view : LoggedData -> LoggedInModel.Model -> Html Msg view loggedData loggedIn = - let searchText = - Form.getFieldAsString "searchText" loggedIn.search - |> .value - |> Maybe.withDefault "" - punctualPayments = Payment.sortedFiltredPunctual searchText loggedData.payments + let punctualPayments = Payment.sortedFiltredPunctual (Form.fieldAsText loggedIn.search "searchText") loggedData.payments in div [ class "home" ] [ AddPaymentView.view loggedData loggedIn - , div - [ class "expandables" ] - [ AccountView.view loggedData loggedIn - , MonthlyView.view loggedData loggedIn - ] - , paymentsSearch loggedData loggedIn + , MonthlyView.view loggedData loggedIn + , SearchView.view loggedData loggedIn punctualPayments , paymentsTable loggedData loggedIn punctualPayments - , paymentsPaging punctualPayments loggedIn + , paymentsPaging loggedIn punctualPayments ] diff --git a/src/client/elm/LoggedIn/Home/View/Monthly.elm b/src/client/elm/LoggedIn/Home/View/Monthly.elm index 398059c..20dda19 100644 --- a/src/client/elm/LoggedIn/Home/View/Monthly.elm +++ b/src/client/elm/LoggedIn/Home/View/Monthly.elm @@ -33,7 +33,7 @@ view loggedData homeModel = else div [ classList - [ ("monthlyPayments", True) + [ ("monthly", True) , ("detail", homeModel.monthlyDetail) ] ] diff --git a/src/client/elm/LoggedIn/Home/View/Paging.elm b/src/client/elm/LoggedIn/Home/View/Paging.elm index fb78810..da69232 100644 --- a/src/client/elm/LoggedIn/Home/View/Paging.elm +++ b/src/client/elm/LoggedIn/Home/View/Paging.elm @@ -22,8 +22,8 @@ import Model.Payment as Payment exposing (Payments, perPage) showedPages : Int showedPages = 5 -paymentsPaging : Payments -> HomeModel.Model -> Html Msg -paymentsPaging payments homeModel = +paymentsPaging : HomeModel.Model -> Payments -> Html Msg +paymentsPaging homeModel payments = let maxPage = ceiling (toFloat (List.length payments) / toFloat perPage) pages = truncatePages homeModel.currentPage [1..maxPage] in if maxPage == 1 diff --git a/src/client/elm/LoggedIn/Home/View/Search.elm b/src/client/elm/LoggedIn/Home/View/Search.elm deleted file mode 100644 index 62db1b2..0000000 --- a/src/client/elm/LoggedIn/Home/View/Search.elm +++ /dev/null @@ -1,26 +0,0 @@ -module LoggedIn.Home.View.Search exposing - ( paymentsSearch - ) - -import Html exposing (..) -import Html.Attributes exposing (..) -import Html.Events exposing (..) -import Html.App as Html - -import Form exposing (Form) -import View.Form as Form - -import Msg exposing (Msg) -import LoggedIn.Msg as LoggedInMsg -import LoggedIn.Home.Msg as HomeMsg - -import LoggedData exposing (LoggedData) -import LoggedIn.Home.Model as HomeModel -import Model.Translations exposing (getMessage) - -paymentsSearch : LoggedData -> HomeModel.Model -> Html Msg -paymentsSearch loggedData { search } = - let htmlMap = Html.map (Msg.UpdateLoggedIn << LoggedInMsg.HomeMsg << HomeMsg.SearchMsg) - in Html.div - [ class "search" ] - [ Form.textInput loggedData.translations search htmlMap "searchText" ] diff --git a/src/client/elm/LoggedIn/Stat/Account/View.elm b/src/client/elm/LoggedIn/Stat/Account/View.elm new file mode 100644 index 0000000..3eb5ef4 --- /dev/null +++ b/src/client/elm/LoggedIn/Stat/Account/View.elm @@ -0,0 +1,38 @@ +module LoggedIn.Stat.Account.View exposing + ( view + ) + +import Html exposing (..) +import Html.Attributes exposing (..) + +import Msg exposing (Msg) + +import LoggedData exposing (LoggedData) + +import LoggedIn.View.Format as Format + +import Model exposing (Model) +import Model.User exposing (getUserName) +import Model.Payer exposing (..) + +view : LoggedData -> Html Msg +view loggedData = + ul + [ class "exceedingPayers" ] + (List.map (exceedingPayer loggedData) (getOrderedExceedingPayers loggedData.currentTime loggedData.users loggedData.incomes loggedData.payments)) + +exceedingPayer : LoggedData -> ExceedingPayer -> Html Msg +exceedingPayer loggedData payer = + li + [] + [ span + [ class "userName" ] + [ payer.userId + |> getUserName loggedData.users + |> Maybe.withDefault "−" + |> text + ] + , span + [ class "amount" ] + [ text ("+ " ++ (Format.price loggedData.conf payer.amount)) ] + ] diff --git a/src/client/elm/LoggedIn/Stat/View.elm b/src/client/elm/LoggedIn/Stat/View.elm index bb1ec84..f99ef0e 100644 --- a/src/client/elm/LoggedIn/Stat/View.elm +++ b/src/client/elm/LoggedIn/Stat/View.elm @@ -19,9 +19,9 @@ import Model.Translations exposing (getMessage, getParamMessage) import LoggedIn.View.Format as Format import LoggedIn.View.Date as Date - import View.Plural exposing (plural) -import LoggedIn.View.Format as Format + +import LoggedIn.Stat.Account.View as AccountView import Utils.Tuple as Tuple import Utils.List as List @@ -30,7 +30,9 @@ view : LoggedData -> Html Msg view loggedData = div [ class "stat" ] - [ h1 [] [ text (getMessage "Overall" loggedData.translations) ] + [ h1 [] [ text (getMessage "Balance" loggedData.translations) ] + , AccountView.view loggedData + , h1 [] [ text (getMessage "Overall" loggedData.translations) ] , paymentsDetail loggedData (Payment.punctual loggedData.payments) , h1 [] [ text (getMessage "ByMonths" loggedData.translations) ] , monthsDetail loggedData @@ -42,10 +44,7 @@ paymentsDetail loggedData payments = [] [ li [] - [ let single = getMessage "Payment" loggedData.translations - multiple = getMessage "Payments" loggedData.translations - in text <| plural (List.length payments) single multiple - ] + [ text <| plural loggedData.translations (List.length payments) "Payment" "Payments" ] , li [] [ text (paymentsSum loggedData.conf payments) diff --git a/src/client/elm/Utils/Form.elm b/src/client/elm/Utils/Form.elm new file mode 100644 index 0000000..6793222 --- /dev/null +++ b/src/client/elm/Utils/Form.elm @@ -0,0 +1,11 @@ +module Utils.Form exposing + ( fieldAsText + ) + +import Form exposing (Form) + +fieldAsText : Form a b -> String -> String +fieldAsText form field = + Form.getFieldAsString field form + |> .value + |> Maybe.withDefault "" diff --git a/src/client/elm/View/Plural.elm b/src/client/elm/View/Plural.elm index 727189c..ab91f06 100644 --- a/src/client/elm/View/Plural.elm +++ b/src/client/elm/View/Plural.elm @@ -2,6 +2,10 @@ module View.Plural exposing ( plural ) -plural : Int -> String -> String -> String -plural n single multiple = - (toString n) ++ " " ++ if n <= 1 then single else multiple +import Model.Translations exposing (Translations, getMessage) + +plural : Translations -> Int -> String -> String -> String +plural translations n single multiple = + let singleMessage = getMessage single translations + multipleMessage = getMessage multiple translations + in (toString n) ++ " " ++ if n <= 1 then singleMessage else multipleMessage diff --git a/src/server/Design/LoggedIn/Home.hs b/src/server/Design/LoggedIn/Home.hs index c0a8566..47bfc84 100644 --- a/src/server/Design/LoggedIn/Home.hs +++ b/src/server/Design/LoggedIn/Home.hs @@ -6,16 +6,16 @@ module Design.LoggedIn.Home import Clay -import qualified Design.LoggedIn.Home.Add as AddDesign -import qualified Design.LoggedIn.Home.Expandables as ExpandablesDesign -import qualified Design.LoggedIn.Home.Search as SearchDesign -import qualified Design.LoggedIn.Home.Table as TableDesign -import qualified Design.LoggedIn.Home.Pages as PagesDesign +import qualified Design.LoggedIn.Home.Add as Add +import qualified Design.LoggedIn.Home.Monthly as Monthly +import qualified Design.LoggedIn.Home.Search as Search +import qualified Design.LoggedIn.Home.Table as Table +import qualified Design.LoggedIn.Home.Pages as Pages design :: Css design = do - form # ".addPayment" ? AddDesign.design - ".expandables" ? ExpandablesDesign.design - ".search" ? SearchDesign.design - ".table" ? TableDesign.design - ".pages" ? PagesDesign.design + form # ".addPayment" ? Add.design + ".monthly" ? Monthly.design + ".search" ? Search.design + ".table" ? Table.design + ".pages" ? Pages.design diff --git a/src/server/Design/LoggedIn/Home/Add.hs b/src/server/Design/LoggedIn/Home/Add.hs index 6856af9..ce64077 100644 --- a/src/server/Design/LoggedIn/Home/Add.hs +++ b/src/server/Design/LoggedIn/Home/Add.hs @@ -15,7 +15,6 @@ import Design.Constants design :: Css design = do centeredWithMargin - marginBottom blockMarginBottom display flex "justify-content" -: "center" diff --git a/src/server/Design/LoggedIn/Home/Expandables.hs b/src/server/Design/LoggedIn/Home/Expandables.hs deleted file mode 100644 index 36ba67d..0000000 --- a/src/server/Design/LoggedIn/Home/Expandables.hs +++ /dev/null @@ -1,27 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} - -module Design.LoggedIn.Home.Expandables - ( design - ) where - -import Clay - -import Design.Color as Color -import Design.Helper -import Design.Constants - -design :: Css -design = do - - ".expand" ? do - position absolute - right blockPadding - bottom (px 0) - - ".monthlyPayments" ? expandBlock Color.gothic Color.white (px inputHeight) - - ".account" ? do - expandBlock Color.mossGreen Color.white (px inputHeight) - ".userName" ? marginRight (px 10) - - ".detail" |> ".header" ? borderRadius radius radius 0 0 diff --git a/src/server/Design/LoggedIn/Home/Monthly.hs b/src/server/Design/LoggedIn/Home/Monthly.hs new file mode 100644 index 0000000..5e976ef --- /dev/null +++ b/src/server/Design/LoggedIn/Home/Monthly.hs @@ -0,0 +1,23 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Design.LoggedIn.Home.Monthly + ( design + ) where + +import Clay + +import Design.Color as Color +import Design.Helper +import Design.Constants + +design :: Css +design = do + + expandBlock Color.gothic Color.white (px inputHeight) + + ".expand" ? do + position absolute + right blockPadding + bottom (px 0) + + ".detail" |> ".header" ? borderRadius radius radius 0 0 diff --git a/src/server/Design/LoggedIn/Home/Search.hs b/src/server/Design/LoggedIn/Home/Search.hs index 0292eaa..1bc91ef 100644 --- a/src/server/Design/LoggedIn/Home/Search.hs +++ b/src/server/Design/LoggedIn/Home/Search.hs @@ -6,11 +6,14 @@ module Design.LoggedIn.Home.Search import Clay -import Design.Color as Color import Design.Constants -import Design.Helper design :: Css design = do - expandBlock Color.gothic Color.white (px inputHeight) - ".label" ? marginRight (px 10) + marginBottom blockMarginBottom + marginLeft (pct blockPercentMargin) + marginRight (pct blockPercentMargin) + + ".textInput" ? do + display inlineBlock + marginRight (px 30) diff --git a/src/server/Design/LoggedIn/Stat.hs b/src/server/Design/LoggedIn/Stat.hs index ff44a9d..62028cb 100644 --- a/src/server/Design/LoggedIn/Stat.hs +++ b/src/server/Design/LoggedIn/Stat.hs @@ -10,4 +10,6 @@ design :: Css design = do h1 ? paddingBottom (px 0) + ".exceedingPayers" ? ".userName" ? marginRight (px 5) + ".mean" ? marginBottom (em 1.5) diff --git a/src/server/Model/Message/Key.hs b/src/server/Model/Message/Key.hs index 4ef8663..27a93dd 100644 --- a/src/server/Model/Message/Key.hs +++ b/src/server/Model/Message/Key.hs @@ -64,10 +64,12 @@ data Key = | Payment | Payments | SearchText + | Worth -- Statistics | Statistics + | Balance | Overall | ByMonths | By diff --git a/src/server/Model/Message/Translations.hs b/src/server/Model/Message/Translations.hs index c7a2043..55ef97b 100644 --- a/src/server/Model/Message/Translations.hs +++ b/src/server/Model/Message/Translations.hs @@ -240,15 +240,20 @@ m l Payment = English -> "payment" French -> "paiement" +m l Payments = + case l of + English -> "payments" + French -> "paiements" + m l SearchText = case l of English -> "Search" French -> "Recherche" -m l Payments = +m l Worth = case l of - English -> "payments" - French -> "paiements" + English -> "{1} worth {2}" + French -> "{1} valant {2}" -- Statistics @@ -257,6 +262,11 @@ m l Statistics = English -> "Statistics" French -> "Statistiques" +m l Balance = + case l of + English -> "Balance" + French -> "Équilibre" + m l Overall = case l of English -> "Overall" @@ -274,15 +284,15 @@ m l By = m l Mean = case l of - English -> "Mean: {0}" - French -> "En moyenne : {0}" + English -> "Mean: {1}" + French -> "En moyenne : {1}" -- Income m l CumulativeIncomesSince = case l of - English -> "Cumulative incomes since {0}" - French -> "Revenus nets cumulés depuis le {0}" + English -> "Cumulative incomes since {1}" + French -> "Revenus nets cumulés depuis le {1}" m l Income = case l of @@ -338,13 +348,13 @@ m l InvalidInt = m l SmallerIntThan = case l of - English -> "Integer bigger than {0} required" - French -> "Entier supérieur à {0} requis" + English -> "Integer bigger than {1} required" + French -> "Entier supérieur à {1} requis" m l GreaterIntThan = case l of - English -> "Integer smaller than {0} required" - French -> "Entier inférieur à {0} requis" + English -> "Integer smaller than {1} required" + French -> "Entier inférieur à {1} requis" -- Http error -- cgit v1.2.3