Preserve implicit amounts and prices the way user wrote them in output of print command (#471)
* Remember original postings during infer and pivot This includes such functions like: - inferFromAssignment - inferBalancingAmount - inferBalancingPrices - pivotPosting * Use original postings for hledger print - Introduce "--explicit" option for "print" command which brings back old behavior when every inferred number being printed. - Make "print" by default print original postings without inferred amounts. But use effective account name to have effect from aliases. - Instruct shell tests with an new expected output or to use --explicit option when inferred amounts are checked. Resolves simonmichael/hledger#442
This commit is contained in:
		
							parent
							
								
									ec890b9455
								
							
						
					
					
						commit
						015b764d00
					
				| @ -657,7 +657,7 @@ checkInferAndRegisterAmounts (Right oldTx) = do | |||||||
|   where |   where | ||||||
|     inferFromAssignment :: Posting -> CurrentBalancesModifier s Posting |     inferFromAssignment :: Posting -> CurrentBalancesModifier s Posting | ||||||
|     inferFromAssignment p = maybe (return p) |     inferFromAssignment p = maybe (return p) | ||||||
|       (fmap (\a -> p { pamount = a }) . setBalance (paccount p)) |       (fmap (\a -> p { pamount = a, porigin = Just $ originalPosting p }) . setBalance (paccount p)) | ||||||
|       $ pbalanceassertion p |       $ pbalanceassertion p | ||||||
| 
 | 
 | ||||||
| -- | Adds a posting's amonut to the posting's account balance and | -- | Adds a posting's amonut to the posting's account balance and | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ module Hledger.Data.Posting ( | |||||||
|   posting, |   posting, | ||||||
|   post, |   post, | ||||||
|   -- * operations |   -- * operations | ||||||
|  |   originalPosting, | ||||||
|   postingStatus, |   postingStatus, | ||||||
|   isReal, |   isReal, | ||||||
|   isVirtual, |   isVirtual, | ||||||
| @ -83,12 +84,16 @@ nullposting = Posting | |||||||
|                 ,ptags=[] |                 ,ptags=[] | ||||||
|                 ,pbalanceassertion=Nothing |                 ,pbalanceassertion=Nothing | ||||||
|                 ,ptransaction=Nothing |                 ,ptransaction=Nothing | ||||||
|  |                 ,porigin=Nothing | ||||||
|                 } |                 } | ||||||
| posting = nullposting | posting = nullposting | ||||||
| 
 | 
 | ||||||
| post :: AccountName -> Amount -> Posting | post :: AccountName -> Amount -> Posting | ||||||
| post acct amt = posting {paccount=acct, pamount=Mixed [amt]} | post acct amt = posting {paccount=acct, pamount=Mixed [amt]} | ||||||
| 
 | 
 | ||||||
|  | originalPosting :: Posting -> Posting | ||||||
|  | originalPosting p = fromMaybe p $ porigin p | ||||||
|  | 
 | ||||||
| -- XXX once rendered user output, but just for debugging now; clean up | -- XXX once rendered user output, but just for debugging now; clean up | ||||||
| showPosting :: Posting -> String | showPosting :: Posting -> String | ||||||
| showPosting p@Posting{paccount=a,pamount=amt,ptype=t} = | showPosting p@Posting{paccount=a,pamount=amt,ptype=t} = | ||||||
|  | |||||||
| @ -402,7 +402,7 @@ inferBalancingAmount update t@Transaction{tpostings=ps} | |||||||
|     inferamount p@Posting{ptype=BalancedVirtualPosting} |     inferamount p@Posting{ptype=BalancedVirtualPosting} | ||||||
|      | not (hasAmount p) = updateAmount p bvsum |      | not (hasAmount p) = updateAmount p bvsum | ||||||
|     inferamount p = return p |     inferamount p = return p | ||||||
|     updateAmount p amt = update (paccount p) amt' >> return p { pamount=amt' } |     updateAmount p amt = update (paccount p) amt' >> return p { pamount=amt', porigin=Just $ originalPosting p } | ||||||
|       where amt' = normaliseMixedAmount $ costOfMixedAmount (-amt) |       where amt' = normaliseMixedAmount $ costOfMixedAmount (-amt) | ||||||
| 
 | 
 | ||||||
| -- | Infer prices for this transaction's posting amounts, if needed to make | -- | Infer prices for this transaction's posting amounts, if needed to make | ||||||
| @ -467,7 +467,7 @@ priceInferrerFor t pt = inferprice | |||||||
| 
 | 
 | ||||||
|     inferprice p@Posting{pamount=Mixed [a]} |     inferprice p@Posting{pamount=Mixed [a]} | ||||||
|       | caninferprices && ptype p == pt && acommodity a == fromcommodity |       | caninferprices && ptype p == pt && acommodity a == fromcommodity | ||||||
|         = p{pamount=Mixed [a{aprice=conversionprice}]} |         = p{pamount=Mixed [a{aprice=conversionprice}], porigin=Just $ originalPosting p} | ||||||
|       where |       where | ||||||
|         fromcommodity = head $ filter (`elem` sumcommodities) pcommodities -- these heads are ugly but should be safe |         fromcommodity = head $ filter (`elem` sumcommodities) pcommodities -- these heads are ugly but should be safe | ||||||
|         conversionprice |         conversionprice | ||||||
|  | |||||||
| @ -199,8 +199,9 @@ data Posting = Posting { | |||||||
|       ptype             :: PostingType, |       ptype             :: PostingType, | ||||||
|       ptags             :: [Tag],             -- ^ tag names and values, extracted from the comment |       ptags             :: [Tag],             -- ^ tag names and values, extracted from the comment | ||||||
|       pbalanceassertion :: Maybe Amount,      -- ^ optional: the expected balance in this commodity in the account after this posting |       pbalanceassertion :: Maybe Amount,      -- ^ optional: the expected balance in this commodity in the account after this posting | ||||||
|       ptransaction      :: Maybe Transaction  -- ^ this posting's parent transaction (co-recursive types). |       ptransaction      :: Maybe Transaction, -- ^ this posting's parent transaction (co-recursive types). | ||||||
|                                               -- Tying this knot gets tedious, Maybe makes it easier/optional. |                                               -- Tying this knot gets tedious, Maybe makes it easier/optional. | ||||||
|  |       porigin           :: Maybe Posting      -- ^ original posting if this one is result of any transformations (one level only) | ||||||
|     } deriving (Typeable,Data,Generic) |     } deriving (Typeable,Data,Generic) | ||||||
| 
 | 
 | ||||||
| instance NFData Posting | instance NFData Posting | ||||||
| @ -208,7 +209,7 @@ instance NFData Posting | |||||||
| -- The equality test for postings ignores the parent transaction's | -- The equality test for postings ignores the parent transaction's | ||||||
| -- identity, to avoid infinite loops. | -- identity, to avoid infinite loops. | ||||||
| instance Eq Posting where | instance Eq Posting where | ||||||
|     (==) (Posting a1 b1 c1 d1 e1 f1 g1 h1 i1 _) (Posting a2 b2 c2 d2 e2 f2 g2 h2 i2 _) =  a1==a2 && b1==b2 && c1==c2 && d1==d2 && e1==e2 && f1==f2 && g1==g2 && h1==h2 && i1==i2 |     (==) (Posting a1 b1 c1 d1 e1 f1 g1 h1 i1 _ _) (Posting a2 b2 c2 d2 e2 f2 g2 h2 i2 _ _) =  a1==a2 && b1==b2 && c1==c2 && d1==d2 && e1==e2 && f1==f2 && g1==g2 && h1==h2 && i1==i2 | ||||||
| 
 | 
 | ||||||
| -- | The position of parse errors (eg), like parsec's SourcePos but generic. | -- | The position of parse errors (eg), like parsec's SourcePos but generic. | ||||||
| -- File name, 1-based line number and 1-based column number. | -- File name, 1-based line number and 1-based column number. | ||||||
|  | |||||||
| @ -34,7 +34,9 @@ printmode = (defCommandMode $ ["print"] ++ aliases) { | |||||||
|         in |         in | ||||||
|          flagReq  ["match","m"] (\s opts -> Right $ setopt "match" s opts) matcharg |          flagReq  ["match","m"] (\s opts -> Right $ setopt "match" s opts) matcharg | ||||||
|          ("show the transaction whose description is most similar to "++matcharg |          ("show the transaction whose description is most similar to "++matcharg | ||||||
|           ++ ", and is most recent") |           ++ ", and is most recent"), | ||||||
|  |         flagNone ["explicit","x"] (setboolopt "explicit") | ||||||
|  |          "make output more explicit than original transactions" | ||||||
|         ] |         ] | ||||||
|         ++ outputflags |         ++ outputflags | ||||||
|     ,groupHidden = [] |     ,groupHidden = [] | ||||||
| @ -43,6 +45,17 @@ printmode = (defCommandMode $ ["print"] ++ aliases) { | |||||||
|  } |  } | ||||||
|   where aliases = [] |   where aliases = [] | ||||||
| 
 | 
 | ||||||
|  | showTransaction' :: CliOpts -> Transaction -> String | ||||||
|  | showTransaction' opts | ||||||
|  |     | boolopt "explicit" $ rawopts_ opts = showTransactionUnelided | ||||||
|  |     | otherwise = showTransactionUnelided . originalTransaction | ||||||
|  | 
 | ||||||
|  | originalTransaction :: Transaction -> Transaction | ||||||
|  | originalTransaction t = t { tpostings = map originalPosting' $ tpostings t } where | ||||||
|  |     -- We don't want plain original postings because print wouldn't issue alias | ||||||
|  |     -- directives. Thus we are going to print effective account name. | ||||||
|  |     originalPosting' p = (originalPosting p) { paccount = paccount p } | ||||||
|  | 
 | ||||||
| -- | Print journal transactions in standard format. | -- | Print journal transactions in standard format. | ||||||
| print' :: CliOpts -> Journal -> IO () | print' :: CliOpts -> Journal -> IO () | ||||||
| print' opts j = do | print' opts j = do | ||||||
| @ -57,12 +70,15 @@ printEntries opts@CliOpts{reportopts_=ropts} j = do | |||||||
|       fmt = outputFormatFromOpts opts |       fmt = outputFormatFromOpts opts | ||||||
|       (render, ropts') = case fmt of |       (render, ropts') = case fmt of | ||||||
|         "csv" -> ((++"\n") . printCSV . entriesReportAsCsv, ropts{accountlistmode_=ALFlat}) |         "csv" -> ((++"\n") . printCSV . entriesReportAsCsv, ropts{accountlistmode_=ALFlat}) | ||||||
|         _     -> (entriesReportAsText,                      ropts) |         _     -> (entriesReportAsText' opts,                ropts) | ||||||
|   writeOutput opts $ render $ entriesReport ropts' q j |   writeOutput opts $ render $ entriesReport ropts' q j | ||||||
| 
 | 
 | ||||||
| entriesReportAsText :: EntriesReport -> String | entriesReportAsText :: EntriesReport -> String | ||||||
| entriesReportAsText items = concatMap showTransactionUnelided items | entriesReportAsText items = concatMap showTransactionUnelided items | ||||||
| 
 | 
 | ||||||
|  | entriesReportAsText' :: CliOpts -> EntriesReport -> String | ||||||
|  | entriesReportAsText' = concatMap . showTransaction' | ||||||
|  | 
 | ||||||
| -- XXX | -- XXX | ||||||
| -- tests_showTransactions = [ | -- tests_showTransactions = [ | ||||||
| --   "showTransactions" ~: do | --   "showTransactions" ~: do | ||||||
|  | |||||||
| @ -91,7 +91,7 @@ pivot tag j = j{jtxns = map pivotTrans . jtxns $ j} | |||||||
|  where |  where | ||||||
|   pivotTrans t = t{tpostings = map pivotPosting . tpostings $ t} |   pivotTrans t = t{tpostings = map pivotPosting . tpostings $ t} | ||||||
|   pivotPosting p |   pivotPosting p | ||||||
|     | Just (_ , value) <- tagTuple = p{paccount = joinAccountNames tag value} |     | Just (_ , value) <- tagTuple = p{paccount = joinAccountNames tag value, porigin = Just $ originalPosting p} | ||||||
|     | _                <- tagTuple = p |     | _                <- tagTuple = p | ||||||
|    where tagTuple = find ((tag ==) . fst) . ptags $ p |    where tagTuple = find ((tag ==) . fst) . ptags $ p | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -13,13 +13,14 @@ runghc ../../bin/hledger-rewrite.hs -f- ^income --add-posting '(liabilities:tax) | |||||||
| >>> | >>> | ||||||
| 2016/01/01 paycheck | 2016/01/01 paycheck | ||||||
|     income:remuneration         $-100 |     income:remuneration         $-100 | ||||||
|     assets:bank                  $100 |     assets:bank | ||||||
|     (liabilities:tax)            $-33 |     (liabilities:tax)            $-33 | ||||||
| 
 | 
 | ||||||
| 2016/01/01 withdraw | 2016/01/01 withdraw | ||||||
|     assets:cash           $20 |     assets:cash           $20 | ||||||
|     assets:bank          $-20 |     assets:bank | ||||||
| 
 | 
 | ||||||
|  | >>>2 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| # Duplicate posting for budgeting (from documentation) | # Duplicate posting for budgeting (from documentation) | ||||||
| @ -35,13 +36,14 @@ runghc ../../bin/hledger-rewrite.hs -f- expenses:gifts --add-posting '(budget:gi | |||||||
| >>> | >>> | ||||||
| 2016/01/01 withdraw | 2016/01/01 withdraw | ||||||
|     assets:cash           $20 |     assets:cash           $20 | ||||||
|     assets:bank          $-20 |     assets:bank | ||||||
| 
 | 
 | ||||||
| 2016/01/01 gift | 2016/01/01 gift | ||||||
|     assets:cash             $-15 |     assets:cash             $-15 | ||||||
|     expenses:gifts           $15 |     expenses:gifts | ||||||
|     (budget:gifts)          $-15 |     (budget:gifts)          $-15 | ||||||
| 
 | 
 | ||||||
|  | >>>2 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| # Add absolute bank processing fee | # Add absolute bank processing fee | ||||||
| @ -62,14 +64,15 @@ runghc ../../bin/hledger-rewrite.hs -f- assets:bank and 'amt:<0' --add-posting ' | |||||||
| >>> | >>> | ||||||
| 2016/01/01 withdraw | 2016/01/01 withdraw | ||||||
|     assets:cash            $20 |     assets:cash            $20 | ||||||
|     assets:bank           $-20 |     assets:bank | ||||||
|     expenses:fee            $5 |     expenses:fee            $5 | ||||||
|     assets:bank            $-5 |     assets:bank            $-5 | ||||||
| 
 | 
 | ||||||
| 2016/01/02 withdraw | 2016/01/02 withdraw | ||||||
|     assets:cash            $30 |     assets:cash | ||||||
|     assets:bank           $-30 |     assets:bank           $-30 | ||||||
|     expenses:fee            $5 |     expenses:fee            $5 | ||||||
|     assets:bank            $-5 |     assets:bank            $-5 | ||||||
| 
 | 
 | ||||||
|  | >>>2 | ||||||
| >>>=0 | >>>=0 | ||||||
|  | |||||||
| @ -25,15 +25,15 @@ hledger print -f personal.journal -f business.journal -f alias.journal -f person | |||||||
| >>> | >>> | ||||||
| 2014/01/01 | 2014/01/01 | ||||||
|     expenses:office supplies            $1 |     expenses:office supplies            $1 | ||||||
|     assets:business checking           $-1 |     assets:business checking | ||||||
| 
 | 
 | ||||||
| 2014/01/02 | 2014/01/02 | ||||||
|     expenses:food            $1 |     expenses:food            $1 | ||||||
|     assets:cash             $-1 |     assets:cash | ||||||
| 
 | 
 | ||||||
| 2014/01/02 | 2014/01/02 | ||||||
|     expenses:food            $1 |     expenses:food            $1 | ||||||
|     assets:cash             $-1 |     assets:cash | ||||||
| 
 | 
 | ||||||
| >>>2 | >>>2 | ||||||
| >>>=0 | >>>=0 | ||||||
| @ -47,7 +47,7 @@ hledger print -f personal.journal -f ../journal/a.timeclock -f ../journal/b.time | |||||||
| >>> | >>> | ||||||
| 2014/01/02 | 2014/01/02 | ||||||
|     expenses:food            $1 |     expenses:food            $1 | ||||||
|     assets:cash             $-1 |     assets:cash | ||||||
| 
 | 
 | ||||||
| 2016/01/01 * 12:00-16:00 | 2016/01/01 * 12:00-16:00 | ||||||
|     (a:aa)         4.00h |     (a:aa)         4.00h | ||||||
|  | |||||||
| @ -6,6 +6,6 @@ hledger -f - print | |||||||
| >>> | >>> | ||||||
| 2009/01/01 проверка | 2009/01/01 проверка | ||||||
|     счёт:первый             1 |     счёт:первый             1 | ||||||
|     счёт:второй            -1 |     счёт:второй | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
|  | |||||||
| @ -21,11 +21,11 @@ hledger -f - print | |||||||
| >>> | >>> | ||||||
| 2014/01/01 transaction 1 | 2014/01/01 transaction 1 | ||||||
|     㐀     㐃㐃1 @ 2 㐂㐂㐂㐂㐂㐂㐂㐂㐂㐂㐂 |     㐀     㐃㐃1 @ 2 㐂㐂㐂㐂㐂㐂㐂㐂㐂㐂㐂 | ||||||
|     㐀:㐁         -2 㐂㐂㐂㐂㐂㐂㐂㐂㐂㐂㐂    ; 㐃㐃-1 |     㐀:㐁      ; 㐃㐃-1 | ||||||
| 
 | 
 | ||||||
| 2014/01/02 transaction 2 | 2014/01/02 transaction 2 | ||||||
|     㐀:㐁:㐂     USD 1 @@ EUR 1 |     㐀:㐁:㐂            USD 1 | ||||||
|     㐀:㐁:㐂:㐃          EUR -1 |     㐀:㐁:㐂:㐃        EUR -1 | ||||||
| 
 | 
 | ||||||
| 2014/01/03 transaction 3 | 2014/01/03 transaction 3 | ||||||
|     㐀:㐁:㐂:㐃:㐄             1 |     㐀:㐁:㐂:㐃:㐄             1 | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ hledger -f - print | |||||||
|     ; transaction comment 1 |     ; transaction comment 1 | ||||||
|     ; transaction comment 2 |     ; transaction comment 2 | ||||||
|     a             1 |     a             1 | ||||||
|     b            -1 |     b | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| @ -27,7 +27,7 @@ hledger -f - print | |||||||
| >>> | >>> | ||||||
| 2009/01/01 x | 2009/01/01 x | ||||||
|     a             1 |     a             1 | ||||||
|     b            -1 |     b | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| @ -51,7 +51,7 @@ hledger -f - print | |||||||
|     ; transaction new line comment |     ; transaction new line comment | ||||||
|     a             1    ; posting 1 same line comment |     a             1    ; posting 1 same line comment | ||||||
|     ; posting 1 new line comment |     ; posting 1 new line comment | ||||||
|     b            -1 |     b | ||||||
|     ; posting 2 new line comment |     ; posting 2 new line comment | ||||||
| 
 | 
 | ||||||
| >>>2 | >>>2 | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ hledger -f- print | |||||||
| >>>2 /unexpected/ | >>>2 /unexpected/ | ||||||
| >>>= 1 | >>>= 1 | ||||||
| # 2. with quotes, ok; quotes appear in print output | # 2. with quotes, ok; quotes appear in print output | ||||||
| hledger -f- print | hledger -f- print --explicit | ||||||
| <<< | <<< | ||||||
| 2010-04-05 x | 2010-04-05 x | ||||||
|    a   10 "DE 0002 635307" |    a   10 "DE 0002 635307" | ||||||
| @ -34,7 +34,7 @@ hledger -f- balance | |||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| # 4. autobalance with prices | # 4. autobalance with prices | ||||||
| hledger -f- print | hledger -f- print --explicit | ||||||
| <<< | <<< | ||||||
| 2016/1/1 | 2016/1/1 | ||||||
|     saving-card  $-105 |     saving-card  $-105 | ||||||
|  | |||||||
| @ -24,7 +24,7 @@ hledger -f- print | |||||||
| >>> | >>> | ||||||
| 2000/02/29 x | 2000/02/29 x | ||||||
|     a             1 |     a             1 | ||||||
|     b            -1 |     b | ||||||
| 
 | 
 | ||||||
| >>>= 0 | >>>= 0 | ||||||
| # 4. 29th feb on non-leap year should fail | # 4. 29th feb on non-leap year should fail | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ hledger -f- print | |||||||
| >>> | >>> | ||||||
| 2010/01/01 | 2010/01/01 | ||||||
|     a          1000 |     a          1000 | ||||||
|     b         -1000 |     b | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| @ -26,7 +26,7 @@ D £1000.00 | |||||||
| >>> | >>> | ||||||
| 2010/01/01 | 2010/01/01 | ||||||
|     a      £1000.00 |     a      £1000.00 | ||||||
|     b     £-1000.00 |     b | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| @ -40,7 +40,7 @@ D $1,000 | |||||||
| >>> | >>> | ||||||
| 2010/01/01 | 2010/01/01 | ||||||
|     a     $1000,000 |     a     $1000,000 | ||||||
|     b    $-1000,000 |     b | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -8,6 +8,6 @@ hledger -f - print | |||||||
| 2009/01/01 x | 2009/01/01 x | ||||||
|     a                   2 |     a                   2 | ||||||
|     b (b) b            -1 |     b (b) b            -1 | ||||||
|     c                  -1 |     c | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ hledger -f - print | |||||||
| 
 | 
 | ||||||
| # 2. and here the price should be printed with its original precision, not | # 2. and here the price should be printed with its original precision, not | ||||||
| # the canonical display precision | # the canonical display precision | ||||||
| hledger -f - print | hledger -f - print --explicit | ||||||
| <<< | <<< | ||||||
| 2010/1/1 | 2010/1/1 | ||||||
|    a  $0.00 |    a  $0.00 | ||||||
| @ -130,7 +130,7 @@ D $1000.0 | |||||||
| # the max precisions of the commodities being converted (#262). | # the max precisions of the commodities being converted (#262). | ||||||
| # Here the (irrational) price should be displayed with just precision 4 | # Here the (irrational) price should be displayed with just precision 4 | ||||||
| # (C's precision 2 + D's precision 2). | # (C's precision 2 + D's precision 2). | ||||||
| hledger -f- print | hledger -f- print --explicit | ||||||
| <<< | <<< | ||||||
| 2015/1/1 | 2015/1/1 | ||||||
|     c    C 10.00 |     c    C 10.00 | ||||||
| @ -147,7 +147,7 @@ hledger -f- print | |||||||
| 
 | 
 | ||||||
| ## 8. Here the price should be displayed with precision 7 | ## 8. Here the price should be displayed with precision 7 | ||||||
| # (E's precision 4 + F's precision 3). | # (E's precision 4 + F's precision 3). | ||||||
| hledger -f- print | hledger -f- print --explicit | ||||||
| <<< | <<< | ||||||
| 2015/1/1 | 2015/1/1 | ||||||
|     e    E 10.0000 |     e    E 10.0000 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| # price-related tests | # price-related tests | ||||||
| # 1. print a transaction with an explicit unit price | # 1. print a transaction with an explicit unit price | ||||||
| hledger -f- print | hledger -f- print --explicit | ||||||
| <<< | <<< | ||||||
| 2011/01/01 | 2011/01/01 | ||||||
|     expenses:foreign currency       €100 @ $1.35 |     expenses:foreign currency       €100 @ $1.35 | ||||||
| @ -13,7 +13,7 @@ hledger -f- print | |||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| # 2. -B/--cost converts to the price's commodity ("cost") | # 2. -B/--cost converts to the price's commodity ("cost") | ||||||
| hledger -f- print --cost | hledger -f- print --explicit --cost | ||||||
| <<< | <<< | ||||||
| 2011/01/01 | 2011/01/01 | ||||||
|     expenses:foreign currency       €100 @ $1.35 |     expenses:foreign currency       €100 @ $1.35 | ||||||
| @ -26,7 +26,7 @@ hledger -f- print --cost | |||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| # 3. print a transaction with a total price | # 3. print a transaction with a total price | ||||||
| hledger -f - print | hledger -f - print --explicit | ||||||
| <<< | <<< | ||||||
| 2011/01/01 | 2011/01/01 | ||||||
|     expenses:foreign currency       €100 @@ $135 |     expenses:foreign currency       €100 @@ $135 | ||||||
| @ -40,7 +40,7 @@ hledger -f - print | |||||||
| 
 | 
 | ||||||
| # 4. when the balance has exactly two commodities, both unpriced, infer an | # 4. when the balance has exactly two commodities, both unpriced, infer an | ||||||
| # implicit conversion price for the first one in terms of the second. | # implicit conversion price for the first one in terms of the second. | ||||||
| hledger -f - print | hledger -f - print --explicit | ||||||
| <<< | <<< | ||||||
| 2011/01/01 | 2011/01/01 | ||||||
|     expenses:foreign currency       €100 |     expenses:foreign currency       €100 | ||||||
| @ -61,7 +61,7 @@ hledger -f - print | |||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| ## 5. another, from ledger tests. Just one posting to price so uses @@. | ## 5. another, from ledger tests. Just one posting to price so uses @@. | ||||||
| hledger -f - print | hledger -f - print --explicit | ||||||
| <<< | <<< | ||||||
| 2002/09/30 * 1a1a6305d06ce4b284dba0d267c23f69d70c20be | 2002/09/30 * 1a1a6305d06ce4b284dba0d267c23f69d70c20be | ||||||
|     c56a21d23a6535184e7152ee138c28974f14280c  866.231000 GGGGG |     c56a21d23a6535184e7152ee138c28974f14280c  866.231000 GGGGG | ||||||
|  | |||||||
| @ -73,12 +73,12 @@ alias /A (.)/=\1 | |||||||
| 2011/01/01 | 2011/01/01 | ||||||
|     b b             1 |     b b             1 | ||||||
|     b b             2 |     b b             2 | ||||||
|     c              -3 |     c | ||||||
| 
 | 
 | ||||||
| 2011/01/01 | 2011/01/01 | ||||||
|     b             1 |     b             1 | ||||||
|     b             2 |     b             2 | ||||||
|     c            -3 |     c | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| @ -98,7 +98,7 @@ hledger -f- print --alias '/A (.)/=a' --alias /a/=b | |||||||
| 2011/01/01 | 2011/01/01 | ||||||
|     b             1 |     b             1 | ||||||
|     b             2 |     b             2 | ||||||
|     c            -3 |     c | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| @ -117,7 +117,7 @@ alias E=F | |||||||
| >>> | >>> | ||||||
| 2011/01/01 | 2011/01/01 | ||||||
|     [E:x]             1 |     [E:x]             1 | ||||||
|     [x:A:x]            -1 |     [x:A:x] | ||||||
| 
 | 
 | ||||||
| >>>2 | >>>2 | ||||||
| >>>=0 | >>>=0 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| # amount layout tests, using default vertical layout | # amount layout tests, using default vertical layout | ||||||
| # 1. print | # 1. print | ||||||
| hledger -f - print | hledger -f - print --explicit | ||||||
| <<< | <<< | ||||||
| 2010/1/1 | 2010/1/1 | ||||||
|     a  EUR 1    ; a euro |     a  EUR 1    ; a euro | ||||||
| @ -47,8 +47,7 @@ hledger -f - balance | |||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| # 4. a single-commodity zero amount's commodity/decimal places/price is preserved, when possible | # 4. a single-commodity zero amount's commodity/decimal places/price is preserved, when possible | ||||||
| # | hledger -f- print --explicit --empty | ||||||
| hledger -f- print --empty |  | ||||||
| <<< | <<< | ||||||
| 2010/3/1 x | 2010/3/1 x | ||||||
|   a  $0.00 @ 3EUR |   a  $0.00 @ 3EUR | ||||||
|  | |||||||
| @ -17,11 +17,11 @@ hledger -f- print --cleared | |||||||
| >>> | >>> | ||||||
| 2010/01/02 * x | 2010/01/02 * x | ||||||
|     a             1 |     a             1 | ||||||
|     b            -1 |     b | ||||||
| 
 | 
 | ||||||
| 2010/01/03 * | 2010/01/03 * | ||||||
|     a             1 |     a             1 | ||||||
|     b            -1 |     b | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
| @ -42,7 +42,7 @@ hledger -f- print --uncleared | |||||||
| >>> | >>> | ||||||
| 2010/01/01 x | 2010/01/01 x | ||||||
|     a             1 |     a             1 | ||||||
|     b            -1 |     b | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										114
									
								
								tests/print/explicit.test
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								tests/print/explicit.test
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,114 @@ | |||||||
|  | # Tests of --explicit option effect | ||||||
|  | 
 | ||||||
|  | # 1. implicit transaction balance w/o --explict | ||||||
|  | hledger -f - print | ||||||
|  | <<< | ||||||
|  | 2017/1/1 | ||||||
|  |     expenses  $5 | ||||||
|  |     assets | ||||||
|  | >>> | ||||||
|  | 2017/01/01 | ||||||
|  |     expenses            $5 | ||||||
|  |     assets | ||||||
|  | 
 | ||||||
|  | >>>2 | ||||||
|  | >>>=0 | ||||||
|  | 
 | ||||||
|  | # 2. implicit transaction balance w/ --explict | ||||||
|  | hledger -f - print --explicit | ||||||
|  | <<< | ||||||
|  | 2017/1/1 | ||||||
|  |     expenses  $5 | ||||||
|  |     assets | ||||||
|  | >>> | ||||||
|  | 2017/01/01 | ||||||
|  |     expenses            $5 | ||||||
|  |     assets             $-5 | ||||||
|  | 
 | ||||||
|  | >>>2 | ||||||
|  | >>>=0 | ||||||
|  | 
 | ||||||
|  | # 3. implicit commodity price w/o --explict | ||||||
|  | hledger -f - print | ||||||
|  | <<< | ||||||
|  | 2017/1/1 | ||||||
|  |     expenses  4 EUR | ||||||
|  |     assets  $-5 | ||||||
|  | >>> | ||||||
|  | 2017/01/01 | ||||||
|  |     expenses         4 EUR | ||||||
|  |     assets             $-5 | ||||||
|  | 
 | ||||||
|  | >>>2 | ||||||
|  | >>>=0 | ||||||
|  | 
 | ||||||
|  | # 4. implicit commodity price w/ --explict | ||||||
|  | hledger -f - print --explicit | ||||||
|  | <<< | ||||||
|  | 2017/1/1 | ||||||
|  |     expenses  4 EUR | ||||||
|  |     assets  $-5 | ||||||
|  | >>> | ||||||
|  | 2017/01/01 | ||||||
|  |     expenses   4 EUR @@ $5 | ||||||
|  |     assets             $-5 | ||||||
|  | 
 | ||||||
|  | >>>2 | ||||||
|  | >>>=0 | ||||||
|  | 
 | ||||||
|  | # 5. implicit account balance w/o --explict | ||||||
|  | hledger -f - print | ||||||
|  | <<< | ||||||
|  | 2017/1/1 | ||||||
|  |     assets  = $100 | ||||||
|  |     equity | ||||||
|  | >>> | ||||||
|  | 2017/01/01 | ||||||
|  |     assets   = $100 | ||||||
|  |     equity | ||||||
|  | 
 | ||||||
|  | >>>2 | ||||||
|  | >>>=0 | ||||||
|  | 
 | ||||||
|  | # 6. implicit account balance w/ --explict | ||||||
|  | hledger -f - print --explicit | ||||||
|  | <<< | ||||||
|  | 2017/1/1 | ||||||
|  |     assets  = $100 | ||||||
|  |     equity | ||||||
|  | >>> | ||||||
|  | 2017/01/01 | ||||||
|  |     assets          $100 = $100 | ||||||
|  |     equity         $-100 | ||||||
|  | 
 | ||||||
|  | >>>2 | ||||||
|  | >>>=0 | ||||||
|  | 
 | ||||||
|  | # 7. default commodity always applied because print do not issue appropriate directive | ||||||
|  | hledger -f - print | ||||||
|  | <<< | ||||||
|  | D 1000.00 EUR | ||||||
|  | 2017/1/1 | ||||||
|  |     expenses  100 | ||||||
|  |     assets | ||||||
|  | >>> | ||||||
|  | 2017/01/01 | ||||||
|  |     expenses    100.00 EUR | ||||||
|  |     assets | ||||||
|  | 
 | ||||||
|  | >>>2 | ||||||
|  | >>>=0 | ||||||
|  | 
 | ||||||
|  | # 8. option --explicit implies effect of --empty | ||||||
|  | hledger -f - print --explicit | ||||||
|  | <<< | ||||||
|  | 2017/1/1 | ||||||
|  |     assets  $0 | ||||||
|  |     equity | ||||||
|  | >>> | ||||||
|  | 2017/01/01 | ||||||
|  |     assets             0 | ||||||
|  |     equity             0 | ||||||
|  | 
 | ||||||
|  | >>>2 | ||||||
|  | >>>=0 | ||||||
| @ -6,6 +6,6 @@ hledger -f - print | |||||||
| >>> | >>> | ||||||
| 2009/01/01 x | 2009/01/01 x | ||||||
|     aaaaabbbbbcccccdddddeeeeefffffggggghhhhh             1 |     aaaaabbbbbcccccdddddeeeeefffffggggghhhhh             1 | ||||||
|     b                                                   -1 |     b | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
|  | |||||||
| @ -11,6 +11,6 @@ hledger -f - print desc:x | |||||||
| >>> | >>> | ||||||
| 2009/01/01 x | 2009/01/01 x | ||||||
|     a             1 |     a             1 | ||||||
|     b            -1 |     b | ||||||
| 
 | 
 | ||||||
| >>>=0 | >>>=0 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user