Merge pull request #126 from adept/master

Fix for assigning multiple fields in CSV parsing
This commit is contained in:
Simon Michael 2013-06-19 07:11:59 -07:00
commit d913ee96f7
2 changed files with 11 additions and 2 deletions

View File

@ -623,9 +623,9 @@ showRecord r = "the CSV record is: "++intercalate ", " (map show r)
getEffectiveAssignment :: CsvRules -> CsvRecord -> JournalFieldName -> Maybe FieldTemplate
getEffectiveAssignment rules record f = lastMay $ assignmentsFor f
where
assignmentsFor f = map snd $ toplevelassignments ++ conditionalassignments
assignmentsFor f = map snd $ filter ((==f).fst) $ toplevelassignments ++ conditionalassignments
where
toplevelassignments = filter ((==f).fst) $ rassignments rules
toplevelassignments = rassignments rules
conditionalassignments = concatMap snd $ filter blockMatches $ blocksAssigning f
where
blocksAssigning f = filter (any ((==f).fst) . snd) $ rconditionalblocks rules

View File

@ -35,3 +35,12 @@
# >>>2 /using conversion rules file.*t.rules/
# >>>=0
# 4. handle conditions assigning multiple fields
rm -rf t.rules$$; printf 'fields date, description, amount\ndate-format %%d/%%Y/%%m\ncurrency $\naccount1 assets:myacct\nif Flubber\n account2 acct\n comment cmt' >t.rules$$; echo '10/2009/09,Flubber Co,50' | hledgerdev -f- print --rules-file t.rules$$; rm -rf t.rules$$
>>>
2009/09/10 Flubber Co ;cmt
acct $-50
assets:myacct $50
>>>2 /using conversion rules file.*t.rules/
>>>=0