journal: also parse Ledger-style "virtual posting costs" - (@), (@@)
This commit is contained in:
		
							parent
							
								
									847f924828
								
							
						
					
					
						commit
						3ad2e50ec5
					
				| @ -735,15 +735,17 @@ simplecommoditysymbolp :: TextParser m CommoditySymbol | ||||
| simplecommoditysymbolp = takeWhile1P Nothing (not . isNonsimpleCommodityChar) | ||||
| 
 | ||||
| priceamountp :: JournalParser m AmountPrice | ||||
| priceamountp = (do | ||||
| priceamountp = label "transaction price" $ do | ||||
|   -- https://www.ledger-cli.org/3.0/doc/ledger3.html#Virtual-posting-costs | ||||
|   parenthesised <- option False $ char '(' >> pure True | ||||
|   char '@' | ||||
|   priceConstructor <- char '@' *> pure TotalPrice <|> pure UnitPrice | ||||
|   when parenthesised $ void $ char ')' | ||||
| 
 | ||||
|   lift (skipMany spacenonewline) | ||||
|   priceAmount <- amountwithoutpricep -- <?> "unpriced amount (specifying a price)" | ||||
| 
 | ||||
|   pure $ priceConstructor priceAmount | ||||
|   ) <?> "price amount" | ||||
| 
 | ||||
| balanceassertionp :: JournalParser m BalanceAssertion | ||||
| balanceassertionp = do | ||||
| @ -1363,7 +1365,9 @@ tests_Common = tests "Common" [ | ||||
|             ,astyle=amountstyle{asprecision=0, asdecimalpoint=Nothing} | ||||
|             } | ||||
|         } | ||||
|     ] | ||||
|    ,test "unit price, parenthesised" $ assertParse amountp "$10 (@) €0.5" | ||||
|    ,test "total price, parenthesised" $ assertParse amountp "$10 (@@) €0.5" | ||||
|    ] | ||||
| 
 | ||||
|   ,let p = lift (numberp Nothing) :: JournalParser IO (Quantity, Int, Maybe Char, Maybe DigitGroupStyle) in | ||||
|    test "numberp" $ do | ||||
|  | ||||
| @ -549,6 +549,12 @@ There are several ways to record a transaction price: | ||||
|       assets:dollars  $-135          ; for $135 | ||||
|     ``` | ||||
| 
 | ||||
| 4. | ||||
| 5. Like 1 and 2, but the `@` or `@@` is parenthesised; this is for | ||||
|    compatibility with Ledger journals  | ||||
|    ([Virtual posting costs](https://www.ledger-cli.org/3.0/doc/ledger3.html#Virtual-posting-costs)),  | ||||
|    and in hledger is equivalent to 1 and 2. | ||||
| 
 | ||||
| Use the [`-B/--cost`](hledger.html#reporting-options) flag to convert | ||||
| amounts to their transaction price's commodity, if any. | ||||
| (mnemonic: "B" is from "cost Basis", as in Ledger). | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user