;doc, debug output tweaks (#131)

This commit is contained in:
Simon Michael 2019-06-10 17:42:51 -07:00
parent 6a62bd6437
commit dd5afbb6fe
2 changed files with 10 additions and 11 deletions

View File

@ -49,8 +49,6 @@ tests_Prices = tests "Prices" [
-- Apply a specified valuation to this mixed amount, using the provided -- Apply a specified valuation to this mixed amount, using the provided
-- prices db, commodity styles, period-end/current dates, -- prices db, commodity styles, period-end/current dates,
-- and whether this is for a multiperiod report or not. -- and whether this is for a multiperiod report or not.
-- Currently ignores the specified valuation commodity and always uses
-- the default valuation commodity.
mixedAmountApplyValuation :: [PriceDirective] -> M.Map CommoditySymbol AmountStyle -> Day -> Day -> Bool -> ValuationType -> MixedAmount -> MixedAmount mixedAmountApplyValuation :: [PriceDirective] -> M.Map CommoditySymbol AmountStyle -> Day -> Day -> Bool -> ValuationType -> MixedAmount -> MixedAmount
mixedAmountApplyValuation prices styles periodend today ismultiperiod v (Mixed as) = mixedAmountApplyValuation prices styles periodend today ismultiperiod v (Mixed as) =
Mixed $ map (amountApplyValuation prices styles periodend today ismultiperiod v) as Mixed $ map (amountApplyValuation prices styles periodend today ismultiperiod v) as
@ -152,6 +150,7 @@ priceLookup :: [PriceDirective] -> Day -> CommoditySymbol -> Maybe CommoditySymb
priceLookup pricedirectives d from mto = priceLookup pricedirectives d from mto =
let let
-- build a graph of the commodity exchange rates in effect on this day -- build a graph of the commodity exchange rates in effect on this day
-- XXX should hide these fgl details better
Prices{prNodemap=m, prDeclaredPrices=g, prWithReversePrices=gr} = pricesAtDate pricedirectives d Prices{prNodemap=m, prDeclaredPrices=g, prWithReversePrices=gr} = pricesAtDate pricedirectives d
fromnode = node m from fromnode = node m from
-- if to is unspecified, try to find a default valuation commodity based on available prices -- if to is unspecified, try to find a default valuation commodity based on available prices
@ -167,8 +166,7 @@ priceLookup pricedirectives d from mto =
Nothing -> Nothing Nothing -> Nothing
Just to | to==from -> Nothing Just to | to==from -> Nothing
Just to -> Just to ->
-- We have a commodity to convert to. Find the most direct price available, -- We have a commodity to convert to. Find the most direct price available.
-- and return it as an amount.
case case
-- These seem unnecessary, and we can avoid building one of the graphs -- These seem unnecessary, and we can avoid building one of the graphs
-- mdeclaredprice <|> mreverseprice <|> -- mdeclaredprice <|> mreverseprice <|>
@ -194,7 +192,7 @@ priceLookup pricedirectives d from mto =
where comms = catMaybes $ map (lab g) nodes where comms = catMaybes $ map (lab g) nodes
-- log a message and a Maybe Quantity, hiding Just/Nothing and limiting decimal places -- log a message and a Maybe Quantity, hiding Just/Nothing and limiting decimal places
dbg msg = dbg4With (((msg++": ")++) . maybe "" (show . roundTo 3)) dbg msg = dbg4With (((msg++": ")++) . maybe "" (show . roundTo 8))
-- | Convert a list of market price directives in parse order to -- | Convert a list of market price directives in parse order to
-- a database of market prices in effect on a given day, -- a database of market prices in effect on a given day,
@ -208,7 +206,7 @@ pricesAtDate pricedirectives d = Prices{
where where
-- get the latest (before d) declared price for each commodity pair -- get the latest (before d) declared price for each commodity pair
latestdeclaredprices :: [MarketPrice] = latestdeclaredprices :: [MarketPrice] =
dbg4 "latestdeclaredprices" $ dbg5 "latestdeclaredprices" $
nubSortBy (compare `on` (\(MarketPrice{..})->(mpfrom,mpto))) $ -- keep only the first (ie newest and latest parsed) price for each pair nubSortBy (compare `on` (\(MarketPrice{..})->(mpfrom,mpto))) $ -- keep only the first (ie newest and latest parsed) price for each pair
map snd $ -- discard the parse order label map snd $ -- discard the parse order label
sortBy (flip compare `on` (\(parseorder,mp)->(mpdate mp,parseorder))) $ -- sort with newest dates and latest parse order first sortBy (flip compare `on` (\(parseorder,mp)->(mpdate mp,parseorder))) $ -- sort with newest dates and latest parse order first
@ -241,13 +239,13 @@ marketPriceReverse mp@MarketPrice{..} = mp{mpfrom=mpto, mpto=mpfrom, mprate=1/mp
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
-- fgl helpers -- fgl helpers
-- | Look up an existing node by its label in the given NodeMap. -- | Look up an existing graph node by its label.
-- (If the node does not exist, a new one will be generated, but not -- (If the node does not exist, a new one will be generated, but not
-- persisted in the nodemap.) -- persisted in the nodemap.)
node :: Ord a => NodeMap a -> a -> Node node :: Ord a => NodeMap a -> a -> Node
node m = fst . fst . mkNode m node m = fst . fst . mkNode m
-- | Convert a valid path from the given graph to the corresponding -- | Convert a valid path within the given graph to the corresponding
-- edge labels. When there are multiple edges between two nodes, the -- edge labels. When there are multiple edges between two nodes, the
-- lowest-sorting label is used. -- lowest-sorting label is used.
pathEdgeLabels :: (Show b, Ord b) => Gr a b -> [Node] -> [b] pathEdgeLabels :: (Show b, Ord b) => Gr a b -> [Node] -> [b]

View File

@ -463,9 +463,10 @@ The valuation commodity will be the one referenced in the latest
applicable market price dated on or before the valuation date. applicable market price dated on or before the valuation date.
If most of your P declarations lead to a single home currency, this will usually be what you want. If most of your P declarations lead to a single home currency, this will usually be what you want.
`-V/--market` is similar to the same flag in Ledger, except Unlike the similar flag in Ledger, it does not infer market prices
unlike Ledger it does not infer market prices from [transaction prices](/manual.html#transaction-prices). from [transaction prices](/manual.html#transaction-prices). In
(Mnemonic: in hledger, -B uses transaction prices, -V and -X use market prices.) hledger, -B uses transaction prices, -V and -X use market prices.
It is equivalent to `--value=now` or `--value=end`. It is equivalent to `--value=now` or `--value=end`.
Here's a quick example: Here's a quick example: