From 5c110716cfda6e616a795edd12f2012b132dca9f Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 2 Apr 2017 17:51:12 +0200 Subject: Add a chart on payments by month by categories --- src/client/Model/PaymentCategory.elm | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'src/client/Model/PaymentCategory.elm') diff --git a/src/client/Model/PaymentCategory.elm b/src/client/Model/PaymentCategory.elm index bb6c152..a4fceb1 100644 --- a/src/client/Model/PaymentCategory.elm +++ b/src/client/Model/PaymentCategory.elm @@ -2,15 +2,20 @@ module Model.PaymentCategory exposing ( PaymentCategories , paymentCategoriesDecoder , search + , groupPaymentsByCategory , isCategoryUnused , save ) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) +import List.Extra as List +import Maybe.Extra as Maybe import Model.Category exposing (CategoryId, categoryIdDecoder) +import Model.Payment exposing (Payments) import Utils.Json as Json +import Utils.List as List import Utils.Search as Search type alias PaymentCategories = List PaymentCategory @@ -26,18 +31,30 @@ paymentCategoriesDecoder = (Decode.field "name" Decode.string) (Decode.field "category" categoryIdDecoder) +groupPaymentsByCategory : PaymentCategories -> Payments -> List (CategoryId, Payments) +groupPaymentsByCategory paymentCategories payments = + payments + |> List.groupBy (\payment -> + search payment.name paymentCategories + |> Maybe.withDefault -1 + ) + |> List.filterMap (\(category, payments) -> + case category of + -1 -> Nothing + _ -> Just (category, payments) + ) + search : String -> PaymentCategories -> Maybe CategoryId search paymentName paymentCategories = paymentCategories - |> List.filter (\pc -> Search.format pc.name == Search.format paymentName) - |> List.head + |> List.find (\pc -> Search.format pc.name == Search.format paymentName) |> Maybe.map .category isCategoryUnused : CategoryId -> PaymentCategories -> Bool isCategoryUnused category paymentCategories = paymentCategories - |> List.filter ((==) category << .category) - |> List.isEmpty + |> List.find ((==) category << .category) + |> Maybe.isNothing save : String -> CategoryId -> PaymentCategories -> PaymentCategories save name category paymentCategories = -- cgit v1.2.3