lib: disallow prices in balance assertions/assignments (fix #824)
(and in Ledger-style {=FIXEDLOTPRICES} )
			
			
This commit is contained in:
		
							parent
							
								
									6f36702141
								
							
						
					
					
						commit
						86a91c514d
					
				| @ -721,7 +721,7 @@ priceamountp = option NoPrice $ do | ||||
|   priceConstructor <- char '@' *> pure TotalPrice <|> pure UnitPrice | ||||
| 
 | ||||
|   lift (skipMany spacenonewline) | ||||
|   priceAmount <- amountwithoutpricep <?> "amount (as a price)" | ||||
|   priceAmount <- amountwithoutpricep <?> "unpriced amount (specifying a price)" | ||||
| 
 | ||||
|   pure $ priceConstructor priceAmount | ||||
| 
 | ||||
| @ -731,14 +731,17 @@ balanceassertionp = do | ||||
|   char '=' | ||||
|   exact <- optional $ try $ char '=' | ||||
|   lift (skipMany spacenonewline) | ||||
|   a <- amountp <?> "amount (for a balance assertion or assignment)" -- XXX should restrict to a simple amount | ||||
|   a <- amountwithoutpricep <?> "unpriced amount (for a balance assertion or assignment)" | ||||
|   return BalanceAssertion | ||||
|     { baamount = a | ||||
|     , baexact = isJust exact | ||||
|     , baposition = sourcepos | ||||
|     } | ||||
| 
 | ||||
| -- http://ledger-cli.org/3.0/doc/ledger3.html#Fixing-Lot-Prices | ||||
| -- Parse a Ledger-style fixed lot price: {=PRICE} | ||||
| -- https://www.ledger-cli.org/3.0/doc/ledger3.html#Fixing-Lot-Prices . | ||||
| -- Currently we ignore these (hledger's @ PRICE is equivalent), | ||||
| -- and we don't parse a Ledger-style {PRICE} (equivalent to Ledger's @ PRICE). | ||||
| fixedlotpricep :: JournalParser m (Maybe Amount) | ||||
| fixedlotpricep = optional $ do | ||||
|   try $ do | ||||
| @ -747,7 +750,7 @@ fixedlotpricep = optional $ do | ||||
|   lift (skipMany spacenonewline) | ||||
|   char '=' | ||||
|   lift (skipMany spacenonewline) | ||||
|   a <- amountp -- XXX should restrict to a simple amount | ||||
|   a <- amountwithoutpricep <?> "unpriced amount (for an ignored ledger-style fixed lot price)" | ||||
|   lift (skipMany spacenonewline) | ||||
|   char '}' | ||||
|   return a | ||||
|  | ||||
| @ -436,6 +436,11 @@ One workaround is to isolate each commodity into its own subaccount: | ||||
|   a:euro   0 ==  1€ | ||||
| ``` | ||||
| 
 | ||||
| ### Assertions and prices | ||||
| 
 | ||||
| Balance assertion (or assignment) amounts should not have a [price](#transaction-prices), | ||||
| as the meaning of that would be unclear. | ||||
| 
 | ||||
| ### Assertions and subaccounts | ||||
| 
 | ||||
| Balance assertions do not count the balance from subaccounts; they check | ||||
|  | ||||
| @ -356,3 +356,12 @@ hledger -f - stats | ||||
| >>> /Transactions/ | ||||
| >>>2 | ||||
| >>>=0 | ||||
| 
 | ||||
| # 20. Balance assertions may not have a price in them. | ||||
| hledger -f- stats | ||||
| <<< | ||||
| 2019/01/01 | ||||
|     (a)             1A = 1A @ 2B | ||||
| >>> | ||||
| >>>2 /unexpected '@'/ | ||||
| >>>=1 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user