cli: make prices a builtin command

This commit is contained in:
Simon Michael 2017-09-12 19:28:01 -07:00
parent 4e6aa06b62
commit 258efdf83c
6 changed files with 33 additions and 36 deletions

View File

@ -23,6 +23,7 @@ module Hledger.Cli.Commands (
,module Hledger.Cli.Commands.Equity ,module Hledger.Cli.Commands.Equity
,module Hledger.Cli.Commands.Help ,module Hledger.Cli.Commands.Help
,module Hledger.Cli.Commands.Incomestatement ,module Hledger.Cli.Commands.Incomestatement
,module Hledger.Cli.Commands.Prices
,module Hledger.Cli.Commands.Print ,module Hledger.Cli.Commands.Print
,module Hledger.Cli.Commands.Register ,module Hledger.Cli.Commands.Register
,module Hledger.Cli.Commands.Stats ,module Hledger.Cli.Commands.Stats
@ -55,6 +56,7 @@ import Hledger.Cli.Commands.Checkdupes
import Hledger.Cli.Commands.Equity import Hledger.Cli.Commands.Equity
import Hledger.Cli.Commands.Help import Hledger.Cli.Commands.Help
import Hledger.Cli.Commands.Incomestatement import Hledger.Cli.Commands.Incomestatement
import Hledger.Cli.Commands.Prices
import Hledger.Cli.Commands.Print import Hledger.Cli.Commands.Print
import Hledger.Cli.Commands.Register import Hledger.Cli.Commands.Register
import Hledger.Cli.Commands.Stats import Hledger.Cli.Commands.Stats

View File

@ -1,23 +1,21 @@
#!/usr/bin/env stack
{- stack runghc --verbosity info
--package hledger
--package here
--package text
--package time
-}
{-# OPTIONS_GHC -Wno-missing-signatures #-}
{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE QuasiQuotes #-}
module Hledger.Cli.Commands.Prices (
pricesmode
,prices
)
where
import Data.Maybe import Data.Maybe
import Data.List import Data.List
import Data.String.Here import Data.String.Here
import Data.Time
import qualified Data.Text as T import qualified Data.Text as T
import Hledger.Cli import Data.Time
import Hledger
import Hledger.Cli.CliOptions
import System.Console.CmdArgs.Explicit
------------------------------------------------------------------------------ pricesmode = hledgerCommandMode
cmdmode = hledgerCommandMode
[here| prices [here| prices
Print all market prices from the journal. Print all market prices from the journal.
|] |]
@ -26,7 +24,21 @@ Print all market prices from the journal.
[generalflagsgroup1] [generalflagsgroup1]
[] []
([], Nothing) ([], Nothing)
------------------------------------------------------------------------------
prices opts j = do
-- XXX the original hledger-prices script always ignored assertions
let cprices = concatMap postingCosts . allPostings $ j
icprices = concatMap postingCosts . mapAmount invertPrice . allPostings $ j
printPrices = mapM_ (putStrLn . showPrice)
forBoolOpt opt | boolopt opt $ rawopts_ opts = id
| otherwise = const []
allPrices = sortOn mpdate . concat $
[ jmarketprices j
, forBoolOpt "costs" cprices
, forBoolOpt "inverted-costs" icprices
]
printPrices allPrices
showPrice :: MarketPrice -> String showPrice :: MarketPrice -> String
showPrice mp = unwords ["P", show $ mpdate mp, T.unpack . quoteCommoditySymbolIfNeeded $ mpcommodity mp, showAmountWithZeroCommodity $ mpamount mp] showPrice mp = unwords ["P", show $ mpdate mp, T.unpack . quoteCommoditySymbolIfNeeded $ mpcommodity mp, showAmountWithZeroCommodity $ mpamount mp]
@ -70,20 +82,3 @@ mapAmount :: (Amount -> Amount) -> [Posting] -> [Posting]
mapAmount f = map pf where mapAmount f = map pf where
pf p = p { pamount = mf (pamount p) } pf p = p { pamount = mf (pamount p) }
mf = mixed . map f . amounts mf = mixed . map f . amounts
main :: IO ()
main = do
opts <- getHledgerCliOpts cmdmode
withJournalDo opts{ ignore_assertions_ = True } $ \_ j -> do
let cprices = concatMap postingCosts . allPostings $ j
icprices = concatMap postingCosts . mapAmount invertPrice . allPostings $ j
printPrices = mapM_ (putStrLn . showPrice)
forBoolOpt opt | boolopt opt $ rawopts_ opts = id
| otherwise = const []
allPrices = sortOn mpdate . concat $
[ jmarketprices j
, forBoolOpt "costs" cprices
, forBoolOpt "inverted-costs" icprices
]
printPrices allPrices

View File

@ -89,11 +89,6 @@ is an old pie chart generator, in need of some love.
[hledger-check.hs](https://github.com/simonmichael/hledger/blob/master/bin/hledger-check.hs) [hledger-check.hs](https://github.com/simonmichael/hledger/blob/master/bin/hledger-check.hs)
checks more powerful account balance assertions. checks more powerful account balance assertions.
### prices
[hledger-prices.hs](https://github.com/simonmichael/hledger/blob/master/bin/hledger-prices.hs)
prints all prices from the journal.
### print-unique ### print-unique
[hledger-print-unique.hs](https://github.com/simonmichael/hledger/blob/master/bin/hledger-print-unique.hs#L15) [hledger-print-unique.hs](https://github.com/simonmichael/hledger/blob/master/bin/hledger-print-unique.hs#L15)

View File

@ -458,6 +458,9 @@ Normally incomestatement shows revenues/expenses per period, though
as with [multicolumn balance reports](#multicolumn-balance-reports) as with [multicolumn balance reports](#multicolumn-balance-reports)
you can alter the report mode with `--change`/`--cumulative`/`--historical`. you can alter the report mode with `--change`/`--cumulative`/`--historical`.
## prices
Print all market prices from the journal.
## print ## print
Show transactions from the journal. Show transactions from the journal.

View File

@ -134,6 +134,7 @@ library
Hledger.Cli.Commands.Equity Hledger.Cli.Commands.Equity
Hledger.Cli.Commands.Help Hledger.Cli.Commands.Help
Hledger.Cli.Commands.Incomestatement Hledger.Cli.Commands.Incomestatement
Hledger.Cli.Commands.Prices
Hledger.Cli.Commands.Print Hledger.Cli.Commands.Print
Hledger.Cli.Commands.Register Hledger.Cli.Commands.Register
Hledger.Cli.Commands.Stats Hledger.Cli.Commands.Stats

View File

@ -115,6 +115,7 @@ library:
- Hledger.Cli.Commands.Equity - Hledger.Cli.Commands.Equity
- Hledger.Cli.Commands.Help - Hledger.Cli.Commands.Help
- Hledger.Cli.Commands.Incomestatement - Hledger.Cli.Commands.Incomestatement
- Hledger.Cli.Commands.Prices
- Hledger.Cli.Commands.Print - Hledger.Cli.Commands.Print
- Hledger.Cli.Commands.Register - Hledger.Cli.Commands.Register
- Hledger.Cli.Commands.Stats - Hledger.Cli.Commands.Stats