Allow amounts with total price in the input to "hledger convert"

This commit is contained in:
Dmitry Astapov 2011-04-10 15:01:26 +00:00
parent b4eca62334
commit 2c771f3d7f
2 changed files with 14 additions and 2 deletions

View File

@ -578,6 +578,15 @@ Notes:
matched text with `\0` and any regex groups with `\1`, `\2` in the
usual way.
- Amount may contain the total or per-unit price. For example, lets
assume that your base account "bank-current" is in GBP, and your CSV specifies amount of "10
USD @@ 15 GBP", and account-assigning rules selected account
"travel-expenses" for this transaction. As a result,
"travel-expenses" would be credited by "10 USD @@ 15 GBP", and
"bank-current" would be debited by "-15 GBP". This way you could
track the expenses in the currencies there were made, while
keeping your base account in single currency
### histogram
The histogram command displays a quick bar chart showing transaction

View File

@ -10,7 +10,7 @@ import Hledger.Data.Types (Journal,AccountName,Transaction(..),Posting(..),Posti
import Hledger.Data.Utils (strip, spacenonewline, restofline, parseWithCtx, assertParse, assertParseEqual, error')
import Hledger.Read.JournalReader (someamount,ledgeraccountname)
import Hledger.Data.Journal (nullctx)
import Hledger.Data.Amount (nullmixedamt)
import Hledger.Data.Amount (nullmixedamt, costOfMixedAmount)
import Safe (atDef, maximumDef)
import System.IO (stderr)
import Text.CSV (parseCSVFromFile, printCSV)
@ -284,6 +284,9 @@ transactionFromCsvRecord rules fields =
amountstr'' = currency ++ amountstr'
amountparse = runParser someamount nullctx "" amountstr''
amount = either (const nullmixedamt) id amountparse
-- Using costOfMixedAmount here to allow complex costs like "10 GBP @@ 15 USD".
-- Aim is to have "10 GBP @@ 15 USD" applied to account "acct", but have "-15USD" applied to "baseacct"
baseamount = costOfMixedAmount amount
unknownacct | (readDef 0 amountstr' :: Double) < 0 = "income:unknown"
| otherwise = "expenses:unknown"
(acct,newdesc) = identify (accountRules rules) unknownacct desc
@ -309,7 +312,7 @@ transactionFromCsvRecord rules fields =
Posting {
pstatus=False,
paccount=baseAccount rules,
pamount=(-amount),
pamount=(-baseamount),
pcomment="",
ptype=RegularPosting,
pmetadata=[],